我无法理解什么是VBV(视频缓冲验证器)以及它与maxrate的关系。
当我使用此命令时:
ffmpeg -i input.mp4 -crf 21 -maxrate 750k -bufsize 750k -codec:v:0 libx264 -s 640x360 -r 30 output.mp4
output.mp4视频的比特率约为730 kb / s
但是,当我使用此命令(相同的命令,但使用-bufsize 5000k)时:
ffmpeg -i input.mp4 -crf 21 -maxrate 750k -bufsize 5000k -codec:v:0 libx264 -s 640x360 -r 30 output.mp4
output.mp4视频的比特率超过750kb / s(约800-900 kb / s)。
为什么会这样?为什么我们需要bufsize? bufsize做了什么?
答案 0 :(得分:13)
基本上VBV使您能够确保编码流不会溢出或下溢解码器的缓冲区。如果太多数据快速进入,缓冲区将溢出,您将被迫丢弃其中一些数据。如果数据进入太慢,缓冲区将耗尽,播放将停止。
它有点反直觉,但 VBV下溢表示编码器速率缓冲区溢出(视频比特率大于输入速率),而 VBV溢出表示编码器速率缓冲区下溢(视频比特率低于输入速率)。
对于ffmpeg
,bufsize
是缓冲区的大小。 minrate
和maxrate
与bufsize
结合使用,可设置VBR(可变比特率)的最大和最小比特率更改容差。
minrate
通常与maxrate
一起使用以实现近CBR(恒定比特率)。
maxrate
不是峰值比特率,而是可以进入缓冲区的最大比特率。如果你有一个大缓冲区,就像在你的第二个例子中那样,你可以容忍更高的比特率更长的时间,直到缓冲区溢出。 VBV确保在此之前降低比特率。这就是为什么您的流可以达到800-900 kbps的原因。
您可以在此处阅读更多内容:The relationship between --vbv-bufsize and --vbv-maxrate