H.264建议的压缩比是多少?

38
请注意:我知道这是一个非常复杂的问题,有许多细微差别,但我想将其简化为一个数字...

我即将开始一个大型视频编码项目,使用H.264编码。我们试图创建多个比特率配置文件,以适应互联网连接、处理器、设备等的流媒体。

一般来说,我应该期望看到什么样的压缩比率(同时保持合理的质量水平)?

例如,一个每秒24帧、16位颜色、640x360(16:9)像素的视频文件应产生一个约33 MB/s的未压缩文件。

我被告知,对于那个文件,500 Kbits/秒(或62 KB/s)并不是一个不合理的视频比特率。这似乎很疯狂——超过了530:1的压缩比?这是99.8%的压缩。我的数学错了吗?

我只是想要一个粗略的质量外部指南,比如“超过500倍的压缩是疯狂的”或“少于400倍的浪费带宽”。我已经四处搜寻,没有任何东西给我任何预期的压缩……


注:
1.MB/s代表兆字节每秒,Kbits/秒代表千位元每秒
2.比特率(bitrate)是指音视频信号中每秒的数据量,单位为bit/s或kb/s等
3.H.264编码是一种常用的视频压缩标准

4
问一个晦涩的问题的好处?获得“飞絮徽章”。太棒了! - Nuby
2
我希望我的回答足以证明你不应该获得“飘 t 草”徽章 ;) - Stu Thompson
1
一个分辨率为640x360(16:9)像素,帧速率为24帧每秒,颜色深度为16位的视频文件应该产生一个未压缩的文件,大约是33 MB/s。我在想这是如何计算出来的...如果我计算640 * 360 * 2字节(16位颜色)* 24,那么它就是11059200,所以是11 MB,而不是33 MB。但我真的不知道这个计算是否正确...很有可能不正确,因为我对视频不太了解,所以可能会漏掉一些东西...只是什么呢?我问这个问题是因为这将使H.264压缩率略微降低(当然还是很好的)。 - Lumi
你正在比较两种不同的东西:一个48位/像素(16x3颜色)流和一个YUV 420 8位流。H.264(大多数情况下)压缩和解码8位YUV420。H.264编码器可能会在进行压缩之前将RGB444 / YUV444像素拉入YUV420中。你让人们困惑如何计算原始流的比特率和压缩比。所选答案实际上只适用于你的情况。希望你能删除这个问题。 - Wilson Luniz
5个回答

72
在一份名为H.264 Primer的有趣文件中,提供了一个简单的公式作为计算“理想”输出文件比特率的提示,该比特率基于视频的特性:
[image width] x [image height] x [framerate] x [motion rank] x 0.07 = [desired bitrate]
其中,图像宽度和高度以像素为单位表示,运动等级是介于1到4之间的整数,1代表低运动,2代表中等运动,4代表高运动(运动是指帧之间正在发生变化的图像数据量,请参阅链接文档以获取更多信息)。
例如,如果我们拍摄一段1280x720、24 FPS、中等运动(缓慢的相机移动,不多的场景变化...)的视频,则期望的理想比特率将是:
1280 x 720 x 24 x 2 x 0.07 = 3,096,576 bps => 大约3000 kbps
这仅仅是一个提示,在我看来,找到理想比特率的唯一方法是通过试错 :)

1
是的,但仍然很棒。如果它提供了一个非荒谬的起点,可以在10倍或除以10的范围内进行,那么我比以前做得好多了!谢谢。 - david van brink
2
这个答案的关键在于方程中的 0.07。我独立创建了一个计算器来计算这个值,基于对许多不同计算器进行平均后,我的计算器得出的常数是 0.074。这就是你的压缩比。1/0.07 ~= 1/0.074 ~= 13.5x - 14x 压缩。(对于 MPEG-4,这个常数是 0.114,或者是 8.77x 压缩 - dberm22
1
但是像素中的位数呢?假设我有每秒30帧的3840x2160 YUV帧,其中每个像素占用12位。那就是每秒近30亿位。使用这个公式,我得到了38402160301.5(运动参数)0.07 = 2600万位/秒。这是一个115:1的比率。这不现实吗? - nirvanaswap
链接已经损坏。 - austinmarton
@austinmarton 刚试图修复它,但 Adobe 的页面链接到一个损坏的 PDF 链接。我会尝试在 Webarchive 上找到它。 - SirDarius
显示剩余2条评论

25

这取决于源视频的内容,差异可能非常大,稍后我会详细说明。

640x360不算太大,512kbps非常合理且可以说是标准。如果您真的对质量很感兴趣,也许可以使用768kbps。

这怎么可能?简单来说,视频压缩有几种技术和事实,使得这个变成了可能:

  1. 并非每个视频帧数据结构都是一个完整的图像。例如在H.264(或其他编解码器)中,存在两种类型的数据结构:
    1. 关键帧:完整渲染整个视频图像
    2. 内部帧:描述与前一帧的差异,通常占视频帧的绝大多数(80%-99%)。
  2. H.264是"有损压缩",许多其他编解码器也是如此。
    它们不能重现原始源视频的逐像素、逐帧精确副本。例如:有损块:如果一个区域除了一个像素外全部是相同颜色,则编解码器会忽略这个像素。 因此,编解码器只需记录关于帧中每个像素的信息而不是存储像素本身,非常高效。
这比那要复杂得多,有无数不同的方法、技术和算法在特定的CODEC内部和CODEC之间进行调整,以实现这一点。
所以,回到“它将根据源视频的内容而截然不同”的评论:您将看到的压缩比率及其结果质量将取决于:
- 视频的内容 - 您对伪影(块、颜色丢失、定义丢失)的容忍度 - 您设置的CODEC参数以及如何设置它们
例如:一个房间里的门(如安保摄像头)的视频,每十分钟一个关键帧,将具有惊人的高压缩比。我的草稿计算将该方案放置在15,000:1的压缩比率。
由于您正在开始一个大型视频编码项目,我建议您做以下几件事来确定您的压缩比率:
- 取样您要编码的源视频。100个或更多是统计学相关的。 - 使用各种比特率和参数对其进行编码,以确定满足您需求的结果特征。
更改编码器的参数以使视频更小也可能会产生其他影响:
- 更高的播放CPU要求 - 播放器CODEC期望。并非所有H.264编码视频都可以被所有播放器播放。 - 更长的编码时间 - 各种质量的降低。

这是一个相当复杂的话题。祝你好运。我的经验之谈是,512-768kbps 对于你的项目来说已经足够了。


Stu,感谢您详细的回复。我已经等了一段时间来获取这个问题的答案。得到一个简明指南以进一步研究是非常有帮助的。H.264 的效率真是令人惊讶... - Nuby

10
压缩比的经验法则 保持优秀质量的压缩比: - 使用JPEG格式的一般图像为10:1 - 使用H.263和MPEG-2格式的一般视频为30:1 - 使用H.264 / MPEG-4 AVC格式的一般视频为50:1

1
链接已损坏。 - austinmarton

1
请不要忘记普通的MPEG播放只使用YUV 4:2:0。在8位色深度下,每个像素仅值16位(或64位每4个像素)。请注意,只有相机的RAW文件才会使用16位深度,并且它必须价值数百万美元!中高档电影DVR只能提供12-14位!而且没有人会使用H.264来存储RAW。H.264是为最终产品设计的。
在640x360 / 24p YUV4:2:0中,比特率将值得:
  640x360x24x(8+4+4)/8 = 10.5MB/s

对于500Kbps,压缩比仅为172:1。这是正常的。
关于YUV4:2:0的详细说明,请阅读: http://en.wikipedia.org/wiki/Chroma_subsampling

这个答案需要重写,注重可读性和清晰度,以使其更有用。 - Zero3

0

分享一下我在H264环境下编码方面的知识。

如果您使用高5.0或高7.0的H264,450-512 kbits/second的比率是最好的选择。我可以建议您通过调整分辨率大小来获得平衡最佳质量的良好比率。视频分辨率的结果=3/4 * 原始视频的分辨率。

如果您不将帧压缩到稍小的分辨率中,则H264往往会丢失更多细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接