王朝百科
分享
 
 
 

MPEG2编码

王朝百科·作者佚名  2009-12-03  
宽屏版  字体: |||超大  

MPEG-2视讯原始的主要目标是希望在位元率介于4到9Mbit/s间时,能对一般标准电视解析度的交错式视讯(Interlaced Video)提供一种新的编码压缩方法以得到更好的画质。然而,MPEG-2的最终目标并未仅只于此,它也可以支援如HDTV等更高画面解析度的视讯应用,以及各种画面解析度下的交错式视讯。如同其它MPEG标准,MPEG-2的视讯标准仅仅定义了资料的语义及语法,并未规定资料编码及解码的实作方法,因此这之间还有不少编解码技术空间可以发挥。

一个简单的MPEG-2 Non-scalable视讯编解码器(Codec),MPEG-2视讯编码器(Encoder)包含Inter Frame/Field离散馀弦变换(Discrete Cosine Transform,DCT)编码器、Frame/Field动态估计及补偿器(Motion Estimator and Compensator)、以及可变长度编码器(Variable Length Encoder,VLE)。离散馀弦变换编码器主要是利用空间上的冗馀(Spatial Redundancies),而动态估计及补偿器则是利用时间上的冗馀(Temporal Redundancies)来压缩资料;最后资料经过可变长度编码器编码后送至MPEG-2的系统多工器(System Multiplexer,SysMux),再由Transport或Program Stream将资料送出。

所谓的压缩,就是找出冗馀内容,再从资料流中除去的技术。如之前所提,MPEG-2的视讯主要是就是利用空间上及时间上冗馀资讯的消除来达到压缩的效果。图4及图5为典型的MPEG-2编解码器,以下我们将针对其中重要的压缩技巧做解说。

1. 空间上的冗馀去除

视讯资料的一个特性是空间冗馀。一般来说,在同一张画面上必有一些共通特性,也许是色彩上的,也许是几何上的,或是其它特征值得到的。所谓的空间冗馀去除,就是要识别出画面中重要的元素,并移除重复且较无影响的元素的动作。

1.1 色彩取样

跟据实验,人眼对于亮度变化较敏感而对于色度的变化相对的较不易查觉。依此实验,MPEG-2采用亮度色度的色彩表示格式,Y表示亮度值(Luminance),Cr及Cb表示色度值(Chrominance),并且从降低色度取样来减少讯号量。MPEG-2中定义了4:2:0、4:2:2及4:4:4采样格式。4:2:0表示四个Y取一个Cr一个Cb;4:2:2表示四个Y取两个Cr两个Cb;而4:4:4表示四个Y取四个Cr四个Cb,即不做任何的采度取样减少。减少色度采样可以在尽量降低对视觉的影响下达到较大的资料缩减效果。

1.2 离散馀弦变换

离散馀弦变换是一个无损的,可逆的数学计算。在用于视讯压缩时,它把空间亮度采样和相应的色度采样强度资料转化为空间频率资料。在MPEG-2的视讯压缩中,找出存在于视讯中的每张画面里的空间冗馀,就是以将图切成8x8的区块(Block)后做离散馀弦变换来完成的。区块的色彩值转换后的离散馀弦变换系数依然是一个8x8的矩阵,左上角的系数称为DC系数,其馀称为AC系数。DC系数往下代表着逐渐增高的垂直空间频率系数,往右代表看逐渐增高的水平空间频率系数,其他系数则代表垂直水平空间频率的不同组合。由于图像的自然属性,一个画面中通常不会有很密集且大的波动,因此离散馀弦变换经常使代表较高空间频率的离散馀弦变换系数的值很小,甚至为零。基本上,离散馀弦变换并不能减少数据量,但是却可以将资料转成较易找寻冗馀的表达型式。

1.3 量化

除了在4:2:2或4:2:0的色彩采样过程中丢失了有限数量的资讯以外,MPEG-2的压缩能力来自对离散馀弦变换系数灵活的量化过程。简单地讲,量化(Quantization)就是减少描述各系数的位元数的过程,亦即将各系数以较粗糙的度量单位描述之。量化的动作主要有两个功能:一是让原已很接近零的值尽量变成零,另外则是使得原来非零的系数分布范围变小,有助于压缩。量化是一种破坏性压缩技巧,量化后的资料再还原时与原来的资料不会全然相同,因此视讯压缩后失真的程度,主要便取决于量化位阶(Quantization Scale)的选取。由于人视觉上的特性,高空间频率的讯号往往不易察觉其变化,因此用较大的位阶表示甚至忽略之,对人眼来说亦不会造成多大的差异。

2. 时间上的冗馀去除

视讯资料的另一个特性是时间上的冗馀。一般播放的视讯,其实只是一连串连续的图像序列,然而因为人类视觉的视觉暂留现象,所以会有连贯影像的错觉。而此种视讯因为画面间时间间隔甚小,因此相临的画面几无差异,大多只是图像内容的位置变化。因为有此现象产生,所以我们可以利用除去在时间轴上画面与画面的相似性造成的冗馀来进行压缩。

2.1动态补偿

动态补偿(Motion Compensation,MC)便是基于上述概念所发展出来的一种视讯压缩技巧。在做动态补偿之前,首先将画面分为16x16的大区块(Macro-block,MB),然后找寻其在参考画面(Reference Picture)中近似的大区块所在位置,并将由目标大区块到参考大区块间位置的座标差记录成动态向量(Motion Vector)。参考画面在该画面之前,称为向前预测(Forward Prediction);参考画面在该画面之后,称为向后预测(Backward Prediction);而参考画面在该画面前后都有,称为双向预测(Bi-directionally Prediction)。而整个找寻动态向量的过程称为动态估计(Motion Estimation),常见的有区块匹配法(Block Match Method)及递回法(Recursive Method)。

另外,因为预测可能不是最佳匹配且目标大区块与参考大区块间不一定完全一致,因此还要计算目标大区块与参考大区块间画面讯号的差值,称为预测误差(Prediction Error),用以在解码时做补偿之用。最后预测误差再以空间的冗馀去除的压缩法处理之。

2.2 画面压缩

要探讨如何压缩MPEG-2的视讯之前,首先来看看MPEG-2的视讯资料结构,由下而上依序为:

1. 区块(Block):包含量化后的画面资料,由8x8的像素所组成,是离散馀弦转换的最小单位。

2. 大区块(Macroblock):为一个16 x 16的大区块,是色彩取样、动态估计及动态补偿的基本单位。

3. 片段(Slice):由数个大区块(Macro-block)所组成,主要将每张画面作水平且固定单位的切割。片段以上的各种结构都有讯号同步及错误控制能力。

4. 画面(Picture):由数个片段(Slice)所组成,为最主要的编码单位,主要有三种影像编码的型态 I、P、B,稍后会有详细叙述。

5. 画面群组(Group of Pictures,GOP):由一张 I 画面及数张 P 及 B 画面所组成。在MPEG-2中,画面群组的总长及P画面张数是可以动态调整的。

6. 视讯序列(Video Sequence):由数个画面或画面群组所组成,然而一部影片可以只由一个视讯序列组成,也可以由数个视讯序列所组成。

MPEG-2定义了三种画面压缩模式,I画面、P画面、B画面:

I画面(Intra Coded Pictures):

当大区块仅使用本身的画面资料进行空间的冗馀去除,并没有参考其他画面的资料,我们称为Intra模式大区块(Intra Mode Macro-block)。在I画面中,所有的大区块皆为Intra模式大区块。I画面可以做为视讯资料流中的索引点,也是提供随机存取能力的主要来源。I画面通常在视讯序列或画面群组的第一张,解码时I画面可独立解码,并做为P及B画面的参考影像的来源。由于不须参考其他画面,因此无法得到消除时间上冗馀的好处,因此压缩率较差。

P画面(Predictive Coded Pictures):

在编码及解码时,会使用参考画面(Reference Picture),这些参考画面可为该画面前面最近的I画面或P画面。编码时,在P画面中的大区块,若能在参考画面上找到相对应的大区块,则用动态补偿方式做预测编码(Predictive Coding);若找不到,则以Intra模式做编码。由于加入消除时间上冗馀的技术,因此其编码效率较高。

B画面(Bi-directionally Predicted Pictures):

在解码及编码时,会使用到前面及后面两个方向参考画面的资料。如同 P 画面一样,编码时,在B画面中的大区块,若能在参考画面上找到相对应的大区块,则用动态补偿方式做双向预测编码(Bi-directionally Predictive Coding);若找不到,则以Intra模式做编码。B画面拥有最高的编码效率,然画质最差,故本身不再做为其他预测编码用。

3.以资料本身冗馀为基础的压缩

MPEG-2在以视讯的特性做了空间及时间上的冗馀压缩后,还会再以资料本身的冗馀再做压缩。在量化完成后,MPEG-2舍弃了MPEG-1所采用的Zigzag Scan而改采Alternate Scan来将量化后二维的离散馀弦系数串接成一维的数列,以锯齿状路线处理8x8的块中的64个系数,尽量形成最大长度的连续零值,以提高压缩效率。接着将串接起来的资料以游程编码(Run Length Coding,RLC)及可变长度编码(Variable Length Coding,VLC)处理。

游程编码的概念就是,如果有一连串相同的值,则我们可以以标示该值及其持续长度来表示。例如有十个"A"构成一个字串,则我们可以将"AAAAAAAAAA"之描述成"A" x 10,这样就可以减少许多相同的资料存放空间。

可变长度编码基本概念则是:越常出现的样版,就以越短的位元数来表示之。因此可变长度编码是这样一个过程,找出资料中所有的资料样版及其出现频率,接着以较少的位元来描述较常出现的样版,用较多的位元描述不常出现的样版。Huffman Coding就是其中一种基本的演算法。基本上游程编码及可变长度编码都是非破坏性压缩。

4.可变位元率

最后要提到MPEG-2不同于MPEG-1的其中一样很大的差异,就是MPEG-2除了固定位元率(Constant Bit Rate,CBR)之外,另外提供了可变位元率(Variable Bit Rate)来调节资料速率。位元率的控制往往决定了离散馀弦系数量化的的结果。视讯的资料经过压缩后并非皆有相同的资料流量。一般说来,画面变动越大,压缩比越小,资料流频宽需求越大;反之,画面变动越小,压缩比越大,资料流频宽需求就越小。各画面间压缩后的值并不是固定的,固定的资料速率只是个理想,实际状况下一昧的要求固定位元率不是牺牲了影像品质(以较低流量画面为基准,较大流量的画面强制做过多的压缩)就是牺牲了容量(以较大流量画面为基准,较低流量的画面强制做过低的压缩)。一般说来,可变位元率对于提供稳定的影像品质是个更好的选择,因为其能够根据动态画面的复杂程度,适时改变数据传输率获得最适且一致的编码效果。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有