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

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

我正在使用 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

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

答案1

这实际上取决于您的上传速度。

bufsize这将决定 ffmpeg 如何保持比特率恒定。如果你设置了bufsize64k,按照FFmpeg Wiki:限制输出比特率,它将每 64 千字节计算一次当前比特率并进行相应调整。较小的尺寸bufsize可能会损害质量,因为它们在检查之间没有足够的空间让 x264 进行突然更改 - 您将得到块状效果。

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

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

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

然后,你需要稍微玩一下,但因为你必须从某个地方开始,所以我会从maxrate600k 左右开始,这在我用于一切之前通常对我来说已经足够令人满意了crf

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

实际上,没有正常值 - 它crf所做的就是根据它认为的最佳缓冲区大小来优化输出,以保持其速率设置。它会尝试在保持一定质量的同时保持尽可能低的文件大小,但偶尔会出现峰值。

相关内容