另外,同MPEG-4和H.263的后置滤波不同,环路滤波是作为编码器的一部分直接对编码器端的参考图像进行的,是H.264标准的一部分,与仅仅作为后处理的解码器端的去方块滤波相比,环路滤波在改善主观质量的同时还可以有效地提高编码器的编码效率。
2.9 熵编码技术
H.264提供了两种变长编码方式供选择:基于上下文的变长编码技术(CAVLC)和基于上下文的二进制自适应算术编码技术(CABAC)。
在以前的标准中,控制信息、运动信息和量化后的变换系数多采用霍夫曼编码,使用静态的概率估计码表,这样就忽略了不同视频流在统计特性上的区别,也忽略了待编码符号之间的相关性,而CAVLC通过上下文信息(如相邻块的非零系数个数)来动态的选择相应的码表,进一步挖掘了4×4块DCT变换后的残差系数的统计特性来提高压缩效率。
CABAC通过建立上下文模型并自适应地更新待编码符号的统计特性解决了这两个问题。另外,采用CABAC,每个符号可以用精确到小数的比特数来表示,能够更有效地逼近符号的熵。采用CABAC算法进行编码,可以提高大约10%的编码率。
3 设计方案和JM代码分析
3.1 H.264开源编解码器分析与比较
目前视频压缩编码器设计研究人员可以参考的H.264开源代码库主要包括JM、t264以及x264,这三个开源代码库也是目前最完整的,参与研究的人数最多,并不断进行更新的H.264自由软件库。由于软件定位不同,三个开源库对H.264的支持程度以及压缩性能也各具特点。
联合编码模型JM是2002年2月起联合编码组JVT伴随H.264标准推出的标准C语言实现的官方参考软件。JM参考软件严格地按照H.264标准定义的码流语法结构规范,支持H.264标准中提出的各个级别的所有选项,并在编码器中引入JVT关于模式选择,运动估计以及码率控制方面的研究结果,对JVT编码器不断进行算法级别的优化和改进,使得该编码器能够得到相同PSNR下最高压缩率的H.264码流。作为官方标准的编解码参考模型,JM给世界各地视频编码算法研究者提供了一个交流的平台,研究者们将相关改进的算法在JM平台上实现,并以此为基础进行相关测试以及比较,来衡量该算法的改进效果。但同时由于JVT没有从代码级别对JM进行优化,故造成该参考软件的代码结构过于冗余,执行效率低,难以在其基础上进行优化以实现较高分辨率的实时视频编码器。
t264为中国视频编码自由组织联合开发的H.264编解码器,开发起始时间为2004年10月,国内的很多高等院校以及科研机构也参与其开发过程。t264的开发出发点与x264相似,注重于编解码器的编码效率和实时性,在开发过程中吸收了JM, x264以及XVID等开源代码库的优点。相对于JM来说,t264引入了JM中计算复杂度低实时性强的相关算法,并且代码结构清晰,冗余度低,是目前研究者们用于实时编码研究的主要参考软件之一。但是t264是三个开源软件中支持H.264标准选项数目最少的,而且压缩性能略次于JM;同时尽管t264编码器编码输出标准的H.264压缩码流,但t264编码器生成的码流只能由t264解码器解码,兼容性不佳。
x264是迄今为止最先进也是最实用的H.264开源代码自由软件库,由FFMPEG自由组织联合开发和文护。x264从2003年诞生至今已经推出了数百个改进版本,并且仍在不断更新与完善中。在视频压缩研究领域具有良好口碑的x264是目前三种开源编码器中综合性能最好的,该编码器支持H.264标准中的基本档次、主要档次以及扩展档次的绝大多数选项;同时将一些其认为对提高压缩质量贡献有限但是计算量又很大的选项舍弃(如多参考帧技术以及B帧的宏块子划分技术等)。在代码级别优化方面,x264使用大量函数指针以及查表技术,使其代码实现十分灵活,执行效率很高,x264支持汇编加速,对一些计算量大同时调用频繁的函数进行汇编优化加速,使汇编加速后的编码效率能够达到标准C编码器的2. 5-3倍,实现实时编码。经过进一步优化后的x264由于其卓越的性能己被广泛应用于各种实时视频压缩场合。但是与JM相比,x264也只是支持部分标准选项,且在对高清档次(High Profile)的支持方面仍有大量工作需要完成;同时与t264相比,x264为了兼顾总体性能而在编码速度方面略次于t264。 H.264视频转码的设计与实现+文献综述(7):http://www.751com.cn/tongxin/lunwen_4076.html