FFmpeg / ffv1.3 / mkv是否有可能创建不大于其各部分之和的无损视频(如果是,则如何),如果没有,那么尺寸接近的好选择是什么?视频必须是无损的。
我正在尝试使用FFmpeg在一组类似的jpeg图像(来自网络摄像头的图像)上用ffv1.3创建一个mkv。我能够创建视频,但是它至少是jpeg图像集合大小的2倍。我本来希望获得相同或更高的压缩水平。
我确实知道jpeg本身已针对压缩进行了优化。但是,应该可以进一步压缩大量非常相似的图像,或者在这种情况下类似于原始图像的总和。
我用来创建文件的命令是:
ffmpeg -pattern_type glob -i'* .jpg'-vcodec ffv1-级别3 -an -pass 1 -passlogfile passlog -f matroska / dev / null
ffmpeg -pattern_type glob -i'* .jpg'-vcodec ffv1-级别3 -an -pass 2 -passlogfile passlog -f matroska〜/ foo.mkv
输入文件总数为24M,但生成的mkv为96M(每du -h)。
第二遍的结果:
ffmpeg version N-79053-g7eedad9 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration: --enable-cross-compile --cross-prefix= --arch=armel --target-os=linux --prefix=/my/path/were/i/keep/built/arm/stuff
libavutil 55. 19.100 / 55. 19.100
libavcodec 57. 28.103 / 57. 28.103
libavformat 57. 28.101 / 57. 28.101
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 39.102 / 6. 39.102
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
Input #0, image2, from '*.jpg':
Duration: 00:00:21.32, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 25 fps, 25 tbr, 25 tbn, 25 tbc
File '/home/pi/foo.mkv' already exists. Overwrite ? [y/N] y
[swscaler @ 0x3671f30] deprecated pixel format used, make sure you did set range correctly
Output #0, matroska, to '/home/pi/foo.mkv':
Metadata:
encoder : Lavf57.28.101
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p, 640x480, q=2-31, pass 2, 200 kb/s, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc57.28.103 ffv1
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> ffv1 (native))
Press [q] to stop, [?] for help
frame= 533 fps=4.2 q=-0.0 Lsize= 97815kB time=00:00:21.32 bitrate=37584.4kbits/s speed=0.168x
video:97808kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.006607%
每个jpeg大约为43143字节(每ls -al),但是运行以下命令,该工具会指出每个图像为614400字节(在视频和独立的jpeg图像中)。我认为这是图像的未压缩大小(640x480x2)。
ffmpeg -pattern_type glob -i'* .jpg'-f framemd5-
以下是图片的结果,mkv的图片大小相同。
ffmpeg version N-79053-g7eedad9 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration: --enable-cross-compile --cross-prefix= --arch=armel --target-os=linux --prefix=/my/path/were/i/keep/built/arm/stuff
libavutil 55. 19.100 / 55. 19.100
libavcodec 57. 28.103 / 57. 28.103
libavformat 57. 28.101 / 57. 28.101
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 39.102 / 6. 39.102
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
Input #0, image2, from '*.jpg':
Duration: 00:00:21.32, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 25 fps, 25 tbr, 25 tbn, 25 tbc
#format: frame checksums
#version: 1
#hash: MD5
#software: Lavf57.28.101
#tb 0: 1/25
#stream#, dts, pts, duration, size, hash
Output #0, framemd5, to 'pipe:':
Metadata:
encoder : Lavf57.28.101
Stream #0:0: Video: rawvideo (Y42B / 0x42323459), yuvj422p, 640x480, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.28.103 rawvideo
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))
Press [q] to stop, [?] for help
0, 0, 0, 1, 614400, 2148ff8b95296f4bacc1099d13235063
0, 1, 1, 1, 614400, da330e2acd2f7d7a1e79fe79fccc90cf
0, 2, 2, 1, 614400, f55563c13a9f232ce32419fa26e37214
0, 3, 3, 1, 614400, c53d994fff0a9b26529fa8763deae520
编辑:最佳压缩(和良好的速度)来自于jpeg图像本身的容器:
ffmpeg -pattern_type glob -i'* .jpg'-vcodec复制-an -f matroska〜/ foo.mkv
生成的文件刚好超过24M(相对于9600万ffv1)。同样,解压缩后的jpeg图像为312M,在两种情况下它们都压缩得很好。如果我以jpeg以外的其他格式开始,那么ffv1会是理想的选择,但对我而言,有损的jpeg也是无损的初始图像。
我通常发现,使用无损编解码器对有损视频进行编码会导致更大的文件大小。FFmpeg必须先解压缩您的输入,然后才能将其编码为ffv1,因此它可以从jpeg的未压缩版本开始工作。此处概述了该过程:https : //ffmpeg.org/ffmpeg.html#Detailed-description
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句