我不明白什么是 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)。
为什么会发生这种情况?为什么我们需要buffsize?缓冲区大小有什么作用?
基本上,VBV 使您能够确保编码流不会溢出或下溢解码器的缓冲区。如果快速传入太多数据,缓冲区就会溢出,您将被迫丢弃其中的一些数据。如果数据输入太慢,缓冲区就会耗尽,播放就会停止。
这有点违反直觉,但是VBV下溢向编码器速率缓冲区发出信号overflow(视频比特率大于输入速率)VBV 溢出向编码器速率缓冲区发出信号下溢(视频比特率低于输入速率)。
For ffmpeg
the bufsize
是缓冲区的大小。minrate
and maxrate
结合使用bufsize
设置 VBR(可变比特率)的最大和最小比特率变化容限。
minrate
通常与maxrate
实现接近 CBR(恒定比特率)。
maxrate
不是峰值比特率,而是可以进入缓冲区的最大比特率。如果您有一个很大的缓冲区(如第二个示例中所示),您可以在更长时间内容忍更高的比特率,直到缓冲区溢出。 VBV 可确保您的比特率在此之前降低。这就是为什么您的流可以达到 800-900 kbps。
你可以在这里阅读更多:--vbv-bufsize 和 --vbv-maxrate 之间的关系 http://forum.doom9.org/showthread.php?t=147460
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)