H.264数字视频编码标准

来源:百度文库 编辑:神马文学网 时间:2024/04/18 14:22:37
H.264是ITU-T视频编码专家组(VCEG)和ISO/IEC活动图像编码专家组(MPEG)的联合视频组(JVT)开发的一个新的数字视频编码标准,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10部分。2002年6月JVT第5次会议通过了H.264的FCD板。H.264的压缩率比MPEG-2高2~3倍,1Mb/s速率的图像效果接近MPEG-2中DVD的图像质量,是目前手机电视中最为理想的信源压缩编码标准。
AVC/H.264定义了4种不同的Profile(类):Baseline(基线类), Main(主要类), Extended(扩展类)和High Profile(高端类)(它们各自下分成许多个层):
- Baseline Profile 提供I/P帧,仅支持progressive(逐行扫描)和CAVLC
- Extended Profile 提供I/P/B/SP/SI帧,仅支持progressive(逐行扫描)和CAVLC
- Main Profile 提供I/P/B帧,支持progressive(逐行扫描)和interlaced(隔行扫描),提供CAVLC或CABAC
- High Profile (也就是FRExt)在Main Profile基础上新增:8x8 intra prediction(8x8 帧内预测), custom quant(自定义量化), lossless video coding(无损视频编码), 更多的yuv格式(4:4:4...)
H.264是DPCM加变换编码的混合编码模式。它不用众多的选项,获得比H.263++好得多的压缩性能;增强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用范围较宽,以满足不同速率、不同解析度及不同传输(存储)场合的需求;它的基本系统是开放的。
在技术上,H.264标准中有多个亮点,如:统一的VLC符号编码;高精度、多模式的位移估计;基于4×4块的整数变换;分层的编码语法等。这些使得H.264算法具有很高的编码效率,在相同的重建图像质量下,能够比H.263降低50%左右的码率。H.264的码流结构网络适应性强,增强了差错恢复能力,能够很好地适应IP和无线网络应用。
H.264的特点
H.264在编码框架上还是沿用以往的MC-DCT结构,即运动补偿加变换编码的混合结构,因而保留了先前标准的一些特点,如不受限制的运动矢量、对运动矢量的中值预测等。然而,由于它采用了以下技术,因而在性能上有了很大的提高。
帧内预测
对I帧的编码是利用空间相关性而非时间相关性而实现的。以前的标准只利用了一个宏块内部的相关性,而忽视了宏块之间的相关性,所以编码后的数据量较大。为了进一步利用空间相关性,H.264引入了帧内预测以提高压缩效率。简单地说,帧内预测编码就是用周围邻近的象素值来预测当前的象素值,然后对预测误差进行编码。这种预测是基于块的,对于亮度分量,块的大小可以在16×16和4×4之间选择,16×16块有4种预测模式,4×4块有9种预测模式;对于色度分量,预测是对整个8×8块进行的,有4种预测模式。除了DC预测外,其他每种预测模式对应不同方向上的预测。
H.264是ITU-T视频编码专家组(VCEG)和ISO/IEC活动图像编码专家组(MPEG)的联合视频组(JVT)开发的一个新的数字视频编码标准,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10部分。2002年6月JVT第5次会议通过了H.264的FCD板。H.264的压缩率比MPEG-2高2~3倍,1Mb/s速率的图像效果接近MPEG-2中DVD的图像质量,是目前手机电视中最为理想的信源压缩编码标准。
H.264是DPCM加变换编码的混合编码模式。它不用众多的选项,获得比H.263++好得多的压缩性能;增强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用范围较宽,以满足不同速率、不同解析度及不同传输(存储)场合的需求;它的基本系统是开放的。
在技术上,H.264标准中有多个亮点,如:统一的VLC符号编码;高精度、多模式的位移估计;基于4×4块的整数变换;分层的编码语法等。这些使得H.264算法具有很高的编码效率,在相同的重建图像质量下,能够比H.263降低50%左右的码率。H.264的码流结构网络适应性强,增强了差错恢复能力,能够很好地适应IP和无线网络应用。
H.264的特点
H.264在编码框架上还是沿用以往的MC-DCT结构,即运动补偿加变换编码的混合结构,因而保留了先前标准的一些特点,如不受限制的运动矢量、对运动矢量的中值预测等。然而,由于它采用了以下技术,因而在性能上有了很大的提高。
帧内预测
对I帧的编码是利用空间相关性而非时间相关性而实现的。以前的标准只利用了一个宏块内部的相关性,而忽视了宏块之间的相关性,所以编码后的数据量较大。为了进一步利用空间相关性,H.264引入了帧内预测以提高压缩效率。简单地说,帧内预测编码就是用周围邻近的象素值来预测当前的象素值,然后对预测误差进行编码。这种预测是基于块的,对于亮度分量,块的大小可以在16×16和4×4之间选择,16×16块有4种预测模式,4×4块有9种预测模式;对于色度分量,预测是对整个8×8块进行的,有4种预测模式。除了DC预测外,其他每种预测模式对应不同方向上的预测。
帧间预测
与以往的标准一样,H.264使用运动估计和运动补偿来消除时间冗余,但是,它又具有不同的特点。
(1)预测时所用块的大小可变
由于基于块的运动模型假设块内的所有象素都做了相同的平移,在运动比较剧烈时或者在运动物体的边缘处,这一假设会与实际出入较大,从而导致较大的预测误差,这时减小块的大小可以使假设在小的块中依然成立。另外,小的块所造成的块效应相对也小,一般来说小的块可以提高预测的效果。
为此,H.264一共采用了7种方式对一个宏块进行分割,每种方式下块的大小和形状都不相同,这就使编码器可以根据图像的内容选择最好的预测模式。
与仅使用16×16块进行预测相比,使用不同大小和形状的块可以使码率降低15%以上。
(2)更精细的预测精度
在H.264中,亮度分量的运动矢量使用1/4象素精度。色度分量的运动矢量由亮度运动矢量导出,由于色度分量的分辨率是亮度分量的一半(对4∶2∶0),所以其运动矢量精度将为1/8。也就是说,一个单位的色度分量的运动矢量所代表的位移仅为色度分量取样点间距离的1/8。
如此精细的预测精度,较之整数精度可以使码率降低20%以上。
(3)多参考帧
H.264支持多参考帧预测,即可以有多于一个(最多5个)在当前帧之前解码的帧作为参考帧,产生对当前帧的预测。这适用于视频序列中含有周期性运动的情况。采用这一技术,可以改善运动估计的性能,提高H.264解码器的错误恢复能力;但是,也增加了缓存的容量,加大了编解码器的复杂性。不过,正如前面提到的,H.264的提出是基于半导体技术的飞速发展,因此这两个负担在不久的将来会变得微不足道。较之只使用一个参考帧,使用5个参考帧可以使码率降低5~10%。
帧间预测
与以往的标准一样,H.264使用运动估计和运动补偿来消除时间冗余,但是,它又具有不同的特点。
(1)预测时所用块的大小可变
由于基于块的运动模型假设块内的所有象素都做了相同的平移,在运动比较剧烈时或者在运动物体的边缘处,这一假设会与实际出入较大,从而导致较大的预测误差,这时减小块的大小可以使假设在小的块中依然成立。另外,小的块所造成的块效应相对也小,一般来说小的块可以提高预测的效果。
为此,H.264一共采用了7种方式对一个宏块进行分割,每种方式下块的大小和形状都不相同,这就使编码器可以根据图像的内容选择最好的预测模式。
与仅使用16×16块进行预测相比,使用不同大小和形状的块可以使码率降低15%以上。
(2)更精细的预测精度
在H.264中,亮度分量的运动矢量使用1/4象素精度。色度分量的运动矢量由亮度运动矢量导出,由于色度分量的分辨率是亮度分量的一半(对4∶2∶0),所以其运动矢量精度将为1/8。也就是说,一个单位的色度分量的运动矢量所代表的位移仅为色度分量取样点间距离的1/8。
如此精细的预测精度,较之整数精度可以使码率降低20%以上。
(3)多参考帧
H.264支持多参考帧预测,即可以有多于一个(最多5个)在当前帧之前解码的帧作为参考帧,产生对当前帧的预测。这适用于视频序列中含有周期性运动的情况。采用这一技术,可以改善运动估计的性能,提高H.264解码器的错误恢复能力;但是,也增加了缓存的容量,加大了编解码器的复杂性。不过,正如前面提到的,H.264的提出是基于半导体技术的飞速发展,因此这两个负担在不久的将来会变得微不足道。较之只使用一个参考帧,使用5个参考帧可以使码率降低5~10%。
(4)去块效应滤波器
它的作用是消除经反量化和反变换后重建图像中由于预测误差产生的块效应,即块边缘处的象素值跳变,从而改善图像的主观质量,并减小预测误差。H.264中的去块效应滤波器还能够根据图像内容做出判断,只对由于块效应产生的象素值跳变进行平滑,而对图像中物体边缘处的象素值不连续给予保留,以免造成边缘模糊。与以往的去块效应滤波器同的是,经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅在输出重建图像时用来改善主观质量。也就是说,该滤波器位于解码环中而非解码环的输出外,因而又称作环滤波器。须要注意:对于帧内预测,使用的是未经过滤波的重建图像。
整数变换
H.264对帧内或帧间预测的残差进行DCT编码。为了降低浮点运算带来的硬件设计复杂性,更重要的是,避免舍入误差造成的编码器和解码器之间不匹配的问题,新标准对DCT的定义做了修改,使得变换仅用整数加减法和移位操作即可实现,这样在不考虑量化影响的情况下,解码端的输出可以准确地恢复编码端的输入。当然,这样做的代价是压缩性能略微下降。此外,该变换是针对4×4块进行的,这也有助于减小块效应。
为了进一步利用图像的空间相关性,在对色度分量的预测残差和16×16帧内预测的预测残差进行上述整数DCT之后,标准还将每个4×4变换系数块中的DC系数组成2×2或4×4大小的块,进一步做哈达玛(Hadamard)变换。
熵编码
对于Slice层以上的数据,H.264采用Exp-Golomb码,这是一种没有自适应能力的VLC。而对于Slice层(含)以下的数据,如果是残差,H.264有两种熵编码方式:基于上下文的自适应变长码(CAVLC)和基于上下文的自适应二进制算术编码(CABAC);如果不是残差,H.264采用Exp-Golomb码或CABAC编码,视编码器的设置而定。
(1)CAVLC
VLC的基本思想就是对出现频率高的符号使用较短的码字,而对出现频率低的符号采用较长的码字。这样可以使得平均码长最小。
在CAVLC中,H.264采用若干VLC码表,不同的码表对应不同的概率模型。编码器能够根据上下文,如周围块的非零系数或系数的绝对值大小,在这些码表中自动地选择,尽可能地与当前数据的概率模型匹配,从而实现上下文自适应的功能。
(2)CABAC
算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,从而能够更大程度地逼近信源的极限熵,降低码率。
为了绕开算术编码中无限精度小数的表示问题及对信源符号概率进行估计,现代的算术编码多以有限状态机的方式实现,H.264的CABAC便是一个例子。在CABAC中,每编码一个二进制符号,编码器就会自动调整对信源概率模型(用一个“状态”来表示)的估计,随后的二进制符号就在这个新的概率模型基础上进行编码。这样的编码器不需要信源统计特性的先验知识,而是在编码过程中自适应地估计。显然,与CAVLC编码中预先设定好若干概率模型的方法相比,CABAC有更大的灵活性,可以获得更好的编码性能—码率降低大约10%。
SP Slice
SP Slice的主要目的是用于不同码流的切换,也可用于码流的随机访问、快进/快退和错误恢复。这里所说的不同码流,是指在不同比特率限制下对同一信源进行编码所产生的码流。设切换前传输码流中最后一帧为Al,切换后的目标码流第一帧为B2(假设是P帧),由于B2的参考帧不存在,直接切换显然会导致严重失真,而且这种失真会向后传递。一种简单的解决方法就是传输帧内编码的B2,但是一般I帧的数据量很大,这种方法会造成传输码率陡然增大。根据前面的假设,由于是对同一信源进行编码,尽管比特率不同,但切换前后的两帧必然有相当大的相关性,所以编码器可以将Al作为B2的参考帧,对B2进行帧间预测,预测误差就是SP Slice,然后通过传递SP Slice完成码流的切换。与常规P帧不同的是,生成SP Slice所进行的预测是在Al和B2的变换域中进行的。SP Slice要求切换后B2的图像应和直接传送目标码流时一样。显然,如果切换的目标是毫不相关的另一码流,SP Slice就不适用了。
灵活的宏块排序
灵活的宏块排序(FMO),是指将一幅图像中的宏块分成几个组,分别独立编码,某一个组中的宏块不一定是在常规扫描顺序下前后连续,而可能是随机地分散在图像中各个不同的位置。这样,在传输时,如果发生错误,某个组中的某些宏块不能正确解码时,解码器仍然可以根据图像的空间相关性,依靠其周围正确译码的象素,对其进行恢复。
H.264的应用场合相当广泛,包括可视电话(固定或移动)、实时视频会议系统、视频监控系统及因特网视频传输、多媒体信息存储等。