I帧:帧内编码帧,I帧图像采用帧内编码方式,即只利用单帧图像内的空间相关性,不利用时间相关性,视频接收初始化时必须使用I帧作为基准图像。
P帧:采用从最近的前一个I帧或P帧进行运动估计所得出的编码图像,有效的去除了时间冗余。P帧内也可以包含帧内编码的部分, 即P帧中的每一个宏块可以选择帧间编码(使用运动估计)也可以选择帧内编码(即不用考虑运动估计,和I帧一样),一旦发生参考帧与当前帧的变化较大,编码器将对当前宏块直接编码,不再使用运动补偿。相关的宏块头信息会指明当前的编码方式。 注:P帧是从前一个帧进行运动估计所得出的编码图像,即残差宏块,编码器在对残差宏块编码以后, 还要重新对其解码,产生P帧的残差宏块解码P'对应的宏块,也就是将该宏块还原成未进行运动补偿的宏块(当然会与原始宏块有误差),并存起来作为下一个P1帧的参考宏块。 这种操作叫做“建立重构帧”。那么编码器在编码的同时为什么还要解码呢即建立重构帧???因为解码器解码的时候,比如解码当前P帧的下一帧P1,那么解码P1的时候就要用当前帧作为参考帧去还原解码P1,因为这时候P1的参考帧是解码器解码出来的帧P',P'帧肯定与最初编码时的P帧之间有误差(量化等操作的缘故)。因为P1的参考帧P'跟原始的P帧间有误差,那么编码的时候就不能用P帧做参考帧,要用P'做参考帧,所以在编码以后,再重新解码出P'作为下一帧P1的参考帧。 这样就保证了编码器和解码器使用相同的参考帧。
B帧:双向预测编码图像,B帧在编码时同时利用前面的和后面的图像作为参考帧进行运动估计。
在实际过程中可以根据应用需求,灵活安排上述3种类型的帧。