认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战由 Google 所领导的影像 codec:VP8,想要靠着与 HTML5 的整合,以及对手机、平板电脑等,运算能力较低的手持装置最佳化,提供无专利问题的解决方案,来挑战H.264龙头霸主的地位。

目前影像codec(编码、解码器)仍以H.264为主流规格,无论手机、平板电脑,或是YouTube,甚至是蓝光影片光碟,都将H.264列入支援清单,俨然成为当代影像codec霸主。

在2012年3月举办的MWC(Mobile World Congress,世界移动通讯大会)中,Qualcomm展示了下一代影像codec H.265,它的代号是HEVC(High Effciency Video Codec,高效率影像编码解码器),从名字上听起来比代号为AVC(Advance Video Codec,先进影像编码解码器)的H.264还要威猛。

不过这项技术目前还在发展阶段,第1版的委员会版草案于2012年2月才刚拍板定案,依据其发展规划,最终版本的国际版草案预定于2013年1月制定,至于推出正式版则没有明确的时间表,H.264似乎还有一段长路要走。

影像技术大事纪年份VP8大事纪Louis Le Prince展示人类史上第一部电影1888  1992On2 Technologies公司成立发表MPEG-11993 MPEG-2发表,DVD问市1995首款编码器TrueMotion S发表MPEG-4发表1998Google成立MPEG-4 Part10(H.264)发表2000TrueMotion VP3发表,随后改以VP做为系列名称 2005VP7发表,并获Skype採用HD DVD、蓝光光碟问市2006 中国蓝光高清光碟(CBHD)标準发表2007 HD DVD退出市场2008VP8发表YouTube提供1080p影片服务2009  2010Google收购On2 Technologies 2011VP8函数库libvpx发表H.265第一版草案发表2012正式版libvpx发表挑战者出现

但在H.265正式登场之前的这段空窗期,H.264可能要面临一项新的挑战。由Google所领导的影像codec:VP8,想要靠着与HTML5的整合,以及对手机、平板电脑等,运算能力较低的手持装置最佳化,提供无专利问题的解决方案,来挑战H.264龙头霸主的地位。VP8 最早由On2 Technologiesis开发,于2008年9月13日首度释出,其目地在于取代自家上一代产品VP7。不过Google在2010年收购On2 Technologiesis,这项技术便转为Google所有。

走向免费之路

这一连串发展的转捩点在2010年3月12日,自由软体基金会(Free Software Foundation)发表了一封公开信,呼吁Google使用HTML5和VP8,取代Adobe Flash Player和H.264,成为YouTube使用的影片格式。

在听到了自由软体基金会的声音后,Google于同年5月19日释出免费的VP8 codec函数库libvpx,经过数次改版后,libvpx终于在2012年1月27发布第1个稳定版本1.0.0版。至于解码方面,除了可以使用libvpx进行软体解码外,WebM专案的硬体小组也设计了VP8的硬体解码器,无偿提供给晶片厂商使用。

以WebM之名闯江湖

在影片封装容器方面,Google制定了专属的影片容器:WebM,它以Matroska(MKV)封装格式为基础,并搭配Vorbis音讯(Ogg使用的编码方式),这样好处是所有技术都是免费、自由的,不会产生专利权或权利金等问题。

VP8主打网路应用

最初在制定VP8标準时,其功能设计的焦点就在网路应用上,由于网路的频宽将成为品质的一大限制,因此VP8选择了频宽先决的开发方向,以较低的品质来弥补频宽的不足。

VP8的设计重心放在尖峰讯噪比(Peak Signal to Noise Ratio,PSNR)为30dB至45dB之间的表现,根据Google所释出的官方文件,在这个尖峰讯噪比区间的影像品质,大约在「尚堪入目」(watchable)到「目视无损」(visually lossless)之间。

YUV 4:2:0是什幺意思

由于人的眼睛对亮度比较敏感,对彩度比较迟钝,因此在处理影像的时候,往往会减少对色彩抽样的数量,以节省储存空间。YUV的色彩格式是将颜色分为3种分量,以Y表示亮度(Luma),U、V表示色度(Chroma),并可透过公式转换成RGB色彩格式。

最基本的YUV取样方式就是对所有像素皆进行取样,这种方式称为YUV 4:4:4,名称中的3个数字分别表示U、V分量的水平宽度参考值、第1行取样数目、第2行取样数目。如果是YUV 4:2:2的话,代表在宽度为4个像素的区块中,只取2个取样,每个2 x 1像素区块共用一个色度取样,而YUV 4:2:0则是更进一步精简掉第2行的取样,让2 x 2像素区块共用一个色度取样。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲以4 x 4的像素区块为例,无论使用哪种方法,亮度都会採集16个取样。在色度方面,YUV 4:4:4也是採集16个取样,YUV 4:2:2、YUV 4:2:0则是分别将取样数降低至8个、4个。

从图中可以清处看到,YUV 4:2:0可以把色度取样数从16缩减至4,原本相较于YUV 4:4:4需要对4 x 4像素区块进行3种分量共48个取样,YUV 4:2:0只需24个取样(16+4+4),可以节省一半的资料空间。

如果将网路应用的平台拉到手机或平版电脑等,效能相对薄弱的手持终端装置上的话,除了会面临资料流量的问题,也得尽量节省解码时所需要耗费的硬体资源。VP8可以将经过熵编码(entropy encode)处理的资料,切割成许多可平行处理的区块,只要在编码时付出些微的效能冲击,就能够让多核心处理器,在解码时发挥多工优势,并确保单核心处理器的效能,不会因此受到影响。

仍具应用弹性

VP8除了更贴近低频宽网路,也没有冷落了高阶应用。VP8在制定规格时,将色彩取样定为8-bit YUV 4:2:0,採用循序(progressive)扫瞄,并将解析度上限定为16383 x 16383,VP8也希望能够藉由其高效率的解码能力,以及能屈能伸的编码弹性,让手持装置到效能强大的桌上型电脑一体适用。不过VP8却有个矛盾的地方,它不具有类似H.264的範本(profile)设计。

範本的用意是针对不同的播放设备,制定其效能足以负担的编码设定,如果播放设备性能较弱,可能就要牺牲压缩效率(如降低品质)以求得播放流畅。厂商在规划产品时,就可以依据效能表现,限制该产品所支援的範本,明确地区隔出能流畅播放的档案。希望能在网路平台及手持装置一展长才的VP8,反倒不具有这项功能,让人觉得有些怪异。

延伸阅读:

网路视讯编码格式实际测试,动手玩 VP8、技压 H.264

Google WebP 图片新进展:无失真压缩、去背透明、动画

影片压缩方式大比拼,为什幺压成 VBR 会更好?

DVD 8片变1片:简单工具、高品质进阶技巧实作给你看

(后面还有:VP8的3大特色)

VP8的3大特色

VP8与H.264压缩影片的概念大致相同,但是在实际处理的过程中,还是有不同的地方。笔者将VP8独有技术,选出3个比较有特色的部份,分别是2阶段转换、画格内预测、画格间预测,以下分别向读者说明。

1. 对影像进行2阶转换

常见的影像编码格式,会在色彩取样完毕之后,将画面切割为许多16 x 16像素的巨区块(macroblock),并对这些巨区块进行离散余弦转换(discrete cosine transform,DCT),利用DCT的数学特性,将资料分布集中于低频区域,之后再对转换后的资料进行量化(quantization ),以节省空间
VP8则是会先将每个巨区块,再细切为16个4 x 4像素的小区块,先对小区块个别进行DCT后,再将得到的16组参数进行阿达马转换(Walsh–Hadamard transform,WHT),透过WHT转换,可以更进一步删去资料重複的部分,节省储存空间。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲一般编码器是直接对16 x 16的巨区块进行DCT,VP8则是先将巨区块切成16个小区块,先进行DCT后,再将巨区块进行WHT。

2. 用画格内预测分析色彩

VP8在分析画面色彩的时候,会将画面切割为许多子区块(VP8允许4 x 4、16 x 16大小亮度子区块,和8 x 8色度子区块),分析该像素的亮度、色度与邻近像素的关係,并建立延伸的预测矩阵(请参考图中浅绿色部分),透过重複利用预测矩阵中的参考值,以缩减资料量。

若以4 x 4区块为例,图中白色部分就是区块中的16个像素资料,H_PRED(horizontal prediction)、V_PRED(vertical prediction)分别是将被分析的单一像素,套入左边或上面的参考值,比如X00的H_PRED为L0,X32的V_PRED为A2。DC _PRED(DC prediction)则是套入左边加上面参考值的平均,X12的参考值即为L1 + A2的平均。

最后一个比较特别的方法是TM_PRED(TrueMotion prediction),它是将整个区块加上一个补偿参考值C,并透过以下公式计算Xij=Li + Aj – C,以X12为例,其参考值即为L1 + A2 – C。根据官方提供的资料,使用这些方式可以节省20 ~ 45%的资料流量。

3. 画格间预测捨去I、P、B frame

VP8捨弃了以往H.264及其他编码常用的I、P、B frame动态预测画格,改用最后画格(last frame)、黄金画格(golden frame)、备用画格(alternate frame),但是2种方式的概念、原理并没有相差太多。
最后画格说穿了就是和I frame一样,将整个画面完整地记录下来,虽然会花费最多储存空间,但是只要解码单一画格,就可以显示该时间点的完整画面。

黄金画格则是类似P frame的概念,只记录与上一帧相异的部份,至于相同的部份,则延用上一帧的资料。黄金画格除了可以节省资料流量外,对于即时编码(比如视讯聊天)也有很大的用处,它可以透过动态补偿的方式,即时修复画面中的错误,而不用重新传送1张全新的画面。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲在预测矩阵中的元素A、L、C,都是由编码器依照矩阵中像素的分布,经过计算产生的参考值,可以透过「複製、贴上」、公式计算的方式,将资料填入实际画面中。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲以此图为例,若X的预测方式处理为DC_PRED的话,X=(A1+L1)/2,若为TM_PRED的话,X=A1+L1-C。若Y的预测方式为H_PRED的话,Y=L3,若为V_PRED的话,Y=A3。

以备用画格取代B frame

备用画格是VP8独有的技术,它最大的特色就是画格中的物件不一定要显示在画面上,而且可以将其中物件插入不同画格中,说得具体一点,它的用途是用来取代传统的B frame。

B frame的运作的方式和P frame很相近,不同的是B frame可以比对上、下一帧画格,从2个画格撷取画面中的物件进行动态补偿,然而P frame只能从上一帧画格做动态补偿。

备用画格可以把许多将被用于动态补偿的物件,收集在单一画格中,并且在解码时分配给多个黄金画格使用,以增进压缩的效率。由于备用画格的传输、解码与其他画格并无不同,所以不会造成处理器额外的负担,顶多是因缓冲的需求(暂存画格中物件),额外佔用些微记忆体,很适合用于低阶硬体。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲图中I、B、P分别指I、P、B frame,L、G、A表示最后、黄金、备用画格,红色箭头表示可以读取其他画格资料的方向。黄金画格也能和B frame一样,可以向2个方向读取资料。

动态补偿除了要记录相同的物件外,也要记录物件的移动方向(动态补偿向量),透过VP8的SPLITMV技术,如果某一区块的动态补偿向量与邻近区块相同时,编码器只需标记要延用上方或是左方的数值,不需记录完整资料。

对付低画质影片利器

VP8和其他的影像编码器一样,会将画面分为数个16 x 16像素的巨区块,并以巨区块做为影像处理的基本单位,即使分析色彩时可以再细切为4 x 4、8 x 8的子区块,但最终还是会组合成16 x 16巨区块。在压製品质比较差的影片中,常常会看到形似马赛克的块状杂讯,就是巨区块架构的后疑症。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲假设一个4 x 4的区块具有3种动态补偿向量,其分布如图所示,在未经SPLITMV处理前,编码器需记录16组资料,但是经过处理后,只需记录3组资料,其他13组则参考邻近区块即可。

一般编码器会透过迴路滤波器(loop filter)来减低这种块状杂讯,不过对于单一画面,只能使用相同滤波强度。VP8的可变式迴路滤波器(adaptive loop filter)可以针对画面中不同的区域套用不同滤波强度,而且能够在每帧之间调整强度,如此一来既可以消除块状杂讯,也可以减缓整体画面变模糊的情况。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

▲笔者以游戏画面来说明可变式迴路滤波器的概念。图中前景人物(玩家角色)即为变动多的部分,可以增加滤波器的强度,背景人物(路人)变动的幅度比较小,可以降低滤波器强度,因为场景没有变动,不需使用滤波器。

具有与H.264对抗的潜力

笔者以libvpx及x264编码器,分别进行VP8、H.264的转档测试,转档条件为将片长为2分钟的1080p预告片,以固定品质(CRF参数=20)的方式,转成解析度为960 x 544,不附带音讯的影片。

测试平台搭配的是Core2 Duo E6550处理器,从下方数据可以看到,除了编码时间之外,2者的表现十分接近,无论在播放时的处理器佔用率,以及压缩率的方面,表现几乎一模一样。如果libvpx可以在往后的更新加强效率的话,实用性或许可以和H.264并驾齐驱。

认识 VP8 影像编码:整合 HTML5 更小更漂亮、挑战

(点图可放大)

▲libvpx及x264都是收录于ffmpeg的编码器,在表现上只有编码效率有着比较大的差异。由于测试时是採固定品质方式编码,所以资讯流量会不段变动,因此採用整体流量除以片长的方式,计算其平均流量。

以目前的局势来看,足以左右胜负的「枱面下内容」,仍然以RMVB、H.264等格式为主,这将成为WebM想要一统江山最大的阻碍。笔者认为要说服他们转向WebM,最重要的关键还是在于编码器,该如何强化libvpx的表现,甚至推出品质可靠的图形介面转档程式,将是VP8当前最重要的课题。