H.264(AVC)编解码技术是数字视频编码领域的一项重要标准,它全称为高效视频编码标准,是由国际电信联盟电信标准化部门(ITU-T)的视频编码专家组(VCEG)和国际标准化组织(ISO)/国际电工委员会(IEC)的活动图像编码专家组(MPEG)联合开发的。H.264与AVC实际上是指同一种编解码格式,该标准为数字视频的存储、传输提供了高效的压缩方法。
视频数据在未压缩状态下,占用的存储空间和传输带宽都是巨大的。例如,假设视频帧率为25帧每秒,分辨率为704x576,颜色空间为1.5字节每像素,一分钟的CIF大小数据量将达到912.384M。因此,为了节省带宽和存储空间,必须对视频数据进行压缩。
H.264编解码技术的核心在于减少数据的相关性(冗余性)。视频数据具有时间冗余、空间冗余和统计冗余三种主要的冗余特征。时间冗余是指相邻帧之间的内容高度相似,空间冗余是同一帧内相邻像素值的相似性,而统计冗余则是指在大量的数据中,某些值出现的频率较高,某些出现的频率较低。
H.264编解码的流程分为三个主要部分:
1. 空间和时间维度的预测,包括帧内预测和帧间预测。
- 帧内预测是根据当前帧中的已编码部分预测未编码的部分,这通常是在8x8像素块的水平或垂直相邻像素间进行的。
- 帧间预测则是利用前一帧的相关性来预测当前帧,即根据先前帧的数据预测当前帧,大大减少时间冗余。
2. 统计冗余的熵编码。熵编码采用的是可变长编码技术,其基本思想是将出现频率高的值用较短的码字进行编码,而将出现频率低的值用较长的码字进行编码。常见的熵编码技术包括哈夫曼编码、算术编码以及CABAC(上下文自适应二进制算术编码)等。
3. 多层概念的引入,包括视频序列、图像组、图像、片、宏块、块等层次结构。
- 视频序列由一系列图像组成,而图像组是一系列图像的集合。
- 图像(帧)由若干片组成,片又是由一系列宏块构成,宏块进一步由更小的块组成。
H.264的编码框架包括运动补偿、滤波、变换、量化、熵编码等模块,而解码过程则包括了这些模块的逆过程。值得注意的是,编码过程中的很多模块,如量化,是有损的过程,而熵编码过程是无损的。此外,编码过程实际上包含了大部分的解码模块,因为解码过程很大程度上是编码过程的逆操作。
H.264编码过程使用了一系列复杂的算法和技术,包括:
- 整数变换,用于从时域变换到频域,去除数据的空间冗余。
- 运动估计,用于在帧间预测中寻找运动补偿的最佳匹配块。
- 运动补偿,用于根据运动矢量进行帧间预测。
- 环路滤波器,用于消除由于帧内/帧间预测和变换量化引入的图像失真,如块效应。
- 熵编码,用于压缩统计冗余。
H.264编码技术由于其高效的压缩率和高质量的视频输出,在数字电视广播、DVD存储、互联网视频流以及许多其他视频应用中被广泛采用。此外,它支持不同分辨率和帧率的视频,包括标清和高清,使其成为市场上最具适应性和高效性的编解码标准之一。