我正在使用 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
或者有任何正常值,例如crf
19-24 的值?我非常感谢您的帮助和指导。
答案1
这实际上取决于您的上传速度。
bufsize
这将决定 ffmpeg 如何保持比特率恒定。如果你设置了bufsize
64k,按照FFmpeg Wiki:限制输出比特率,它将每 64 千字节计算一次当前比特率并进行相应调整。较小的尺寸bufsize
可能会损害质量,因为它们在检查之间没有足够的空间让 x264 进行突然更改 - 您将得到块状效果。
如果你的maxrate
速率是 640kbps,你的bufsize
速率是 64k,那么 x264 会每十分之一秒检查一次。这不是最理想的 -FFmpeg Wiki:流媒体网站的编码建议每 1 到 2 秒运行一次。如果这不合理,请将其视为maxrate
/ bufsize
= 检查频率。根据经验,将此频率保持在 1 到 2 秒之间。
如果您同时设置maxrate
和bufsize
,您应该:
- 设置
maxrate
为您的最低上传速度(在ffmpeg wiki 示例,这是总上传速度的 80%,但您的里程可能会有所不同)。 - 设置
bufsize
为与您的时间相同maxrate
(一秒)和两倍maxrate
(两秒)之间的某个值。如果这个值仍然不够低,请降低您的时间maxrate
,然后相应地重新设置bufsize
。
然后,你需要稍微玩一下,但因为你必须从某个地方开始,所以我会从maxrate
600k 左右开始,这在我用于一切之前通常对我来说已经足够令人满意了crf
。
如果您愿意,您可以尝试降低 的值bufsize
,例如每三秒或四秒,只是为了看看该值如何改变您的输出外观。然后您可以确定您应该为视频担心多少。
实际上,没有正常值 - 它crf
所做的就是根据它认为的最佳缓冲区大小来优化输出,以保持其速率设置。它会尝试在保持一定质量的同时保持尽可能低的文件大小,但偶尔会出现峰值。