Answers:
请阅读 FFmpeg 的文档,并运行ffmpeg -h full
以获取选项列表。另外,请看一下我写的这篇文章,它显示了x264和x265等编码器中速率控制模式之间的差异。
通常,这是这些选项的含义:
-b:v
(或-vb
相同)指定编码器使用的目标平均比特率:
-b
<int>
E..VA
。设置比特率(以比特/秒为单位)(从0到INT_MAX)
-minrate
指定要使用的最小公差:
-minrate
<int>
E..VA
。设置最小比特率容限(以位/秒为单位)。在设置CBR编码时最有用。否则它几乎没有用。(从INT_MIN到INT_MAX)
-maxrate
指定最大公差。但是,如文档所示,此方法仅与结合使用bufsize
:
-maxrate
<int>
E..VA
。设置最大比特率容限(以位/秒为单位)。需要bufsize
设置。(从INT_MIN到INT_MAX)
-bufsize
<int>
E..VA
。设置速率控制缓冲区大小(以位为单位)(从INT_MIN到INT_MAX)
这仅对可变比特率编码有意义,在这种情况下,编码器不是使用恒定比特率或恒定质量模型,而是在解码器处使用虚拟缓冲区模拟传输。的-minrate
/ -maxrate
/ -bufsize
选项控制缓冲区大小。通常,您仅将这种模式用于流式传输,因为该技术将限制比特率,以便不超过某个值,否则将导致解码器缓冲区上溢或下溢。
总而言之,您可以使用几种方法来限制比特率:
要设置CBR流程,您必须检查编码器提供了什么。通常,您无法达到“完美”的恒定比特率,因为编码器不会浪费比特。将-b:v
,-minrate
和-maxrate
设置为相同的级别将实现这一点,例如对于libx264:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
警告:这可能会导致难以编码的视频质量下降,并且会浪费比特。除非您绝对需要实现恒定速率输出,否则不要使用此选项。
设置受限/可变比特率过程以进行流传输。-b:v 3500K -maxrate 3500K -bufsize 1000K
例如,使用。您必须明显地根据上下文调整速率和缓冲区大小。缓冲区大小越大,允许的比特率变化就越大。
使用恒定的质量目标,并仅限制比特率以捕获峰值。例如,用于-c:v libx264 -crf 23 -maxrate 4M -bufsize 4M
以目标CRF为23的可变比特率进行编码,但将输出限制为最大4 MBit / s。