如何使用ffmpeg限制文件大小?


10

我想将长度为60秒的视频编码为目标或最大大小为10 MB

我知道两种方法。一种在FFMPEG-Wiki中进行了说明,另一种在文档中找到。不幸的是,我没有找到何时使用哪种方法的解释。

建议使用其中任何一种方法吗?如果不是,每种方法的优点/缺点是什么?

1)如ffmpeg-wiki所述,计算并设置比特率以匹配视频的长度

(10 MB * 8192 [将MB转换为千位])/ 60秒=〜1365 kbits / s总比特率1365k-128k(所需音频比特率)= 1237k视频比特率

ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4

2)使用-fs 参数,让ffmpeg弄清楚。

ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4

1
在您的第一个示例中,第一步也应使用libx264as c:v。在此fs示例中,您不会对视频进行转码,因为它-c:v copy已被使用。因此,presetcrf也没有任何作用。
吉安2015年

这对我很有帮助:stackoverflow.com/a/34547102/470749
Ryan

Answers:


11

fs参数达到其值后将停止编码。因此,如果在10MB第15秒编码时输出达到目标,则这就是输出文件的持续时间。

如果要确保对整个文件进行编码,但不超过设置的目标大小,请使用bitrate方法。为了在目标大小范围内适应多路复用开销和其他数据,请将视频比特率设置为略低一些,例如1-2%

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.