FFMPEG - 缓冲区大小公式

Dat*_*ata 7 video encoder ffmpeg video-streaming bitrate

有谁知道 FFMPEG 中 bufsize 的公式以及它检查的速率是什么?

我似乎找不到任何具体的答案。

是不是:bufsize = 比特率/速率?

在计算中是否应该使用最大速率而不是比特率?

计算完成检查的速率的示例:

bitrate: 700Kbps
maxrate: 700Kbps
bufsize: 70Kb

700Kbps/70Kb = 10 sec
Run Code Online (Sandbox Code Playgroud)

是对的吗?对我来说,这听起来不太正确,因为较小的 bufsize 应该以较高的速率运行检查,而 10 秒似乎间隔太长。

公式需要倒转吗?

有人知道公式和单位的正确语法吗?

MrP*_*ead 7

ffmpegbufsize只是 ffmpeg 根据转码的内容重新计算当前比特率之前处理的数据量(位数)。

您可能认为 bufsize 与关键帧类似。不同之处在于 bufsize 在处理 X 位数据后触发 ffmpeg 当前算法使用情况的重新评估。而与关键帧评估相关的命令(例如-g参数)则根据自上次关键帧评估以来已处理的帧数进行操作。

例如,假设您将 ffmpeg 设置为恒定比特率 (CBR) 模式,并将 -bufsize 设置为比特率的 2 倍。公式会很简单。每2帧,ffmpeg就会调整一次。另一方面,如果您使用 VBR 并将 -bufsize 设置为目标比特率的 2 倍,则 ffmpeg 调整其编码公式(和实际比特率)的准确频率将根据任何给定时刻的比特率而变化(因为它是可变的)。因此,频率(就处理的帧和/或位而言)将在整个编码过程中发生变化。

仅严格考虑比特率受限的编码模式(即非 CQ/CRF),-bufsize 目标的一个好的大概概念是使用 -maxsize 比特率的 1x - 2x 之间(或目标比特率,具体取决于编解码器和编码模式)。

编辑:进一步澄清一点....-bufsize与 结合使用来-maxsize准确确定何时应重新计算最大位数(bufsize 将指示何时发生)。

  • @blerontin 对于已完成的编码产品,它应该相当于 2 秒的播放时间(即内容),但不是 2 秒的编码时间。ffmpeg 将根据帧调整其对帧评估的分析,无论硬件在编码过程中需要多长时间才能达到该目标。 (2认同)