我正在尝试将我的电影编码为 WebM:
ffmpeg -i input.MOV -codec:v libvpx -quality good -cpu-used 0 -b:v 10k
-qmin 10 -qmax 42 -maxrate 10k -bufsize 20k -threads 8 -vf scale=-1:1080
-codec:a libvorbis -b:a 192k
output.webm
我想以几种不同的比特率(视频和音频组合)进行编码:
- 2192kbps
- 1692kbps
- 1000kbps
问题是,无论我输入哪种比特率,我总是得到比特率高于 1900 kbps 的文件。 (上面的代码示例为 1914 kbps。)
我究竟做错了什么?
libvpx
在速率控制和质量设置方面有点复杂。请参阅vpx 编码指南 http://ffmpeg.org/trac/ffmpeg/wiki/vpxEncodingGuide和VP8 编码参数指南 http://www.webmproject.org/docs/encoder-parameters/了解更多信息。我花了一个小时挖掘源代码才理解它。
如果您想设置恒定比特率,则必须设置b:v
, maxrate
and minrate
为相同的值,例如像这样(请注意,为了简洁起见,我在此处省略了音频选项):
ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm
如果您想使用可变质量并仅指定比特率的上限,那么您需要设置两者b:v
and crf
。如果你遗漏了crf
,指定的比特率将仅取平均值。只有crf
,编码器改变了含义b:v
至最大允许速率。
ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm
CRF 的值为 10 是一个很好的起点,但是libvpx
可能会在范围内改变每帧的质量qmin ≤ q ≤ qmax
,如果需要,您也可以指定。将下限设置为 10qmin
对我来说似乎有点高,但本质上无论如何你都必须进行一些尝试和错误,因为如果最大比特率太低,你会不断地使其饱和。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)