国际电信联盟ITU
-T与国际标准化组织ISO/国际电工委员会IEC
是制定视频编码标准的两大国际组织
其中MPEG
是运动图像专家组(Moving Picture Experts Group
)的缩写,于1988年成立,是为数字视频/音频制定压缩标准的专家组。
MPEG
的核心内容主要包括MPEG
视频、MPEG
音频和MPEG
系统三个部分,MP3
音频文件就是MPEG
音频的一个典型应用,而VCD
、SVCD
、DVD
则是全面采用MPEG
技术的消费类电子产品
MPEG-1
视频压缩标准
1993年制定的MPEG-1
标准是MPEG
系列最早的标准,是针对 1.5Mbit/s
速率的数字存储媒体运动图像及其伴音编码制定的国际标准
MPEG-1
标准包含了五个部分
第一部分说明了如何根据第二部分(视频)以及第三部分(音频)的规定,对音频和视频进行复合编码。第四部分说明了检验解码器或编码器的输出比特流符合前三部分规定的过程。第五部分是用C语言实现的编码和解码器
图像可分为四种类型,分别是I帧、P帧、B帧、D帧
MPEG-1
中将视频中的图像分为以下几种类型
- I帧:帧内编码图像,这类图像不进行帧间预测,不参考其他图像帧而只利用自己的图像信息进行编码
- P帧:前向帧间预测编码图像。此类图像帧利用一个之前的I帧或者P帧作为参考,进行帧间预测编码,它通常还用于后续P帧或者B帧图像编码时的帧间预测参考
- B帧:双向帧间预测编码图像。此类图像即利用之前的图像帧(I帧或P帧),也利用之后的图像帧(P帧)。B帧不能作为预测帧的参考
注意:B帧将会导致图像列的编码顺序与显示顺序不一致,原因是B帧可能需要后续的P帧作为参考帧,所以这个后续的参考帧P帧需要先被编码,后续的B帧才能被顺利编码
/*
显示的顺序:1 2 3 4 5 6 7 8
I B B P B P B I
传输的顺序:1 4 2 3 6 5 8 7
I P B B P B I B
*/
视频的码流结构
- 序列(
sequence
):序列层定义图像的大小,缓冲区的大小和其他一些静态参数 - 图像组(
GOP,Group of Pictures
):图像组是序列中一个连续的图像集,用来辅助随机存储。GOP
中第一个图像必须为I帧,这样就保证了GOP
不需要参考之前的图像,可以独立解码(这也就是为什么播放器可以快进和后退播放) - 图像(
Picture
):图像层定义图像类型(I帧,P帧或B帧) - 片(
Slice
):片由一组连续的宏块组成,片是重同步单元,也可以独立解码 - 宏块(
Macroblock
):宏块是运动估计和运动补偿单元,有一个16 * 16 亮度块和相应的两个8 * 8的色度块组成 - 块(
Block
):变换单元,一个8 * 8的像素集合
几点说明:
-
I帧图像是利用图像的空间相关性进行压缩,不参照任何过去的或者将来的其他参考帧,其压缩编码采用类似于
JPEG
图像压缩算法。由于无法去除时间冗余,I帧图像压缩率与P帧、B帧相比不高
-
P帧图像是参考过去的I帧图像或者P帧图像用帧间预测和运动估计技术进行压缩,由于既可以去除空间冗余也可以去除时间冗余,所以P帧的压缩率较高,由于P帧的编码流程与
JPEG
差异较大,所以接下来重点分析P帧的压缩编码流程
P帧的整个编码流程
第一步:从缓存中取出重构的前一帧图像作为当前帧的参考帧
第二步:计算当前帧中的每一个16*16像素宏块和缓存中的参考帧中的宏块的最佳匹配块,即进行运动估计计算。用运动矢量表示两个宏块之间的位移。例如,运动矢量 = (-10,3),则在当前帧的宏块向左移动10个像素,向下移动3个像素,就可以在参考帧中找到最佳匹配的宏块
第三步:通过参考帧的最佳匹配块的运动补偿,也就是对齐,得到当前帧的最相似图像(运动补偿参考帧)
第四步:当前帧和运动补偿参考帧进行帧间预测,也就是差值运算(相应的像素进行减法运算)得到运动补偿的帧差图像
第五步:对帧差图像进行DCT
变换和量化,变换和量化的原理可参考 JPEG
压缩标准
第六步:量化后的系数和运动矢量进行熵编码和传输,注意系数在进行熵编码之前需要进行 Zigzag
扫描和游程编码,基本原理可参考 JPEG
压缩算法
第七步:量化后的系数同时被解码,得到的帧差图像和运动补偿参考帧进行相加运算,从而得到一个新的放在缓存中的参考帧,需要注意的是,这个参考帧不是原始的输入的无损图像,这么做的原因是解码端只能得到经过量化,反量化的有损图像,而编码端和解码端必须采用同样的参考帧,因此编码编码端只能采用有损的图像作为参考帧
B帧的编码:
- B帧图像在预测时,既可以使用前向预测方式,也可以使用后向预测方式,或者使用双向预测后去平均方式,取决于采用哪一种方式下表示该宏块所需的比特数最少。使用双向预测后,可以使那些在前一帧中预测不到的内容很好的在后一帧中预测的大。B帧的压缩效果最高,但不能作为其他帧预测的参考图像
- 与P帧一样,B帧的宏块也是既可以选择帧间编码也可以选择帧内编码,B帧图像帧内编码宏块的压缩流程跟I帧类似,帧间编码宏块的压缩流程与P帧类似,只是预测方式不同
关于量化步长的选择
量化步长越大,清晰度和码率就越低;反之,清晰度和码率就越高
- 平时我们在视频网站上看在线视频,会经常看到视频播放器支持高清、表情、流畅、极速等多种选项,从高清到技术视频越来越模糊但对带宽的要求也越来越低
- 其实高清、极速、流畅、极速等选项对应的就是不同的量化步长压缩得到的视频,从高清到极速量化步长逐步变大,清晰度和码率也就逐步降低
- 视频压缩中相邻帧之间的量化步长不允许突变,只能在一定的范围内渐变,这是为了避免相邻帧的清晰度有明显的变化,从而导致人眼的不适
MPEG-2
标准
MPEG-2
标准是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定,编码码率为每秒3Mb~100Mb
说明:
MPEG-2
并不是MPEG-1
的简单升级,MPEG-2
在系统和传输方面作出了更加详细的规定和进一步完善。MPEG-2
特别适用于广播级的数字电视的编码和传送MPEG-3
是ISO/IEC
最初为高清晰电视广播制定的编码和压缩标准,但由于MPEG-2
的出色的性能已能适用于HDTV
,因此HDTV
标准并未制定,我们通常所说的MP3
指的是应用于MPEG-1
的一项音频压缩技术标准,英文全称是MPEG-1 Audio Layer3
MPEG-4
标准
MPEG
组织于1999年2月正式公布了 MPEG-4
标准的第一版本,同年年底 MPEG-4
的第二版本也得到了确定,目前该标准多应用于因特网视频传输、流媒体应用等。
MPEG-4
标准与以前编码标注不同的显著差别在于它采用了基于对象的编码理念,即在编码时不再是将一幅图像分成固定大小的图像块,而是根据其内容分成若干在时间和空间上相互联系的音视频对象,分别编码后经过复用传输到接收端,然后再对不同的对象分别进行编解码,从而组合成所需要的视频和音频
H.261
标准
H.261
最初是针对在 ISDN
上实现电话会议(特别是面对面的可视电话和视频会议)而设计,制定时间是1990年,是 H.26X
系列最早的标准
H.261
标准已经采用了运动补偿帧间预测与分块DCT
相结合的混合编码框架,其具体的编码算法类似于MPEG
算法,但不能与后者兼容
H.263
标准
H.263
是国际电联 ITU-T
的一个标准草案,是为低码流通信而设计的,指定时间是1996年
H.263
的运动补偿使用半像素精度,而H.261
使用的是全像素精度- 1998年
ITU-T
推出的H.263+
是H.263
草案的第二版,它提供了12个新的可协商模式和其他特性,进一步提高了编码的性能 H.263
只有5种视频源格式,而H.263+
允许使用更多的源格式
H.264
标准
2001年, MPEG
同 ITU
的视频编码专家组 VCEG
再次组成联合视频编码专家组 JVT
,于 2003年5月
,VCEG
发布了 H.264
的压缩标准
- 在同等的质量的条件下,
H.264
的数据压缩比性能比DVD
系统中使用的MPEG-2
高2~3倍,比MPEG-4
高1.5~2倍,H.264
获得优越性能的代价是计算复杂度的大幅度增加,例如多模式运动估计、改进的帧间预测等,这些都显著提高了预测的精度,从而获得了比其他标准好得多的压缩性能
AVS
标准
AVS
是由我国自主制定的音视频编码技术标准,主要面向高清晰度视频、高密度光存储媒体等应用
- 在编码效率方面
AVS
与H.264
接近。而在达到与H.264
同样性能的情况下,AVS
的复杂度要比H.264
的复杂度低,其解码器是H.264
解码器复杂度的70%
H.265
标准
制定背景
- 数字视频分辨率从
720P
向1080P
甚至是4K * 2K、8K * 4K
的应用场景升级 - 数字视频的帧率也从 30帧/秒向60帧/秒、120帧/秒甚至是 240帧/秒的应用场景升级
2010年1月,ITU-T
视频编码专家组 VCEG(video Coding Experts Group)
和 ISO/IEC
运动图像专家组 MPEG(Moving Picture Experts Group)
成立联合组织,统一制定下一道编码标准 HEVC(Hight Efficiency Video Coding)
,也就是 H.265
- 在
H.265
中,将宏块的大小从H.264
的16*16扩展到了 64 * 64,以便于高分辨率视频的压缩。同时采用了更加灵活的编码单元、预测单元和变换单元来提高编码效率,与H.264
相比,H.265
仅需原来的一半带宽即可播放相同质量的视频。