李君
摘要:当前保留的大多数视频节目都是由 MPEG-2压缩得到的,为了适应实际的需要,由 MPEG-2到 H.264的标清分辨率实时转码是很有必要的。本论文研究的目的,是在尽可能少增加码流和尽量少降低图像质量的前提下,实现MPEG-2到H.264在D1分辨率(720x576)的实时转码。本文重点分析了转码方案中 I,P,B 帧的转码算法,测试结果,证明本文研究的转码器其转码速度和转码质量满足实际需求。
关键词:转码;实时;MPEG-2;H.264
中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2017)06-0219-04
1 概述
多种视频压缩标准的同时存在,导致视频设备间急需解决兼容问题,而视频转码是有效解决这种兼容问题的一种技术。H.264作为新一代的视频压缩标准,具有比其它视频压缩标准拥有更高的压缩率。然而,当前保留的大多数视频节目都是由 MPEG-2压缩得到的,为了适应实际的需要,由 MPEG-2到 H.264的标清分辨率实时转码是很 有必要的。本文的研究工作就是围绕标清实时转码技术展开的。
2 转码方案选取
在转码器中,编码部分的耗时远远大于解码部分。本论文研究的目的,是在尽可能少增加码流和尽量少降低图像质量的前提下,实现MPEG-2到H.264在D1分辨率(720x576)的实时转码。为此,需要从输入的MPEG-2码流中提取可复用参数并用于H.264 编码端,以减轻编码端的编码时间。
MPEG-2 转 H.264 转码器属于不同标准间的转码。在其转码过程中,如果直接使用解码端产生的运动矢量,将导致转码的运动估计不准、视频质量下降等许多问题, 所以需要对运动矢量进行调整。文献[2]使用mobile-calendar序列对CPDT转码结构和两种DCT域转码结构做了测试。测试的结果是, 象素域级联转码器转码后的图像质量(以PSNR为标准)明显高于DCT域转码。象素域级联转码结构有着低复杂度和高灵活性等特点,并且有最好的PSNR效果,对错误偏移也有很好的抗误码性,非常适合作为MPEG-2转H.264转码器的结构。因此,本文研究的转码器采用了运动矢量重估计的象素域级联转码结构。
3 转码器的实现
转码器的输入端是正确的 MPEG-2 码流,输出端是可包含 I、P、B 三种帧类型的 H.264 码流,其中 B 帧以及 IDR 帧的频率可由转码器参数设定。这里详细讨论三种帧类型转码的算法。
3.1 I帧转码的实现
本文研究的转码器针对D1分辨率视频流,每帧分辨率为720x576,即每帧有1620个宏块需要编码。如果I帧中宏块的帧内预测包含所有预测模式,将会有非常大的计算量,而且由于标准间较大的差异,转码器在帧内预测方面可复用信息非常少。为了达到比较高的转码速度,并且不影响图像质量,本转码器采用了简化帧内预测模式的方法:转码器在帧内预测部分只采用16x16帧内预测的4种模式,同时降低量化参数。这样,每个帧内预测宏块最多只需进行16次预测即可,远远小于选用全部帧内预测模式的592次。这种方法虽然使转码器中I帧的压缩率少量下降,但是大大提高了I帧转码速度。I帧宏块的转码流程如图1所示。
3.2 P帧的转码
本文研究的轉码器其运动估计算法主要有以下几个重点:
宏块的模式选择:由于MPEG-2和H.264中运动矢量的相关性,MPEG-2中得到的基于宏块16x16的MV对于H.264中的7种帧间预测模式来说是比较准确的。如果只采用H.264的16x16,16x8,8x16,8x8四种分割方式进行预测,虽然会使预测更加准确从而减少10%的码流,但是使运动估计部分的计算复杂度增加了4倍以上。本转码器对运算速度的要求很严格,所以为了提高转码速度,本转码器尽可能采用16x16模式对宏块进行预测编码。当16x16模式预测的块其SAD超过阈值时,再进行8x8块分割编码。
亚像素搜索精度:一般来说编码器在编码每帧之前都要对当前帧做插值。H.264对亮度最高可达1/4像素,其半像素点需要通过复杂的6头滤波,而1/4像素点由一对对角半像素点线性内插得出。其计算量很庞大。本转码器最高搜索精度使用半像素,从而在略微增加码流大小的情况下大大减少了运动估计的时间。
半像素插值范围:普通视频编码器在编码P帧前需要对整幅图像进行插值。本论文研究的转码器为了提高转码效率,避免了对所有块都进行半像素插值。方法是:当整像素匹配块的SAD小于某个阈值时,直接以该匹配块为最佳匹配块进行残差编码,而不在半像素域内进行搜索。这样可以在对码流影响不大的情况下,减少半像素6头滤波的计算次数以及半像素域的运动搜索。
搜索窗口:转码器中输入流包含的运动矢量和在全局范围内重新搜索得到的最佳运动矢量比较接近,为了减少6头插值滤波的次数和搜索范围,同时考虑到MPEG-2解码产生的指向半像素的运动矢量与H.264编码的最佳运动矢量有差距,本文转码方案中运动矢量在复用前首先进行取整操作。在对坐标为(x,y)的宏块做运动估计时,如果需要进行半像素域搜索,则仅搜索其上下左右四个半像素点,从中找出SAD最小的块作为最佳匹配块。
宏块模式复用:在MPEG-2码流中我们还可以得到宏块模式。对于非帧间预测块可以直接利用此信息,将此块作为H.264中的帧内模式来处理。这样就避免了此块的模式选择部分,节约了时间。
转码器的编码端在进行P帧宏块转码时,必须首先判断出16x16宏块的最佳参考块位置。
每个P帧宏块的转码流程为:
(1)判断该块是否为帧间预测块,如果不是,则进行16x16帧内预测编码;
(2)如果该块属于帧间预测,则读取该块在解码中对应的运动矢量;
(3)如果该块有两个运动矢量,则分别对其进行(4)(5)步,并选取SAD小的运动矢量作为参考;
(4)根据解码中对应的取整运动矢量从参考帧中找到参考块,并计算参考块亮度与当前块亮度之间的SAD;
(5)判断SAD值是否超过阈值,如果两个运动矢量所指向的参考块其SAD均超过阈值,则到(6),否则选取使得SAD小的运动矢量作为运动重估计的参考,并到(10);
(6)根据该块周围块的运动矢量,计算该块的PMV,并计算该PMV所指向参考块与当前块之间的SAD;
(7)选取使SAD最小的运动矢量作为运动重估计的参考;
(8)如果SAD大于阈值,计算参考块色差U和V相对于当前块的SAD是否都小于阈值。如果是则选取参考块为最佳匹配块并运行(10),否则运行(9);
(9)对参考块周围进行6头滤波插值,并在参考块顶点像素上、下、左、右、顶点5个点的范围内搜素最佳匹配块;
(10)根据最佳匹配块和运动矢量判断该块是否属于SKIP宏块。如果是则按SKIP宏块编码,否则对该块进行残差编码。
从P帧宏块转码流程可以看到,本转码器采用的运动重估计无需对整幅图像进行插值,并且计算过程中可大大减少半像素6头滤波插值,从而提高转码器P帧转码的速度。
3.3 B帧的转码
P帧与B帧最大的区别在于,B帧编码可以有三种预测方向:前向,后向和双向。B帧预测方式如图2所示。
3.3.1 MPEG-2中B帧的编码
在MPEG-2标准中B帧不可以作为参考帧参与运动估计和运动补偿,所以编码器不存储B帧的编码重构图像。根据运动矢量的不同,MPEG-2的B帧宏块编码可分为三类:
如果只有一个前向预测运动矢量,那么该B帧宏块仅参考前一个I帧或者P帧。这种仅采用前向预测的B帧宏块的压缩方法与P帧中帧间预测宏块的压缩方法类似;
如果只有一个后向预测的运动矢量,那么该B帧宏块参考的是后向的一个I帧或P帧,其预测方法与P帧的帧间预测原理相同,只不过预测方向相反;
当前向和后向运动矢量都存在时,说明该B帧宏块需要做双向预测。它需要从前后两个I帧或P帧中做预测,其残差块为当前原始宏块像素与前向、后向两个预测块的像素平均值的差。
MPEG-2中B帧的模式选择树形结构如图3所示。
3.3.2 H.264中的B帧编码
H.264中B帧的编码原理和MPEG-2类似,不过其编码方案有3个重要改进:
允许对B帧宏块进行划分,允许对其子块进行运动估计和运动补偿;
允许B帧在过去和将来有限的多幅参考帧中使用多个参考帧进行运动估计,参考帧的数量随不同档次而变;
允许B帧作为其它帧的参考帧。
图4显示了H.264中3种B帧编码方式:一个前向和一个后向预测;两个前向预测;两个后向预测。
和MPEG-2相比H.264在B帧的模式中增加了一种DIRECT模式。这种模式与SKIP模式有些类似,其运动矢量不编码,而是根据周围宏块的运动矢量进行预测得到的。不过它与SKIP模式最大的不同在于,SKIP模式的宏块没有像素残差,而DIRECT模式有像素殘差。这样在编码过程中可以节省运动矢量的编码位数,从而增大压缩比。
在B帧中可以对宏块进行4种分割,分别是16x16、16x8、8x16、8x8。不同的分割方式可以采用的预测模式也不尽相同。表1所示为B帧的宏块预测选择。
3.3.3 B帧转码的实现
B帧的转码和P帧转码相似,也需要对运动矢量进行调整。B帧预测在H.264中是非常消耗时间的,如果使用多参考帧,其计算量远远高于P帧编码。为了使转码器在高速转码B帧的同时,尽量少影响码流大小,设计合理的模式选择算法非常重要。
本文研究的转码器其B帧宏块模式选择方法有以下几个关键:
一般来说,输入MPEG-2码流中B帧的预测模式选择是比较准确的,所以转码器对MPEG-2码流中B帧宏块的预测方向进行复用。如果编码宏块对应MPEG-2码流中采用的是单向预测,则直接复用该预测模式。如果该宏块采用的是双向预测,则在H.264编码时根据计算决定预测方式。这样可以在码流压缩率基本不变的情况下,使预测模式的选择时间减少到原来的三分之一;
H.264标准中的DIRECT模式支持16x16宏块分割方式,并且使码流压缩率有明显提高,所以本转码器在处理双向预测块的运动估计时,采用双向预测和DIRECT预测模式,并从中选出最合适的模式进行宏块残差编码。虽然和仅采用双向预测相比增加了一种预测模式,从而增加了运动估计的运算,但是使得压缩后B帧码流比特率大大减少。
如果B帧宏块在解码端采用前向或后向预测,则H.264编码端该宏块采用和解码时相同的预测模式进行编码。当B帧宏块解码端采用双向预测时,其模式选择过程为:
取前向预测运动矢量,按前向预测方式找到最佳匹配块,并计算SAD。如果SAD小于阈值,则按前向预测进行编码,否则继续进行预测模式的选择;
取后向预测运动矢量,按后向预测方式找到最佳匹配块,并计算SAD。如果SAD小于阈值,则按后向预测进行编码,否则继续进行预测模式的选择;
进行DIRECT预测,找到最佳匹配块,并计算SAD。如果小于阈值,则按DIRECT模式进行编码,否则继续进行预测模式的选择;
进行双向预测,并与DIRECT预测模式进行比较,选择COST小的模式进行编码。
B帧双向预测块转码流程如图5所示。
4 测试结果
4.1不使用去方块滤波器的转码效果
测试环境为PCIntel(R)Core(TM)2CPU2.0GHz,内存1G。在试验中D1(720x576)测试码流选用广电提供的大话西游片段序列和Tank序列,帧数均为25fps,GOP均为15,码流格式为IBBP。转码输出端输出格式同输入码流格式,帧数均为25fps。测试转码时测试200帧,量化参数选用QP=32,不使用去方块滤波。
大话西游测试码流属于运动不是很剧烈的码流。使用本转码器测试后,PSNR平均值35.3712,最低值33.8383,最高值39.0904。前4帧PSNR为:
PSNR (YCbCr Y Cb Cr): 37.6093 36.2018 43.9715 43.8465
PSNR (YCbCr Y Cb Cr): 35.3219 33.7641 44.1130 43.7948
PSNR (YCbCr Y Cb Cr): 35.1656 33.6160 43.7726 43.4904
PSNR (YCbCr Y Cb Cr): 35.3718 33.8730 43.0355 42.8159
转码后200帧的码流大小共1.296kb,转码速度为平均每帧24.184ms。在实时要求的每帧40ms情况下,可以实现实时转码器。
Tank序列和上一个序列相比运动比较剧烈。测试得到PSNR平均值为33.3818,最低值31.2469,最高值37.0915。前4帧PSNR为:
PSNR (YCbCr Y Cb Cr): 34.4716 32.8147 45.2238 46.8538
PSNR (YCbCr Y Cb Cr): 31.8217 30.1360 43.4940 46.3854
PSNR (YCbCr Y Cb Cr): 32.0798 30.3967 43.7334 46.2518
PSNR (YCbCr Y Cb Cr): 33.2598 31.6105 43.2837 46.0296
转码后200帧的码流大小共2.540kb,转码速度为平均每帧27.3ms。可以实现实时转码。虽然在剧烈的运动视频进行转码时PSNR会有所下降,但是从视觉上感觉差异不大。
由实验结果可见,在对运动不是很剧烈的码流进行转码时,码流压缩率比较高,图像质量比较好,转码速度很快,在对运动比较剧烈的码流转码时,码流压缩率和图像质量都有所下降,但是都在可以接受的范围内。虽然转码速度也略有下降,但是还是能保证实时转码。
4.2使用去方块滤波器的转码效果
测试时使用大话西游片段序列和Tank序列,同样测试200帧,选用量化参数QP=32,转码时使用去方块滤波器。
大话西游码流平均转码速度为每帧29.61ms,其中濾波耗时平均每帧5.43ms。PSNR平均值35.6615,最低值34.1878,最高值39.4467,前4帧的PSNR为:
PSNR (YCbCr Y Cb Cr): 37.5639 36.1336 44.2403 44.0461
PSNR (YCbCr Y Cb Cr): 35.4928 33.9397 44.2055 43.8518
PSNR (YCbCr Y Cb Cr): 35.3602 33.8116 43.9539 43.6541
PSNR (YCbCr Y Cb Cr): 35.5582 34.0564 43.3320 42.9935
该测试条件下的PSNR和不使用滤波器时测得的PSNR平均值35.3712,最低值33.8383,最高值39.0904相比,有明显的提升,且块效应有明显的消除。码流大小1,292kb,与不使用滤波时压缩的1,296kb相比有少量下降。
Tank码流平均转码速度为每帧35.199ms,其中滤波耗时平均每帧7.90ms。PSNR平均值33.5520,最低值31.4689,最高值37.2467,前4帧的PSNR为:
PSNR (YCbCr Y Cb Cr): 34.2591 32.5901 45.6571 47.0037
PSNR (YCbCr Y Cb Cr): 31.8855 30.1968 43.7478 46.5964
PSNR (YCbCr Y Cb Cr): 32.1336 30.4466 44.0063 46.5356
PSNR (YCbCr Y Cb Cr): 33.2226 31.5645 43.6591 46.2399
该测试条件下的PSNR和不使用去方块滤波时PSNR平均值为33.3818,最低值31.2469,最高值37.0915相比,图像质量有明显提高。转码后码流大小为2,512kb,比不使用滤波时的2,540kb有所下降。
由实验结果可见,两个码流在转码器添加去方块滤波功能的情况下,图像质量有所提升,码流大小略有下降,转码速度仍然达到了D1分辨率实时转码的目的。
5 结束语
本论文的研究目标是基于 PC 环境,在保证图像质量少量损失的前提下实现 MPEG-2 到 H.264 的 D1 分辨率实时转码。当前,分辨率为 D1 电视格式的视频编码大多是通过 MPEG-2 压缩的,而 H.264 由于其性能的卓越,注定会在当今与将来有更广泛的应用,所以研究 MPEG-2 到 H.264 的转码是很必要的,有很强的现实意义与价值。
参考文献:
[1] 毕厚杰.新一代视频压缩编码标准H.264/AVC[M].北京:人民邮电出版社,2005:22-24.
[2] Werner N.Requantization for transcoding of MPEG-2 intraframes[J]. IEEE Trans image Process,1999,8(2):.
[3] Assuncao P, Ghanbari M. Buffer analysis and control in CBR video transcoding[J].IEEE Trans. Circuits Syst. Video Technol,2002(12): 1009-1020.
[4] 王辅中,戴琼海,丁嵘. 视频转码中的运动重估计技术[J]. 有线电视技术,2004,162(18): 24-28.
[5] Zhi Zhou, Shijun SunShawmin Lei. Ming-Ting Sun. Motion Information and Coding Mode Reuse for MPEG-2 to H.264 Transcoding. Circuit and systems. 2005.ISCAS2005.IEEE international Symposium,2005(2):1230-1233.