zoukankan      html  css  js  c++  java
  • 什么是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 下的率失真性能对照。






  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3998164.html
Copyright © 2011-2022 走看看