目前,H.264是主流的视频编码标准。我们看到的赛事电视直播、MP4和MKV格式的电影或者点播的在线视频,都需要首先使用H.264编码器压缩成“连续的图片”,然后利用设备上的H.264解码器解码并以“视频”形式播放。2013年1月,下一代标准H.265,也称为HEVC(High Efficiency Video Coding)的标准已完成。与H.264相比,它最高可提升50%的编码效率,这意味着同样画面质量的视频仅需使用原来一半的比特率,或者说同样比特率下画面质量可提升两倍。H.265并不是全新发明的标准,它是H.264技术的改进版,其编解码需要更强的运算能力。
更好也更耗资源
实际上,视频是由一系列连续的单张图片(帧)组成的。视频编码的过程是,首先编码器将每一帧图片切割为更小的、固定大小的区块(block),然后将每个区块的色度和亮度转换为频率值,这种量化的过程也是压缩数据即删除重复数据的过程。最终,连续的图片被打包为类似ZIP的压缩文档,这是编码器的基本工作原理。鉴于连续帧之间的变化通常极小,因此MPEG标准引入了一种关键的算法——帧间预测(inter-frame prediction)。基于该算法,视频编码器会将几个相似的连续帧组成一个图像组(Group of Pictures,GOP),每个GOP的首帧会保留全部的图像频率值,其他帧则通过差值计算来获得自己的频率值。
H.264标准在帧间预测外,引入了帧内预测(intra-frame prediction)算法。H.264编码器并不编码所有区块的频率值,而是根据相邻像素的差值来计算。例如,包含一大片蓝天的画面可被大幅压缩,因为画面中相邻像素的色度及亮度值几乎完全相同。H.264的单帧压缩效率比JPEG图像高50%。编码器的目标是找出更多相似的区块,但编码效率要求越高,所需的运算能力也越高。
H.265同样采用帧间和帧内预测算法,但与H.264相比,它的编码器工作效率更高。因为H.265没有采用固定的编码区块大小设计。之前视频编码的基本编码单位——宏块(macroblock)的大小通常是16×16像素。H.265编码器选择了编码树单元(coding tree unit,CTU)的设计方案,编码器会视情况设定编码树单元的大小,包含16×16像素(适合低分辨率视频)、32×32像素和64×64像素(适合高清电影)3种尺寸。
每个编码树单元又被切割为若干编码单元(Coding Units,CU),切割方式有两种,或等分为4个子区块,或保留原始尺寸,因此编码单元的大小在8×8像素到64×64像素之间。同编码树单元一样,编码单元包含1个亮度和2个色度编码区块(Coding Blocks,CB)。编码区块还将进一步被切割为预测区块(Prediction Blocks,PB)。在细节丰富的电影中,H.265编码器复杂的细分过程,保证了其算法仍能找出足够多的相似区块,删除重复区块,从而获得较高的压缩效率。
优化编码技术
无论是H.264还是H.265,将画面切割为宏块或编码树的目的都是类似的,其中之一就是要进行动态补偿,它是帧间预测步骤中相当重要的一环。简单地说,动态补偿就是比对不同的画面,从中找出相同的部分予以删除,只记录有变动的部分,来达到节省数据流量的目的。动态补偿的实际方法也不难理解,编码器在把画面切割之后,会抓取各区块与其他帧进行比对,分析各区块中的内容是否有所变化,以及各内容移动的方向和距离。如果内容没有变化,那么该区块就可以延用其他帧中的数据,如果内容产生移动,则只需将移动的方向与距离记录为动态向量,就可以省去记录完整画面数据所需的时间。然而,H.265增加了画面切割的灵活性,需要更多的计算性能。
在解码方面,H.265支持并行处理技术。新引入的波前平行运算(wavefront parallel processing)算法将画面分割为以横行为单位的CTU群组,所有横行可同时解码。对采用1080p分辨率、64×64像素CTU的视频来说,解码器最多可以用16个线程并行计算。
目前市面上还没有免费的H.265编码器,但是主流的专业视频剪辑软件在2013年秋天的升级中就会增加对H.265编码的支持。H.265的解码器则要简单很多,新的平板电脑或智能手机只要升级系统或固件就可以支持该标准。用不了多久,高清电视也会支持H.265,因为H.264标准已经无法满足4K2K分辨率高清视频的需求。