第一部分说明了如何根据第二部分(视频)以及第三部分(音频)的规定,对音频和视频进行复合编码。第四部分说明了检验解码器或编码器的输出比特流符合前三部分规定的过程。第五部分是用C语言实现的编码和解码器
显示的顺序: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
第一步
:从缓存中取出重构的前一帧图像作为当前帧的参考帧
第二步
:计算当前帧中的每一个16*16像素宏块和缓存中的参考帧中的宏块的最佳匹配块,即进行运动估计计算。用运动矢量表示两个宏块之间的位移。例如,运动矢量 = (-10,3),则在当前帧的宏块向左移动10个像素,向下移动3个像素,就可以在参考帧中找到最佳匹配的宏块
第三步
:通过参考帧的最佳匹配块的运动补偿,也就是对齐,得到当前帧的最相似图像(运动补偿参考帧)
第四步
:当前帧和运动补偿参考帧进行帧间预测,也就是差值运算(相应的像素进行减法运算)得到运动补偿的帧差图像
第五步
:对帧差图像进行
DCT
变换和量化,变换和量化的原理可参考
JPEG
压缩标准
第六步
:量化后的系数和运动矢量进行熵编码和传输,注意系数在进行熵编码之前需要进行
Zigzag
扫描和游程编码,基本原理可参考
JPEG
压缩算法
第七步
:量化后的系数同时被解码,得到的帧差图像和运动补偿参考帧进行相加运算,从而得到一个新的放在缓存中的参考帧,需要注意的是,这个参考帧不是原始的输入的无损图像,这么做的原因是解码端只能得到经过量化,反量化的有损图像,而编码端和解码端必须采用同样的参考帧,因此编码编码端只能采用有损的图像作为参考帧