如何考虑网络视频的比特率、-maxrate 和 -bufsize

Rob*_*bin 15 video ffmpeg bitrate

我正在使用 ffmpeg 对我的视频进行编码以将它们上传到网络上。我看到了这篇关于使用 ffmpeg 的帖子,但不太了解如何考虑这些值。

假设我有一个大小为 70 MB 的视频,持续时间为 4 分钟。我怎么会考虑这些标志值:-b:v-maxrate-bufsize该命令?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output
Run Code Online (Sandbox Code Playgroud)

或者是否有任何正常值,例如crf值是 19-24?我非常感谢您的帮助和指导。

Wya*_*ard 25

这真的取决于你的上传速度。

bufsize将确定 ffmpeg 如何保持比特率不变。如果您将 a 设置bufsize为 64k,根据FFmpeg Wiki: Limiting the output bitrate,它将每 64 KB 计算其当前比特率并进行相应调整。较小的尺寸bufsize可能对质量有害,因为它们不允许在检查 x264 之间有足够的空间来进行突然的更改 - 您会遇到阻塞。

如果你maxrate是 640kbps,你bufsize是 64k,那么每十分之一秒 x264 就会检查一次。这是次优的 - FFmpeg Wiki:流媒体网站的编码建议每 1 到 2 秒运行一次。如果这没有意义,请将其视为maxrate/ bufsize= 检查频率。根据经验,将此频率保持在 1 到 2 秒之间。

如果您同时设置maxratebufsize,您应该:

  • 设置maxrate为您可能的最低上传速度(在ffmpeg wiki 示例中,这是总上传速度的 80%,但您的里程可能会有所不同)。
  • 设置bufsize为与您的maxrate(一秒)相同和您的maxrate(2 秒)的两倍之间的某个值。如果这仍然不够低,请降低maxrate并相应地重新设置bufsize

然后,您将不得不玩一些游戏,但是由于您必须从某个地方开始,所以我从maxrate大约 600k开始,这通常足以让我满意,然后我才开始使用crf所有东西。

如果您愿意,您可以尝试降低 的值bufsize,例如每三或四秒,看看值如何改变您的输出外观。然后,您可以确定应该为视频担心多少。

没有正常值,真的 - 什么crf是根据它认为保持其速率设置的最佳缓冲区大小来优化输出。它试图在保持一定质量的同时保持尽可能低的文件大小,但代价是偶尔会出现峰值。