1、宏块匹配像素精度: MPEG2中,运动估计的精度是1/2的像素,通过线性插值实现(可能有简单修正); H264和MPEG4 都可以支持1/4像素的精度
2、参考帧的数量:MPEG2,MPEG4的P帧只能有一帧参考帧,B帧可以有两帧参考帧 ;H.264可以最多有15帧参考帧,一般情况下选择3-5帧作为参考帧。
3、滤波器的结构:插值滤波器不同,在MPEG4里面是简单的线性插值,而H264里面是5抽头的滤波器;MPEG2没有环内deblocking工具,MPEG4有deblocking工具,但是属于postprocessing; H264有环内deblocking工具 。
4、I帧的编码: MPEG2没有INTRA预测,但是有DC参数预测;MPEG4没有INTRA预测,支持DC预测,并且支持两个AC参数的预测。H264支持INTRA预测,4*4共有9种模式。
5、匹配宏块大小的区别:MPEG2最小匹配块尺寸为8*8,MPEG4同样也为8*8,H.264最小可以到4*4尺寸。
6、DCT变换的不同:MPEG系列为8*8的DCT变换,逆变换时会出现漂移现象;H264为整数4*4的DCT变换,而且直流系数经过HADMARD变换之后做的DCT变换,整数DCT变换可以防止逆变换时出现漂移现象。
7、量化之后的编码:MPEG2/MPEG4则都是基于huffman,并且头部的语法相对比较简单,很少使用变长码; H264提供基于上下文的CAVLC和CABAC 。
8、 编码之后的结构:MPEG2/MPEG4都是分层结构;H264则是提供NAL单层结构,提供参数集合的形式。
9、量化参数的区别:MPEG4提供31个量化参数(量化模式:常量化,系统默认量化矩阵,自定义量化矩阵),H264提供51个量化参数(量化模式:常量化,量化矩阵,自定义有否还不确定);
关于视频编码I P B帧存储
假设从摄像头采集,采集顺序 1 2 3 4 5 ,最终编码结果是:1编码成I帧,2,3,4编码成B帧,5编码成P帧。
让我们来看下编码,存储以及解码,显示的具体步骤:
视频帧采集后,经过编码器encode以及mux成容器格式,编码和存储过程如下:
编码:
1)先编码 1,编成I帧
2)2,3,4准备编码成b帧,先缓存下来,记录下采集的时间点,后续作为pts基准
3)再编码 5,编成P帧,(注意5虽然先编码,dts相对2,3,4靠前,但是它的采集时间比2,3,4要晚,所以pts大于2,3,4)
4)编码 2, 3, 4 ,编成B帧
编码后立即经过mux写文件,所以存储顺序和编码顺序是一致的,编码后的顺序为(dts顺序)
1 5 2 3 4
I P B B B
视频保存下来后,如果通过player播放,需要解码和渲染,解码和显示的过程如下:
解码:(按照dts顺序)
1 5(参考1) 2(参考1,5) 3(参考1,5) 4(参考1,5)
解码后重新排序(按照pts),显示
1 2 3 4 5