我正在尝试将电影编码为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

我想以几种不同的比特率(视频和音频组合)进行编码:
  • 2192 kbps
  • 1692 kbps
  • 1000 kbps

  • 问题是,无论我输入哪个比特率,我总会得到一个比特率高于1900 kbps的文件。 (1914 kbps,带有上面的代码示例。)

    我究竟做错了什么?

    最佳答案

    libvpx在速率控制和质量设置方面有些复杂。有关更多信息,请引用vpx Encoding GuideVP8 Encode Parameter Guide。我花了一个小时来仔细研究源代码才能理解它。

    如果要设置恒定比特率,则必须将b:vmaxrateminrate设置为相同的值,例如像这样(请注意,为简洁起见,我在此处省略了音频选项):

    ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm
    

    相反,如果您要使用可变质量并仅指定比特率的上限,则需要同时设置b:vcrf。如果省略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的下限对我来说似乎有点高,但是从本质上讲,无论如何,您都必须进行一些试验和错误,因为如果最大比特率太低,您将不断使其饱和。

    10-07 23:34