详解MPEG-4

 H.264是一种视频高压缩技术,全称是MPEG-4 AVC,用中文说是“活动图像专家组-4的高等视频编码”,或称为MPEG-4 Part10。它是由国际电信标准化部门ITU-T和规定MPEG的国际标准化组织ISO/国际电工协会IEC共同制订的一种活动图像编码方式的国际标准格式,这是我们叫惯了的MPEG中的一种,那为什么叫H.264呢?
     原来国际电信标准化部门从1998年就H.26L的H.26S两个分组,前者研制节目时间较长的高压缩编码技术,后者则指短节目标准制订部门。H.26S 的标准化技术的名称为H.263,听起来很耳生,但实质上却早在用了,还被骂得很激烈。因为,H.263先入为大,一直以MPEG-4大内涵的名字在用。 H.263的全称为MPEG-4 Visual或MPEG-4 Pall Ⅱ,即MPEG-4视频简单层面的基础编码方式。2001年后,国际电信标准化部门ITU-T和MPEG的上级组织国际标准化组织ISO/国际电气标准会议IEC成立了联合视频组JVT,在H.26L基础进行H.264的标准化。
    2002年12月9日~13日,在日本香川县淡路岛举行的MPEG聚会上确定了相关技术的规格。规格书定稿后,2003年3月17日,H.364的技术格式最终稿国际标准规格(FDIS)被确立。目前软件和LSI芯片,服务及设备也都进入了使用阶段。格式书中,列出了比特流规定,解码必要格式,和可供参考的编码记载。
       为了不引起误解,ITU-T推荐使用H.264作为这一标准的正式名称。实际上,MPEG-4里还有MPEG-4 Audio和MPEG-4 System的不同规格。

一、H.264的制定过程和应用场合

      在制订完最初的H.263标准之后,ITU-T的视频编码专家组(VCEG)将开发工作分为两部分:一部分称之为“短期(short-term)”计划,目的是给H.263增加一些新的特性(这一计划开发出了H.263+和H.263++);另一部分被称为“长期(long-term)”计划,其最初的目标就是要制定出一个比当时其他的视频编码标准效率提高一倍的新标准。这一计划在1997年开始,其成果就是作为H.264前身的H.26L(起初叫H.263L)。在将近2001年底,由于H.26L优越的性能,ISO/IEC的MPEG专家组加入到VCEG中来,共同成立了联合视频小组(JVT),接管了H.26L的开发工作。这个组织的目标是:“研究新的视频编码算法,其目标是在性能上要比以往制定的最好的标准提高很多。”
       这一标准正式成为国际标准是2003年3月在泰国Pattaya举行的JVT第7次会议上通过的。由于该标准是由两个不同的组织共同制定的,因此有两个不同的名称:在ITU-T中,它的名字叫H.264;而在ISO/IEC中,它被称为MPEG-4的第10部分,即高级视频编码(AVC)。
      H.264的应用场合相当广泛,包括可视电话(固定或移动)、实时视频会议系统、视频监控系统、因特网视频传输以及多媒体信息存储等。
     目前在国际上,加拿大的UB Video公司开发出了一套基于TMS320C64x系列的H.26L实时视频通信系统,它可以在160kbit/s的码率下获得与H.263+在320kbit/s下相同的图像质量。另一家加拿大的公司VideoLocus通过在系统中插入一块基于FPGA的硬件扩展卡,在P4平台上实现了H.264的实时编解码。

二、 H.264的特点

      H.264在编码框架上还是沿用以往的MC-DCT结构,即运动补偿加变换编码的混合(hybrid)结构,因此它保留了一些先前标准的特点,如不受限制的运动矢量(unrestricted motion vectors),对运动矢量的中值预测(median prediction)等。然而,以下介绍的技术使得H.264比之前的视频编码标准在性能上有了很大的提高。应当指出的是,这个提高不是单靠某一项技术实现的,而是由各种不同技术带来的小的性能改进而共同产生的。

1. 帧内预测

       对I帧的编码是通过利用空间相关性而非时间相关性实现的。以前的标准只利用了一个宏块(macroblock)内部的相关性,而忽视了宏块之间的相关性,所以一般编码后的数据量较大。为了能进一步利用空间相关性,H.264引入了帧内预测以提高压缩效率。简单地说,帧内预测编码就是用周围邻近的像素值来预测当前的像素值,然后对预测误差进行编码。这种预测是基于块的,对于亮度分量(1uma),块的大小可以在16×16和4×4之间选择,16×16块有4种预测模式,4×4块有9种预测模式;对于色度分量(chroma),预测是对整个8×8块进行的,有4种预测模式。除了DC预测外,其他每种预测模式对应不同方向上的预测。

2. 帧间预测

    与以往的标准一样,H.264使用运动估计和运动补偿来消除时间冗余,但是它具有以下五个不同的特点:
(1)预测时所用块的大小可变
    由于基于块的运动模型假设块内的所有像素都做了相同的平移,在运动比较剧烈或者运动物体的边缘处这一假设会与实际出入较大,从而导致较大的预测误差,这时减小块的大小可以使假设在小的块中依然成立。另外小的块所造成的块效应相对也小,所以一般来说小的块可以提高预测的效果。
    为此,H.264一共采用了7种方式对一个宏块进行分割,每种方式下块的大小和形状都不相同,这就使编码器可以根据图像的内容选择最好的预测模式。
    与仅使用16×16块进行预测相比,使用不同大小和形状的块可以使码率节省15%以上。
(2)更精细的预测精度
    在H.264中,Luma分量的运动矢量(MV)使用1/4像素精度。Chroma分量的MV由luma MV导出,由于chroma分辨率是luma的一半(对4:2:0),所以其MV精度将为1/8,这也就是说1个单位的chroma MV所代表的位移仅为chroma分量取样点间距离的1/8。如此精细的预测精度较之整数精度可以使码率节省超过20%。
(3)多参考帧
    H.264支持多参考帧预测(multiple reference frames),即可以有多于一个(最多5个)的在当前帧之前解码的帧可以作为参考帧产生对当前帧的预测(motion-compensated prediction)。这适用于视频序列中含有周期性运动的情况。采用这一技术,可以改善运动估计(ME)的性能,提高H.264解码器的错误恢复能力,但同时也增加了缓存的容量以及编解码器的复杂性。不过,H.264的提出是基于半导体技术的飞速发展,因此这两个负担在不久的将来会变得微不足道。较之只使用一个参考帧,使用5个参考帧可以节省码率5~10%。
(4)抗块效应滤波器
    抗块效应滤波器(Deblocking Filter),它的作用是消除经反量化和反变换后重建图像中由于预测误差产生的块效应,即块边缘处的像素值跳变,从而一来改善图像的主观质量,二来减少预测误差。H.264中的Deblocking Filter还能够根据图像内容做出判断,只对由于块效应产生的像素值跳变进行平滑,而对图像中物体边缘处的像素值不连续给予保留,以免造成边缘模糊。与以往的Deblocking Filter不同的是,经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅在输出重建图像时用来改善主观质量,也就是说该滤波器位于解码环中而非解码环的输出外,因而它又称作Loop Filter。需要注意的是,对于帧内预测,使用的是未经过滤波的重建图像。
3.整数变换
    H.264对帧内或帧间预测的残差(residual)进行DCT变换编码。为了克服浮点运算带来的硬件设计复杂,更重要的是舍入误差造成的编码器和解码器之间不匹配(mismatch)的问题,新标准对DCT的定义做了修改,使得变换仅用整数加减法和移位操作即可实现,这样在不考虑量化影响的情况下,解码端的输出可以准确地恢复编码端的输入。当然这样做的代价是压缩性能的略微下降。此外,该变换是针对4×4块进行的,这也有助于减少块效应。
    为了进一步利用图像的空间相关性,在对chroma的预测残差和16×16帧内预测的预测残差进行上述整数DCT变换之后,标准还将每个4×4变换系数块中的DC系数组成2×2或4×4大小的块,进一步做哈达玛(Hadamard)变换。

4.熵编码

    如果是Slice层预测残差,H.264有两种熵编码的方式:基于上下文的自适应变长码(Context-based Adaptive Variable Length Coding,CAVLC)和基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC);如果不是预测残差,H.264采用Exp-Golomb码或CABAC编码,视编码器的设置而定。
(1)CAVLC
    VLC的基本思想就是对出现频率大的符号使用较短的码字,而出现频率小的符号采用较长的码字。这样可以使得平均码长最小。
    在CAVLC中,H.264采用若干VLC码表,不同的码表对应不同的概率模型。编码器能够根据上下文,如周围块的非零系数或系数的绝对值大小,在这些码表中自动地选择,最大可能地与当前数据的概率模型匹配,从而实现了上下文自适应的功能。
(2)CABAC
    算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限熵 ,降低码率。
    为了绕开算术编码中无限精度小数的表示问题以及对信源符号概率进行估计,现代的算术编码多以有限状态机的方式实现,H.264的CABAC便是一个例子,其他的例子还有JPEG2000。在CABAC中,每编码一个二进制符号,编码器就会自动调整对信源概率模型(用一个“状态”来表示)的估计,随后的二进制符号就在这个更新了的概率模型基础上进行编码。这样的编码器不需要信源统计特性的先验知识,而是在编码过程中自适应地估计。显然,与CAVLC编码中预先设定好若干概率模型的方法比较起来,CABAC有更大的灵活性,可以获得更好的编码性能--大约10%码率的降低。
    以上介绍的特点都是用来提高H.264的编码性能的,此外H.264还具有很好的错误恢复能力(error resilience)和网络适应性(network adaptability)。

你可能感兴趣的:(详解MPEG-4)