MPEG-1 详解
- MPEG-1 详解
- 特点
- MPEG-1 中的运动补偿与 B 帧的引入
- MPEG-1 vs H.261
- MPEG-1 视频数据流的结构
- MPEG-1 视频压缩模式
- MPEG-1 视频解码框图
- MPEG-1 音频编码模式
- MPEG-1 audio layer 1
- MPEG-1 audio layer 2
- MPEG-1 audio layer 3
- MPEG-1 音频编码框图
- MPEG-1 音频解码框图
- 参考
MPEG-1 详解
MPEG是活动图像组(Moving Picture Exports Group)的缩写。
MPEG-1是MPEG组织制定的第一个视频和音频有损压缩标准。视频压缩算法于1990年定义完成。1992年底,MPEG-1正式被批准成为国际标准。
MPEG-1是为CD光盘介质定制的视频和音频压缩格式,支持的视频格式有mpg、mlv、mpe以及mpeg等等。一张70分钟的CD光盘传输速率大约在1.4Mbps。
MPEG-1采用了块方式的运动补偿、离散余弦变换(DCT)、量化等技术,并为1.2Mbps传输速率进行了优化。MPEG-1随后被Video CD采用作为核心技术。
VCD采用的就是MPEG-1的标准,该标准是一个面向家庭电视质量级的视频、音频压缩标准。VCD的分辨率只有约352×240,并使用固定的比特率(1.15Mbps),因此在播放快速动作的视频时,由于数据量不足,令压缩时宏区块无法全面调整,结果使视频画面出现模糊的方块。因此MPEG-1的输出质量大约和传统录像机VCR相当,这也许是Video CD在发达国家未获成功的原因。
MPEG-1音频分三代,其中最著名的第三代协议被称为MPEG-1 Layer 3,简称MP3,目前已经成为广泛流传的音频压缩技术。MPEG-1音频技术在每一代之间,在保留相同的输出质量之外,压缩率都比上一代高。第一代协议MP1被应用在LD作为记录数字音频以及飞利浦公司的DGC上;而第二代协议MP2后来被应用于欧洲版的DVD音频层之一。
特点
随机访问,灵活的帧率、可变的图像尺寸、定义了I-帧、P-帧和B-帧 、运动补偿可跨越多个帧 、半像素精度的运动向量 、量化矩阵、GOF结构 、slice结构 、技术细节、输入视频格式。
MPEG-1 中的运动补偿与 B 帧的引入
与H.261、H.263相同,MPEG-1也采用混合编码,结合了运动补偿策略与变换编码策略进行预测残差估计。
在H.261中,每个P帧都通过运动补偿进行编码,P帧的每个宏块都会从参考的已编码I帧或P帧中找到一个参考宏块,并对宏块差值进行编码,这个过程被称为预测,宏块差值被称为预测残差,这个残差会经历DCT、量化和熵编码。H.261中的P帧只能参考它之前的帧,这被称为前向预测。在实际中,可能在P帧之前的帧中根本找不到一个可以很好的与目标宏块匹配的参考宏块,但可能在P帧之后的某个帧中也许会存在一个比较匹配的参考宏块,这种情况下就需要引入后向预测了,即用P帧之后的某帧来对当前帧进行预测,用未来的帧来预测当前帧,我们在下一段中将详细讲解这种机制在MPEG中的实现。
MPEG引入了除I帧、P帧之外的第三种帧——B帧,即双向预测帧,其中的字母B表示单词“bidirectional”。
B帧的工作方式如上图所示,目标帧过去的帧和未来的帧都会与目标帧的宏块进行运动向量搜索。如果在过去帧和未来帧中都找到了可接受的运动向量,则两个运动向量都会被记录,并在差分编码时,过去帧中的宏块和未来帧中的宏块会先进行一个平均(在上图中用一个百分号%表示),然后再与目标宏块取差,这时既有前向预测也有后向预测;如果只在一个方向的参考帧中找到了误差在可接受范围内的运动向量,则只会对一个方向的参考宏块进行编码,即只会发生前向预测或后向预测中的一种。
一个MPEG视频的帧序列模式通常是固定的,在MPEG的文件头中有写入规定的字段。MPEG中用 M 表示一个P帧和它之前的最近一个I帧或P帧的间隔距离,用 N 表示两个最近的I帧之间的间隔距离。例如当 M=3, N=9 时,帧模式就是:I B B P B B P B B I B B P B B P B B I … 而当 M=1 时,就表示没有用到任何B帧。
由于在MPEG中引入了B帧,而B帧的解码是依赖于它之后的帧的,这就导致MPEG视频帧的编码顺序与显示顺序不同。并且在解析B帧时,必须要等它后面的参考帧解析结束才能解析当前帧,这就可能带来延迟,尤其是在不太稳定的网络的流媒体传输中。
MPEG-1 vs H.261
除了B帧的引入,MPEG-1还在H.261的基础上做了以下升级:
-
支持更多种类的源视频格式。
-
引入了分片(slice)的概念。slice比GOB更加灵活,可以更好地控制视频的比特率。并且每一个slice都有一个唯一的slice_start_code,可以用于错误恢复。因为一个slice的解码不依赖于其他的变长编码,在流媒体传输中如果一个slice的某些比特发生了错误,并不会影响之后slice的解析,并且通过slice_start_code可以实现帧时间的定位。
-
MPEG-1引入了量化表。在H.261中,DCT之后的量化操作是通过指定量化步长实现的,一个频域矩阵中所有的DCT交流系数都采用同一个步长进行量化,比较粗糙。MPEG-1中参考了JPEG的做法,引入了量化表对DCT之后的系数矩阵进行量化。并且量化表还可以进行放缩,用于控制压缩质量与最终的比特率。值得注意的是,对于帧内编码,量化表中的元素两两不同;而对于帧间编码,即预测残差矩阵的量化,其使用的量化表中只有一个数值,即对于每个位置的DCT系数都采用同一个量化步长。帧内编码和帧间编码所使用的量化表如下图所示:
-
运动向量精度的提升。像H.263一样,MPEG也允许0.5像素的精度出现。
-
更大的运动向量搜索窗口。H.261的运动向量搜索范围为[-15, 15],而MPEG允许的运动向量搜索范围高达-512, 511.5或-1024, 1023。实际上,由于图像分辨率的限制,特别高的运动向量搜索范围一般在实际中不会使用。
-
允许比特流的随机访问。MPEG在封装格式中引入了GOP层,GOP是按视频的时间编码的,每个GOP都以一个I帧开头,因此一个GOP的解码不依赖于其他GOP。借助GOP,解码器可以从视频的比特流中任意选一个位置,找到那个位置对应的GOP,并从那个GOP开始解析,从而实现比特流的随机访问(这对应到我们日常看视频就是在拖拽进度条这样一个操作)。
MPEG-1 视频数据流的结构
如上图所示,MPEG-1的码流被分为6层,我们逐一来看每一层的内容。
-
Sequence layer:这一层以一个sequence header开头,结尾有一个sequence end code,中间是若干个GOP。在sequence header中包含了有关图像的一些信息,如水平尺寸(horizontal_size)、垂直尺寸(vertical_size)、像素高宽比(pixel_aspect_ratio)、帧率(frame_rate)、比特率(bit_rate)、缓冲区大小(buffer_size)、量化矩阵(quantization_matrix)等等。同时,在GOP与GOP之间可能也有optional sequence header,用于表示某些参数的变化。
-
Group of Pictures (GOPs) layer:一个GOP以一个GOP header开头,后面是若干个图像,其中必须要有一个图像是I帧。在GOP header中包含有时间信息,标志了这个GOP距离视频序列开始的时间(时、分、秒)。
-
Picture layer:这里的picture指的其实就是帧图像,就像有三种帧(I帧、P帧、B帧)一样,有三种picture:I-picture、P-picture、B-picture。一个Picture在picture header之后会包含若干个slice。
-
Slice layer:slice的主要作用是为了比特率控制以及错误恢复,每个slice的长度和位置都在slice header中记录。一个slice中在slice header之后就是若干个宏块macroblock。
-
Macroblock layer:一个宏块(16*16)包含了4个Y block(8*8)、1个Cb block(8*8)、1个Cr block(8*8)。
-
Block layer:每个block中是编码后的帧信息,在结尾有block end。如果对应的block是帧内编码,则block中包含通过DPCM编码的直流系数、以及通过VLC编码的交流系数;如果block是帧间编码,则直流系数和交流系数都是VLC编码。
视像数据结构:
MPEG-1 视频压缩模式
为了保证视频质量不变,而又能够获得比较大的压缩比。MPEG专家组把图像(picture)分为了三种类型:I帧、P帧、B帧,然后采用不同的算法分别对他们进行压缩。
我们展示一下对I帧进行压缩编码的算法图,这也是使用和JPEG类似的压缩算法,来减少空间冗余数据的。
可以看到图中是将I帧图像数据,以宏块为单位,取出8X8的图块,然后再进行处理的。在MPEG-1中,I帧、P帧、B帧的压缩比,通常为下表:
可以看到,压缩后的I帧的数据量最大,而B帧的数据量最小。并且平均压缩比为27:1,这也就是使用MPEG-1标准,能获得的压缩比。
MPEG1的视频压缩算法对运动不激烈的视频信号可获得较好的图像质量,但当运动激烈时,图像会产生马赛克现象。
MPEG-1 视频解码框图
MPEG-1 音频编码模式
MPEG-1Audio具体规定了用于数字存储媒介的高质量音频的编码与解码表示,适用于32kHz、44.1kHz和48kHz取样率。编码系统可以工作在单声道、双声道、立体声和联合立体声四个方式,每通道的数据率为128kb/s。
该标准定义了三个层次(Layer)的编码算法,允许用户根据不同的应用需要采用不同层次的编码系统。
-
层1(Layer 1):编码简单,用于数字盒式录音磁带。
-
层2(Layer 2):算法复杂度中等,用于数字音频广播(DAB)和VCD等。
-
层3(Layer 3):编码复杂,用于互联网上的高质量声音的传输,如MP3音乐,可以压缩10倍。
从层次1到层次3,层次越高压缩性能越好,音质性能逐渐增加,最终能提供极高品质的音频,同时编码/解码器也越复杂。用户可在复杂性和压缩质量之间权衡选择。第1、2层编码方式(简称为MP1、MP2)为子带取样,第3层编码方式(简称为MP3)为变换后的子带取样。
不同层次的主要性能指标下表所示。
MPEG-1 audio layer 1
所需频宽:384kbps。
压缩率4:1。
特性:编码简单,用于数字盒式录音磁带,2声道,VCD中使用的音频压缩方案就是MPEG-1层Ⅰ。
优点:压缩方式相对时域压缩技术而言要复杂得多,同时编码效率、声音质量也大幅提高,编码延时相应增加。可以达到“完全透明”的声音质量(EBU音质标准)。
缺点:频宽要求较高。
MPEG-1 audio layer 2
所需频宽:256~192kbps。
压缩率:8:1~6:1。
特性:算法复杂度中等,用于数字音频广播(DAB)和VCD等,2声道,而MUSICAM(MP2)由于其适当的复杂程度和优秀的声音质量,在数字演播室、DAB、DVB等数字节目的制作、交换、存储、传送中得到广泛应用。
MPEG-1 audio layer 3
所需频宽:128~112kbps。
压缩率12:1~10:1。
特性:MP3是在综合MUSICAM和ASPEC的优点的基础上提出的混合压缩技术,在当时的技术条件下,MP3的复杂度显得相对较高,编码不利于实时,但由于MP3在低码率条件下高水准的声音质量,使得它成为软解压及网络广播的宠儿。
优点:压缩比高,适合用于互联网上的传播。
缺点:MP3在128K Bit rate及以下时,会出现明显的高频丢失。
MPEG-1 音频编码框图
下图给出了编码器的基本框图,编码器由四个功能单元组成:时-频映射网络,心理声学模块,量化器和编码器,以及帧-封装单元。
时-频映射网络的功能是将输人音频信号分解成编码使用的若干子带。映射分为三层,分别标为Ⅰ、Ⅱ和Ⅲ,它们的复杂度、时延和主观感觉性能依次递增。l层的算法利用一个带通滤波器集将音频信号分为32个带宽恒定的子带,I层和Ⅲ层中也采用这样的滤波器集。根据前面对不等间隔排列的临界频带的讨论,这种滤波器集的设计应兼顾计算效率和感觉性能。层的算法只在Ⅰ层算法上进行了简单改进,将数据编码为更大的群,从而提高了压缩性能。Ⅲ层的算法则更为周详,因为其设计目标是得到更接近于临界频带划分的频率分解。
心理声学模块是编码器的核心部分。其功能是对输人音频信号的频谐内容进行分析,然后计算出这三层中每层每个子带的信号-屏蔽比。
量化器-编码器根据心理声学模块输出的信息决定如何将可用比特分配给子带信号以进行量化。动态分配比特的目的是使量化噪声的可听性降至最小。
帧-封装单元将量化后的音频样值集合为编码比特流。
根据上述分析,编码器可进一步细化为上图所示结构,它由红蓝两条线构成。
红线是输入的PCM码流经过多相滤波器组分成32个子带信号,经过块形成后,对每个子带数据进行线性量化,对部分量化级别采用颗粒优化以增大压缩比,最后装帧输出。
蓝线是对输入的PCM码流进行FFT变换,经过心理声学模型去除信号中被掩蔽的部分,提取出比例因子后进行动态比特分配:对人耳听觉敏感的低频成分分配较多比特,对高频噪声分配较少的比特,以增大压缩比。比例因子经过选择后,数据编码装帧输出。
MPEG-1 音频解码框图
下图所示为译码器结构,译码器由三个功能单元组成:帧-解封单元,频率样值重构网络以及频-时映射网络,通过对比可以发现,只有编码器必须采用心理声学模块。
因为译码器完成的是编码器所进行的信号处理操作的逆过程,即将收到的编码比特流转换为时域音频信号,原理类似,此处不再赘述。
参考
- https://news.eda365.com/tech/jsbaike/120011713611313.html
- https://zhuanlan.zhihu.com/p/68222970
- https://upimg.baike.so.com/doc/7125021-7348317.html
- https://baike.baidu.com/item/MPEG-1/214216
- https://zhuanlan.zhihu.com/p/577377155
- https://blog.csdn.net/houxiaoni01/article/details/99830240
- https://blog.csdn.net/cc289123557/article/details/133966121
- https://blog.csdn.net/m0_70886513/article/details/135294745
- https://blog.csdn.net/qq_52127343/article/details/128223620