H.264,又称为MPEG-4 Part 10,Advanced Video Coding(MPEG-4第10部分,高级视频编码)简称MPEG-4 AVC。
H.264是迄今为止视频录制、压缩和分发的最常用格式。H.264提供了明显优于以前任何标准的压缩性能。H.264因其是蓝光盘的其中一种编解码标准而著名,所有蓝光盘播放器都必须能解码H.264。
1.帧类型
1.GOP
有统计结果表明:在连续的几帧图像中,一般只有10%以内的像素有差别,亮度的差值变化不超过2%,而色度的差值变化只在1%以内。于是可以将一串连续的相似的帧归到一个图像群组(Group Of Pictures,GOP)。
在视频编码中,GOP(Group of Pictures)是指一组连续的图像帧,它们按照一定的顺序和规则进行编码。GOP结构对于视频压缩效率、错误恢复能力和随机访问能力有着重要影响。

在H.264中,视频序列被分割成一系列的帧,每个帧根据其角色和编码方式的不同被分类为以下几种类型之一:
- I帧 (Intra-coded frame):译为帧内编码图像,也称为关键帧,完全基于帧内的信息进行编码,不依赖于其他帧。I帧通常用于初始化解码过程或者作为随机访问点。是视频的第一帧,也是GOP的第一帧,一个GOP只有一个I帧,对整帧图像数据进行编码且仅用当前I帧的编码数据就可以解码出完整的图像,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,可以简单理解为一张静态图像。
- P帧 (Predictive-coded frame):译为预测编码图像,基于前一个I帧或P帧进行预测编码(只能向前参考且只能参考I帧和P帧,不能参考B帧)。P帧通过参考之前的I帧或P帧来减少冗余信息。并不会对整帧图像数据进行编码,以前面的I帧或P帧作为参考帧,只编码当前P帧与参考帧的差异数据,需要先解码出前面的参考帧,再结合差异数据解码出当前P帧完整的图像。
- B帧 (Bi-predictive-coded frame):译为双向预测编码帧,可以参考前后两个方向的参考帧(可以参考前面的I帧或P帧以及后面的P帧或I帧,H264不能参考B帧,H265可以参考B帧)。B帧提供了更高的压缩效率,但会增加编码复杂度。并不会对整帧图像数据进行编码,同时以前面、后面的I帧或P帧作为参考帧,只编码当前B帧与前后参考帧的差异数据,为可参考的帧变多了,所以只需要存储更少的差异数据,需要先解码出前后的参考帧,再结合差异数据解码出当前B帧完整的图像。
B帧可以使用前向预测、后向预测或者两者的组合来进行预测。H.264标准也允许B帧仅使用单方向的预测,即只从前一个I帧或P帧进行预测(前向预测),或者只从后一个I帧或P帧进行预测(后向预测)。
- 前向预测:B帧只参考它之前的I帧或P帧。
- 后向预测:B帧只参考它之后的I帧或P帧。
- 双向预测:B帧同时参考它之前和之后的I帧或P帧。

2.GOP的长度
GOP的长度表示GOP的帧数。GOP的长度需要控制在合理范围,以平衡视频质量、视频大小(网络带宽)和seek效果(拖动、快进的响应速度)等。
- 加大GOP长度有利于减小视频文件大小,但也不宜设置过大,太大则会导致GOP后部帧的画面失真,影响视频质量
- 由于P、B帧的复杂度大于I帧,GOP值过大,过多的P、B帧会影响编码效率,使编码效率降低
- 如果设置过小的GOP值,视频文件会比较大,则需要提高视频的输出码率,以确保画面质量不会降低,故会增加网络带宽
- GOP长度也是影响视频seek响应速度的关键因素,seek时播放器需要定位到离指定位置最近的前一个I帧,如果GOP太大意味着距离指定位置可能越远(需要解码的参考帧就越多)、seek响应的时间(缓冲时间)也越长
3.GOP的类型
GOP又可以分为开放GOP(Open GOP)、封闭GOP(Closed GOP)两种。
封闭GOP (Closed GOP)
- 定义:封闭GOP内的所有P帧和B帧仅参考该GOP内的I帧或P帧。这意味着在一个封闭的GOP内,任何帧都不会引用到其他GOP中的帧。
- 优点:
- 错误恢复:如果传输过程中发生丢包或其他错误,由于每个GOP都是独立的,解码器可以从下一个I帧开始重新同步,从而限制了错误传播的范围。
- 随机访问:便于快速定位和播放特定的时间点,因为每个GOP都是一个独立的单元,用户可以直接跳转到任意一个I帧开始播放。
- 缺点:
- 压缩效率:相对于开放GOP,封闭GOP可能在某些情况下压缩效率稍低,因为它不能利用跨GOP的预测来进一步减少冗余。
开放GOP (Open GOP)
- 定义:开放GOP允许P帧和B帧不仅参考本GOP内的I帧或P帧,还可以参考前一个GOP的帧。这种设置增加了编码器的选择性,可以在更广泛的范围内寻找最佳的预测源。
- 优点:
- 更高的压缩效率:通过扩展预测范围,开放GOP能够更好地利用时间上的相关性,从而实现更高的压缩比。
- 更好的质量:在相同的比特率下,开放GOP通常能提供更好的视频质量,因为它可以选择更加匹配的参考帧。
- 缺点:
- 错误敏感:一旦某个GOP中的帧丢失或损坏,它可能会影响后续多个GOP的解码,导致较长的错误传播。
- 随机访问性能较差:由于帧间的依赖关系跨越了多个GOP,直接跳转到某个中间位置时,解码器需要从最近的一个I帧开始解码,这可能导致延迟和额外的计算开销。
4.IDR帧
IDR帧(Instantaneous Decoder Refresh Frame),即即时解码刷新帧,是视频编码标准中的一种特殊类型的I帧。IDR帧的主要作用是提供一个干净的解码起点,使得解码器可以从这个帧开始解码,而不需要任何先前的解码信息。下面是关于IDR帧的一些关键点:
-
独立解码:IDR帧是一个自包含的图像,不依赖于之前的任何帧进行解码。这意味着它包含了重建整个图像所需的所有信息。
-
刷新点:IDR帧之后的所有P帧和B帧只能参考IDR帧及其之后的帧。这形成了一个新的解码序列,之前的帧对这些帧没有影响。
-
随机访问:由于IDR帧提供了完全独立的解码起点,它允许用户在视频流中的任意位置开始播放,这对于频道切换、快速前进或后退等操作非常有用。
-
错误恢复:IDR帧可以用来作为错误恢复点。如果视频流中发生了数据丢失或损坏,解码器可以在下一个IDR帧处重新同步,从而避免了长期的错误传播。
-
封闭GOP:IDR帧通常会创建一个封闭的GOP(Group of Pictures),在这个GOP内,所有的帧都只参考IDR帧及其后的帧。
在视频编码中,I帧(Intra-coded frame)是完全自包含的帧,它不参考任何其他帧进行编码。无论是H.264/AVC还是H.265/HEVC,I帧都是基于图像内部的数据进行压缩的,这意味着它们只使用当前帧内的信息来重建图像,而不依赖于前面或后面的任何帧。
IDR帧与普通I帧的区别:
- IDR帧:是一种特殊的I帧,它不仅自身是自包含的,而且强制所有后续的P帧和B帧只能参考该IDR帧及其之后的帧。这形成了一个新的解码序列起点,并且清除了之前的所有参考帧缓冲区。
- 普通I帧:虽然也是自包含的,但并不强制后续的P帧和B帧只能参考该I帧及其后的帧。因此,在开放GOP结构中,P帧和B帧仍然可以跨过多个GOP引用前面的帧。
2.帧内/帧间编码
帧内编码(Intra-frame coding)和帧间编码(Inter-frame coding)是视频压缩中两种基本的编码技术,它们分别利用了图像内部的信息冗余和相邻帧之间的时域冗余来减少数据量。
1.帧内编码
定义:帧内编码是指仅使用当前帧内的信息来进行压缩的技术。这种编码方式不依赖于其他帧的数据,因此每个帧都是独立解码的。
特点:
- 自包含:每个I帧都是自包含的,不需要参考其他帧。
- 高比特率:由于需要存储完整的图像信息,I帧通常比P帧或B帧占用更多的比特率。
- 随机访问:提供了一个自然的随机访问点,用户可以从任何一个I帧开始播放视频。
- 错误恢复:如果在传输过程中丢失了某些帧,解码器可以从下一个I帧开始重新同步,避免错误传播。
应用:
- 用于关键帧,如视频的开头、场景切换处或需要快速恢复的地方。
- 在实时通信中,定期插入I帧以确保低延迟和良好的错误恢复能力。
编码方法:
- 空间预测:利用图像块内部或相邻块之间的相似性进行预测,例如H.264/AVC中的9种模式的帧内预测。
- 变换编码:将像素值转换到频率域,例如DCT(离散余弦变换)或DST(离散正弦变换),然后对变换后的系数进行量化和熵编码。
2.帧间编码
定义:帧间编码是指利用前后帧之间的相关性来减少冗余信息的技术。通过运动估计和补偿,可以只编码当前帧与参考帧之间的差异。
特点:
- 低比特率:由于只编码差异信息,帧间编码通常比帧内编码占用更少的比特率。
- 依赖关系:P帧和B帧依赖于之前的I帧或P帧,这可能导致错误传播。
- 压缩效率:能够有效地压缩连续帧之间的冗余信息,提高整体的压缩效率。
应用:
- 用于非关键帧,特别是在视频流中大部分内容变化不大时。
- 在长序列中,帧间编码能够显著减少数据量,节省带宽和存储空间。
编码方法:
- 运动估计:找到当前帧中的宏块(或编码单元)与参考帧中最匹配的区域,并计算出运动矢量。
- 运动补偿:根据运动矢量,从参考帧中预测当前帧的内容。
- 残差编码:编码预测误差(即残差),并通过变换、量化和熵编码进一步压缩。
3.变换与量化
变换 (Transform):
- 预测后的残差数据(即实际像素值与预测值之间的差异)通过离散余弦变换(DCT)转换到频率域。H.264使用了4x4和8x8大小的DCT。
- 转换到频率域有助于将能量集中到低频系数上,从而便于后续的量化处理。
量化 (Quantization):
- 将变换后的系数除以一个量化步长,这个过程是不可逆的,会导致一些信息损失,但也是实现压缩的关键步骤。
- 量化步长决定了压缩的程度和最终视频的质量。较大的量化步长意味着更多的信息丢失和更低的质量,但也带来了更小的文件尺寸。
4.规格
H.264定义了多种配置文件,每个配置文件针对特定的应用场景和要求:
- Baseline Profile:主要用于实时通信,如视频会议,支持I/P帧,不支持B帧。
- Main Profile:支持I/P/B帧,适用于主流消费电子设备,如蓝光光盘。
- High Profile:支持更多的高级特性,如8x8内部预测、自适应量化等,适用于高清电视广播和专业应用。
- Constrained Baseline Profile:类似于Baseline Profile,但有一些额外的限制,主要用于某些特定的移动应用。
5.H265
H.265,也被称为高效视频编码(High Efficiency Video Coding, HEVC),是继H.264/AVC之后的新一代视频压缩标准。HEVC的设计目标是在保持相同视觉质量的前提下,提供比H.264更高的压缩效率,大约可减少50%的数据量。这使得H.265非常适合用于高清(HD)及超高清(UHD)内容的传输和存储。
压缩效率
- H.265:设计目标是提供比H.264高约50%的压缩效率。这意味着在相同的视频质量下,H.265所需的比特率大约是H.264的一半。
- H.264:虽然也提供了高效的视频编码,但在处理超高清内容时,其效率不如H.265。
编码单元大小
- H.265:引入了更大、更灵活的编码树单元(CTU),最大尺寸可达64x64像素,支持四叉树结构进行细分,以适应图像的不同细节级别。
- H.264:使用的是固定大小的宏块,最大为16x16像素,这限制了对不同复杂度区域的自适应编码能力。
预测技术
- H.265:增加了更多的预测方向和模式选择,包括33种帧内预测模式(相对于H.264的9种)。此外,还加入了新的运动补偿工具,如合并模式(Merge Mode)和高级运动矢量预测(AMVP)。
- H.264:提供了9种帧内预测模式,以及较为基础的帧间预测机制。
并行处理
- H.265:通过Tile划分和Wavefront并行处理(WPP)技术来提高解码过程中的并行性,有助于加速硬件实现。
- H.264:并行处理的支持相对有限,尤其是在单个片(Slice)内部。
环路滤波
- H.265:引入了自适应环路滤波器(ALF),能够根据局部特性调整滤波参数,进一步减少块效应和振铃现象。
- H.264:采用去方块滤波(Deblocking Filter),但没有像H.265那样复杂的自适应机制。
色度采样格式
- H.265:除了传统的4:2:0色度采样外,还支持4:2:2和4:4:4采样格式,更适合于专业应用和高质量视频制作。
- H.264:主要针对4:2:0采样格式进行了优化。
参考帧管理
- H.265:允许更灵活的参考帧配置,例如B帧可以引用其他B帧作为参考,增强了预测能力。
- H.264:对于B帧的参考范围和方式有更多限制。
错误恢复
- H.265:通过改进的分层编码结构和错误恢复机制,提高了对传输错误的容忍度。
- H.264:也有错误恢复机制,但在H.265中得到了加强。
应用场景
- H.265:特别适合于超高清(4K, 8K)视频流媒体服务、移动设备上的高效视频播放等。
- H.264:仍然是许多现有系统和服务的基础,特别是在网络带宽受限或计算资源有限的情况下。
总的来说,H.265通过引入一系列新技术和算法改进,在多个方面超越了H.264,尤其适用于要求更高分辨率和更低比特率的应用场合。然而,这些改进通常伴随着更高的计算复杂性和可能需要更新的硬件支持。
