什么是I帧,P帧,B帧

视频压缩中,每帧代表一幅精巧的图像。而在实际压缩时,会採取各种算法降低数据的容量,当中IPB就是最常见的。
  
简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。
 
 


I帧表示关键帧,你能够理解为这一帧画面的完整保留;解码时仅仅须要本帧数据就能够完毕(由于包括完整画面)


P帧表示的是这一帧跟之前的一个关键帧(或P帧)的区别,解码时须要用之前缓存的画面叠加上本帧定义的区别,生成终于画面。(也就是区别帧,P帧没有完整画面数据,仅仅有与前一帧的画面区别的数据)


B帧是双向区别帧,也就是B帧记录的是本帧与前后帧的区别(详细比較复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得终于的画面。B帧压缩率高,可是解码时CPU会比較累~。


从上面的解释看,我们知道I和P的解码算法比較简单,资源占用也比較少,I仅仅要自己完毕即可了,P呢,也仅仅须要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,假设视频流仅仅有I和P,解码器能够无论后面的数据,边读边解码,线性前进,大家非常舒服。
但网络上的电影非常多都採用了B帧,由于B帧记录的是前后帧的区别,比P帧能节约很多其它的空间,但这样一来,文件小了,解码器就麻烦了,由于在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),并且,B帧不能简单地丢掉,由于B帧事实上也包括了画面信息,假设简单丢掉,并用之前的画面简单反复,就会造成画面卡(事实上就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。
 
一般平均来说,I的压缩率是7(跟JPG差点儿相同),P是20,B能够达到50,可见使用B帧能节省大量空间,节省出来的空间能够用来保存多一些I帧,这样在同样码率下,能够提供更好的画质。


以下举例说明:



在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8个视点,T0~T12 为 GOP的 13个时刻。每一个 GOP包括帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包括94 个 B帧。B 帧占一个 GOP 总帧数的 90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。下图測试序列 Race1 在不同 GOP 下的率失真性能对照。






posted @ 2014-09-28 13:56  lcchuguo  阅读(3152)  评论(0编辑  收藏  举报