9

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

我究竟做错了什么?

4

1 回答 1

13

libvpx在码率控制和质量设置方面有点复杂。有关详细信息,请参阅vpx 编码指南VP8 编码参数指南。我花了一个小时挖掘源代码来理解它。

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

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,如果需要,您也可以指定。设置 10 的下限qmin对我来说似乎有点高,但本质上无论如何你都必须做一些试验和错误,因为如果最大比特率太低,你会不断地饱和它。

于 2013-04-02T18:42:55.330 回答