MPEG-2 数字视频技术参考指南 (3)—— MPEG-2视频压缩

来源:互联网 发布:系统数据备份策略 编辑:程序博客网 时间:2024/06/14 10:08

转载请注明出处: http://blog.csdn.net/zhubin215130/article/details/8931501

        压缩一个视频流就好比是冷冻干燥一碗速溶汤,汤被包装后,所有的水分都被挤出,携带和储藏也变得更方便。当包装的汤到了消费者手中后,会重新加入水来恢复汤的本来面目。通过从视频或音频流中提取出多余的信息,MPEG-2能将信号流压缩至原先大小的180分之一。当信号流到达用户家中后,机顶盒再把原始内容“大体”恢复出来,将节目呈献给观众。


        压缩,使得广播发送方在不增加传输带宽的前提下,将可传输节目或服务的数量提升至原先的6至10倍。余下的带宽则能够提供更多的节目、高分辨率电视(HDTV)、网络服务、或者交互式TV。


        因为MPEG-2压缩算法是有损的,信号压缩比的提高会导致信号质量的降低。从某种程度讲,MPEG压缩技术在引入人眼难以感知的画质降低的前提下,尽可能的实现了压缩信号质量的最大化。使用这些技术,在对图像质量有所妥协的基础上,能够将信号显著压缩,但是压缩率越高,越会牺牲节目的信号质量。


        MPEG-2标准在图像质量和码率之间提供了一个灵活的权衡,以适应质量需求和带宽需求的范围。MPEG-2定义了多种不同的profile和level,允许广播发送方根据所需质量来决定压缩率的等级,以适应其应用场景。更多与profile和level的相关内容请看后续介绍。


        视频内容被数字化后,就可以开始压缩了。视频压缩会在每一个视频帧以及连续帧之间压榨出相当多的冗余,同时还使用了一些人类视觉系统的技术来描述运动。使用视频压缩,能够在不造成令人无法接受的图像质量损失的前提下,将原始数字信号中98%的部分榨取出来。


        MPEG视频压缩的两个主要的类型为时间编码和空间编码。通过利用人眼对某种画面质量下降(例如动态图像区域的噪声)的不敏感性,空间编码消除了每个个视频帧中像素与像素之间的冗余。时间编码将视频序列中每一帧之间的冗余降低到最小。


  • 空间编码

        空间编码依赖于图像中临近像素集合的相似性。举个例子,一幅以蓝天为背景的图片,通常会包含很多行完全相同的蓝色像素点。空间编码能够只对这些像素的一个集合进行编码,然后声明余下的都是完全一样的,因此比特流中的冗余数据就被消灭掉了。


        空间编码处理过程包括以下几个步骤:

        (1)     离散余弦变换(DCT)

        (2)     量化

        (3)     加权

        (4)     遍历

        (5)     熵编码


        离散余弦变换(DCT)将图像切分为8X8像素的块,再将像素强度转换为一个频域值或系数的序列。由于空间冗余的存在,很多系数都为零或者接近零的值,则这些系数值可以从系数序列中丢弃,从而使得视频帧可以用更少的bit位来表示。这种丢弃是会损失一些细节,但丢弃的细节很小,小到人眼几乎无法感觉到。


尽管如此,当有时需要用更少的bit位来表示系数组的时候,则需要对数字视频流的画面精度作出妥协,产生更明显的图像质量下降。


做完离散余弦变换后,视频帧会被量化,这意味着系数组会按照视觉重要性重新排序。量化后,加权将会在更细节或更复杂的图像区域降低质量,引入噪声,因为在这些区域人眼的视觉灵敏度会降低,而对于图像变换小的区域,人眼对噪声的引入会非常敏感。然后,遍历离散余弦变换系数组,首先发送最重要的系数,然后是不太重要的,最后声明余下的系数都是零值。


空间编码的最后一步叫做熵编码,将根据每个系数出现的次数调整其大小。经常重复出现的系数被用最少数量的bit来表示,从而极大降低了传输系数组所需的总带宽。


  • 时间编码

        时间编码消除了视频流中连续帧之间的冗余,比如,一部从鸟瞰视角拍摄的足球比赛视频中,运动员总是活动的,但背景画面——球场本身是静止的。时间编码利用了连续帧的相似性,只对帧之间不同的地方进行编码。这是通过两种时间编码方式实现:帧间预测和运动预测。


        1. 帧间预测

        帧间预测利用连续帧的相似,周期性的插入完整的参考值,并使用该帧来预测前向的和后向的其他帧。参考帧成为帧内编码帧,或者I帧。I帧被用作P帧和B帧的参照物。


        预测帧——P帧,参考自前一个I帧或者P帧,这表明在传输P帧时,编码器只需要传输该帧系数组与前一个I帧或P帧的不同点即可,而不需要传输全部DCT系数组。在解码器端,通过前一个I帧和P帧作为参照并添加不同点,即可恢复P帧。双向预测帧——B帧,以前向和后向相邻的I帧或P帧为参考。通常P帧只需要I帧数据量的50%,而B帧仅需要I帧数据量的25%。



        当然,如果只用一个I帧作为基准来创建视频流里所有的其他帧的话,将会使视频流极易出错,因为一个I帧中的错误将会蔓延至整个视频流。因为这个原因,帧流被分成了若干个GOP(Groupsof Pictures),一般长度是12到15帧。每个GOP从一个I帧开始,当一个I帧出错时能够快速恢复。GOP也包含P帧和B帧,下图为一个GOP的例子。


        2. 运动预测

        
        虽然屏幕上的物体可能会改变位置,但他们的形态却通常是不变的。运动预测利用了这个相似性,测量物体的运动并将相应的运动矢量传给了解码器。解码器利用该矢量,在下一帧中将指定的图像从前一帧的位置移到新的位置。因此运动物体只需要编码一次,再在后续帧中作必要的移动即可。


        一般来说,运动会在多个帧间持续,所以传输矢量变化可以获得更高的压缩比。举个例子,如果物体的速度是恒定的,则运动矢量不会变化;只有不等于零的矢量才会被传输。

 

        3. Profile和Level


        为了向广播商提供编码复杂度和图像尺寸方面的灵活性,MPEG-2标准定义了一些不同的压缩选择——profile和level。Profile指定了编码复杂度,level指定了每帧的像素数目。下图列出了MPEG-2定义的各种profile和level,以及每种组合的最大码率。


        在当今的广播环境中,最广泛使用的组合是MainProfile at Main Level, 以及MainProfile at High Level。关于Profile和Level的更多信息,请参考MPEG-2specification。


        4. 压缩视频流的解码


        MPEG-2视频流的解码过程就是反向的执行编码过程的步骤。反转DCT过程会根据编码器的精度恢复频域系数。然后解码器会用I帧和P帧中的宏块,来代替那些在编码过程中从P帧和B帧中丢弃的冗余宏块。运动矢量定义了这些预测帧中的宏块的具体位置。

        就像前面所述,帧间预测需要将帧不按存储顺序发送给解码器,并临时保存在buffer中。例如,为了让解码器重建B帧,必须首先保证该B帧的前一帧和后一帧对解码器可用。下图表示,在最终显示给用户之前,需要按照上面的序列顺序解码。

 

原创粉丝点击