Encoding 为什么FFMPEG总是生成大的WebM文件?

Encoding 为什么FFMPEG总是生成大的WebM文件?,encoding,ffmpeg,webm,Encoding,Ffmpeg,Webm,我正在尝试将我的电影编码到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

我正在尝试将我的电影编码到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
  • 1000 kbps
问题是,无论我输入哪种比特率,我总是得到一个比特率高于1900 kbps的文件。(上面的代码示例为1914kbps。)


我做错了什么?

libvpx
在速率控制和质量设置方面有点复杂。有关更多信息,请参阅和。我花了一个小时钻研源代码来理解它

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

如果您想使用可变质量,只需指定比特率的上限,则需要同时设置
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的下限对我来说似乎有点高,但本质上你还是要做一些尝试和错误,因为如果最大比特率太低,你会不断使其饱和。

非常感谢你的时间!:)正如您在第一个示例中所说的,忽略质量才是关键。现在它就像一个符咒。
ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm