使用 `-b:v 500k` 使用 ffmpeg 降低比特率实际上并没有将比特率降低到 500k

nbu*_*urk 9 video ffmpeg bitrate

我正在尝试使用ffmpeg创建视频文件的几个降级版本。我通过命令行使用以下命令(该命令取自文档):

ffmpeg -i ../../tos.avi -b:v 500k tos_500k.avi

我正在尝试使用低于 2000 kbps(低至 ~125 kbps)的几个值,但是当我检查生成的视频文件时实际产生的下限约为 2000 kbps。我正在使用软件videospec检查这些值。

  1. 有谁知道为什么进一步降低比特率似乎没有任何效果?
  2. 你能给我一个提示,我可以如何有效地将视频的比特率降低到给定的水平?

[编辑]更准确地说,我的原始视频的分辨率为 1920x1080,比特率约为 15 Mbps。使用上述命令时,我可以毫无问题地将其降级​​到更大的比特率,例如 8000、5000,降到 2000 kbps。但是,低于 2000 的任何内容似乎都没有得到处理,因此生成的输出文件总是停留在超过 2000 kbps 的比特率上。(文件大小也非常接近成功降级到 2000 kbps 的文件。)

Ely*_*Ely 12

重新编码文件时,不应只指定比特率。我的猜测是 ffmpeg 默认尝试使用 mpeg4 编解码器,它拒绝使用低于 2mbps 的速度,因为它根本无法以如此高的分辨率低于。

我建议您使用 H.264 编解码器重新编码,您可以这样做:

ffmpeg -i ../../tos.avi -c:v libx264 -b:v 500k tos_500k.mp4
Run Code Online (Sandbox Code Playgroud)

但是请注意,这将使用 1-pass 平均比特率方法,这对质量非常不利。相反,您应该尝试使用“恒定速率因子”进行编码,即您针对特定质量,编码器决定哪种平均比特率最适合您的文件:

ffmpeg -i ../../tos.avi -c:v libx264 -crf 23 tos_500k.mp4
Run Code Online (Sandbox Code Playgroud)

您可以自由试验 crf 值。增加它意味着更低的比特率和更差的质量,反之亦然。

如果您绝对想针对平均比特率,您应该检查2-pass encoding。另外,不要忘记预设

附带说明一下,1080p 的 500k 太低了,你会得到很差的结果。如果您希望针对如此低的比特率,我建议您缩小到 480p (854x480)。720p 应至少具有 1.5mbps 比特率和 1080p 3mbps。

对于您以后的问题,不要忘记从 ffmpeg 发布输入/输出日志,它们总是有帮助的 :-) 。