如何正确估计 mp4 H.264 视频大小?

How to correctly estimate mp4 H.264 video size?

基本上,视频大小是这样计算的:

Video Size per Second (bps)
=
Frame Rate (fps)
* Horizontal Pixels
* Vertical Pixels
* Bit Depth (bit)
/ Compression Ratio by Codec

正如我在某处读到的,mp4 视频的压缩比为 50。因此对于 720p 24fps 24 位彩色视频(暂时忽略音频大小),文件大小计算为:

24(fps) * 1280 * 720 * 24(bit) / 50
= 10616832 (bps) = 10.125 (Mbps)

如果您使用上述比特率计算 1 小时的视频大小,您会得到:

10.125(Mbps) * 3600(s) / 8(bit per Byte) / 1024(MB per GB)  = 4.449GB

...这似乎根本不对。根据日常经验,我们知道一个 1 小时长的 720p H.264 mp4 可能约为 1 GB 或更少。差异几乎是 5 倍。

我知道这个公式不包括 关键帧间隔 计算,从我读到的内容很多。我也知道这里的压缩率只是一个经验法则。可能还有一些我没有考虑到的因素。问题是我不知道如何填补这些缺失的因素。

那么,还有其他方法可以更准确地估计视频大小吗?

它比你的公式复杂得多,而且你更容易理解。

编解码器有数百个参数和内部分支。没有说“50”的静态因素。即使您想要以特定质量为目标,所需的比特率也会根据正在压缩的内容而有很大差异。例如,与从移动车辆拍摄的详细动态场景相比,静止且亮度变化很小的物体占用的带宽要少得多。压缩比变化很大。

您可以为目标比特率配置编解码器。然后您的视频流将接近该比特率。就这么简单。

我可以告诉 H.264 从 1920x1080 视频中以恒定比特率 10 Mbps 视频流为目标,它会尽力将其全部塞入其中。

您提到了关键帧间隔...是的,关键帧占用了视频流中的大部分带宽。因此,您希望它们在可能的情况下合理地分开。您在此处的设置更多是关于选择权衡。您是否希望您的流更定期地重新同步(例如在广播中以支持快速频道更改,或在线以减少延迟),或者您是否希望节省带宽以从可靠的地方(例如预- 记录的文件)。您的视频仍然符合所需的比特率,但过于频繁地插入关键帧会减少流的其余部分可用的带宽,从而导致质量下降。如果您不确定,只需让编解码器决定在何处插入关键帧。默认值适用于一般用途,通常比猜测您不熟悉的设置要好。