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

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

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

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

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

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

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

答案1

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

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

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

但请注意,这将使用 1 次平均比特率方法,这对质量来说非常糟糕。相反,您应该尝试使用“恒定速率因子”进行编码,即您以某个质量为目标,然后编码器决定哪种平均比特率最适合您的文件:

ffmpeg -i ../../tos.avi -c:v libx264 -crf 23 tos_500k.mp4

您可以自由地尝试 crf 值。增加该值将意味着比特率降低和质量变差,降低该值则相反。

如果你确实想要达到平均比特率,你应该看看2 遍编码。另外,别忘了预设

顺便提一下,1080p 的 500k 太低了,效果会很差。如果您希望以如此低的比特率为目标,我建议您将分辨率降低到 480p (854x480)。720p 的最低比特率为 1.5mbps,而 1080p 的最低比特率为 3mbps。

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

答案2

500K 根本无法满足 1080p 分辨率的需求,即使在 H264 或 H265 上,你的图像质量也会很差,因为没有足够的数据来填充大帧大小,正如@Ely 提到的,你也应该指定编码器,即使我认为如果你将文件扩展名指定为 .mp4,最新版本的 ffmpeg 默认使用 h264,你的转换命令应该是这样的:-

ffmpeg -i ../../tos.avi -s 640x360 -v:c libx264  -b:v 500k tos_500k.mp4 

如果您想要更高的压缩率并以最佳的质量换取尺寸,请使用crf Constant Rate Factor 两遍转换方法,因为它将尝试根据每个帧的状态(快速移动的场景)来扩展比特率,从而获得更高的比特率。

ffmpeg -i tos.avi -s 640x360 -c:v libx264 -crf 23 -c:a aac tos_500k.mp4

如果你仍然不满意文件大小,请增加 crf 值,直到达到~27

相关内容