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

Sco*_*ney 15 ffmpeg

对于渲染,所花费的时间是非常不同的。

  • -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,那是恒定的比特率吗?

slh*_*hck 18

阅读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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 有关在 FFmpeg 中使用 x264 进行编码的更多信息,请参见 [此处](https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide);特别是查看预设(我通常使用非常快的预设,在我的测试中,文件大小的最大下降介于超快和非常快之间 - 之后差异更大。当然是 YMMV)。 (3认同)