I/P/B帧
当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,多个P帧、B帧。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和少量的(3、4个)P帧。(MPEG2、H264和H265都一样)
MPEG2中: (MPEG2、H264和H265的GOP概念不一样)
1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;(MPEG2、H264和H265都一样)
3.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧; (但是在H264和H265里,不止一个I帧)
P帧:前向预测编码帧。P帧表示的是这一帧跟之前的几个关键帧(或P帧)的差别(H.264是多帧预测,MPEG2应该是单帧预测)它根据本帧与邻近的前一帧或几帧的不同点来压缩本帧数据。见百度百科
解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
由于是差值传送,P帧的压缩比较高
.由于P帧是参考帧,它可能造成解码错误的扩散
B帧以前面的I或P帧和后面的P帧为参考帧(它根据邻近的前几帧、本帧以及后几帧数据的不同点来压缩本帧,可以是好几帧)
B帧不是参考帧,不会造成解码错误的扩散
I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。
h264的压缩方法:
在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧(或者P帧)生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。
1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。
2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。
一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。
对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。
再次总结:在H.264中,I帧分为普通I帧和IDR帧(特殊I帧); 在H.264中,是IDR帧阻断了误差的积累, IDR帧后面的帧都不能参考该IDR帧前面的帧, 普通的I帧并没有阻断误差的积累,普通I帧后面的帧可以参考该I帧之前的帧. 在MPEG2中,I帧阻断了误差的积累,I帧后面的帧不可以参考该I帧之前的帧. 从这个意义上说,H.264中的IDR帧颇有MPEG2中I帧的味道.

浙公网安备 33010602011771号