编码与解码
H.264是由ITU-T(ITU Telecommunication Standardization Sector,国际电信联盟远程通信标准化组)视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。H.264是ITU-T以H.26x系列为名称命名的标准之一,同时AVC是ISO/IEC MPEG一方的称呼。这一标准正式成为国际标准是2003年3月在泰国Pattaya举行的JVT第7次会议上通过的。由于该标准是由两个不同的组织共同制定的,因此有两个不同的名称:在ITU-T中,它的名字叫H.264;而在ISO/IEC中,它被称为MPEG-4的第10部分,即高级视频编码(AVC)。
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),下面介绍其中的一些特点。
5. SP Slice
SP Slice的主要目的是用于不同码流的切换(switch),此外也可用于码流的随机访问、快进快退和错误恢复。这里所说的不同码流是指在不同比特率限制下对同一信源进行编码所产生的码流。设切换前传输码流中的最后一帧为Al,切换后的目标码流第一帧为B2(假设是P帧),由于B2的参考帧不存在,所以直接切换显然会导致很大的失真,而且这种失真会向后传递。一种简单的解决方法就是传输帧内编码的B2,但是一般I帧的数据量很大,这种方法会造成传输码率的陡然增加。根据前面的假设,由于是对同一信源进行编码,尽管比特率不同,但切换前后的两帧必然有很多相关性,所以编码器可以将Al作为B2的参考帧,对 B2进行帧间预测,预测误差就是SP Slice,然后通过传递SP Slice完成码流的切换。与常规P帧不同的是,生成SP Slice所进行的预测是在Al和B2的变换域中进行的。SP Slice要求切换后B2的图像应和直接传送目标码流时一样。显然,如果切换的目标是毫不相关的另一码流,SP Slice就不适用了。
6.灵活的宏块排序
灵活的宏块排序(flexible macroblock ordering,FMO),是指将一幅图像中的宏块分成几个组,分别独立编码,某一个组中的宏块不一定是在常规的扫描顺序下前后连续,而可能是随机地分散在图像中的各个不同位置。这样在传输时如果发生错误,某个组中的某些宏块不能正确解码时,解码器仍然可以根据图像的空间相关性依靠其周围正确译码的像素对其进行恢复。
H.264编码技术
H.264的目标应用涵盖了目前大部分的视频服务,如有线电视远程监控、交互媒体、数字电视、视频会议、视频点播、流媒体服务等。H.264为解决不同应用中的网络传输的差异。定义了两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送(如图所示: 标准的整体框架)。
基本层次(Baseline Profile):该层次使用了H.264的除了B-Slices,CABAC以及交织编码模式外所有的特性。该层次主要使用于低时延的实时应用场合。
主要层次(Main Profile):包含Baseline profile的所有特性,并包括了B-slices,CABAC以及交织编码模式。它主要针对对时延要求不高,当压缩率和质量要求较高的场合。
扩展层次(Profile X):支持所有Baseline profile的特性,但不支持CABAC以及基于宏块的自适应帧场编码。该层次主要针对的时各种网络视频流传输方面的应用。
H.264产品
H.264 高清编码器
MPEG-4 AVC/H.264 高清编码器是一款专业的高清音视频编码产品。该产品支持几乎所有模拟 及数字音视频输入接口,包括 CVBS、YPbPr、SD/HD-SDI、HDMI 视频输入接口、平衡/非平衡模 拟音频及 AES/EBU、HDMI、SD/HD-SDI 嵌入音频输入接口。该设备可对标清及高清的音视频进行编码,支持 MPEG-4 AVC/H.264 编码格式,具有极高的 编码压缩效率及极佳的视频质量,可广泛应用于各种数字电视播出系统中。
主要特性
1、支持 H.264/AVC High Profile Level 4.0 及 H.264/AVC High Profile Level 3.0 编码,先 进的视频预处理算法
2、音频编码支持 MPEG1 Audio Layer 2
3、支持 CVBS、S-Video、YPbPr 模拟视频输入 • 支持 HDMI,HD/SD-SDI 数字视频输入
4、支持平衡及非平衡模拟音频输入
5、支持 AES/EBU、HDMI、HD/SD-SDI 数字音频输入 • 支持 PAL、NTSC 标清视频格式
6、支持高清 720P、1080I 视频格式
7、支持 IP 输出 TS,UDP 协议,单播及多播 • 支持液晶&按键操作
全部0条评论
快来发表一下你的评论吧 !