我正在尝试将我的电影编码为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
我想以几种不同的比特率(视频和音频组合)进行编码:
问题是无论我输入哪个比特率,我总是得到一个比特率高于1900 kbps的文件。 (上面的代码示例为1914 kbps。)
我做错了什么?
答案 0 :(得分:13)
libvpx
在速率控制和质量设置方面有点复杂。有关详细信息,请参阅vpx Encoding Guide和VP8 Encode Parameter Guide。我花了一个小时挖掘源代码来理解它。
如果你想设置恒定的比特率,你必须将b:v
,maxrate
和minrate
设置为相同的值,例如像这样(注意我省略了音频这里的选项为了简洁):
ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm
如果您想要使用变量质量并且仅指定比特率的上限,则需要同时设置b:v
和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
的范围内更改每帧的质量,您也可以根据需要进行指定。为qmin
设置10的下限对我来说似乎有点高,但实质上你无论如何都要做一些试验和错误,因为如果最大比特率太低,你会不断地使它饱和。