FFmpeg中具有“ -vb”和“ minrate” /“ maxrate”设置的可变比特率


12

对于渲染,所需时间非常不同。

  • -b 3500K -minrate 0K -maxrate 8000K 耗时1小时17分钟
  • vb=3000k 需要2.5个小时

有什么vb 3000k和它有什么不同-b 3500K -minrate 0K -maxrate 8000K?这些是可变比特率设置吗?

如果更改为-b 3500K -minrate 3500K -maxrate 3500K,则该比特率恒定吗?

Answers:


16

阅读 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选项控制缓冲区大小。通常,您仅将这种模式用于流式传输,因为该技术将限制比特率,以便不超过某个值,否则将导致解码器缓冲区上溢或下溢。

总而言之,您可以使用几种方法来限制比特率:

  1. 要设置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
    

    警告:这可能会导致难以编码的视频质量下降,并且会浪费比特。除非您绝对需要实现恒定速率输出,否则不要使用此选项。

  2. 设置受限/可变比特率过程以进行流传输。-b:v 3500K -maxrate 3500K -bufsize 1000K例如,使用。您必须明显地根据上下文调整速率和缓冲区大小。缓冲区大小越大,允许的比特率变化就越大。

  3. 使用恒定的质量目标,并仅限制比特率以捕获峰值。例如,用于-c:v libx264 -crf 23 -maxrate 4M -bufsize 4M以目标CRF为23的可变比特率进行编码,但将输出限制为最大4 MBit / s。


1
如何使用可变比特率进行编码?如在语法中使用?
Scott Downey 2013年

您要使用哪种编码器?
slhck

ffmpeg的,我beleive用于有助于kdenlive
斯科特唐尼

不,我的意思是:x264(用于H.264 / MPEG-4 AVC视频)或XviD(用于MPEG-4)或Ogg Theora等。简而言之,您想要什么文件?MP4?
slhck 2013年

3
有关在FFmpeg中使用x264编码的更多信息,请参见此处。特别要看一下预设(我通常使用非常快的预设,在我的测试中,文件大小的最大下降是在超快和非常快之间-在此之后差异会增加更多。当然是YMMV)。
evilsoup 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.