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 下的率失真性能对照。






  • 相关阅读:
    maven 历史版本下载地址
    eclipse 热部署
    在线代码练习
    Intellij热部署插件JRebel
    模拟数据生成器
    电脑读取U盘总提示格式化
    变形金刚
    slamdunk正在做菜
    丧心病狂的计数
    小明在工作
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3998164.html
Copyright © 2011-2022 走看看