zoukankan      html  css  js  c++  java
  • 音视频基础知识之视频 I/P/B 帧

    MPEG-1、MPEG-2 和 MPEG-4 都是 ISO/IEC 的活动图像专家组(MPEG, Moving Picture Experts Group)制定的视音频编码标准。

    I帧、P帧、B帧的概念最早是由 MPEG-1 标准引入的编码帧中的概念。

    四种编码帧指的是I帧、P帧、B帧、D帧。其中D帧为仅含 DCT 的直流分量的帧,用它可以提供一种简单而具有一定质量的画面质量,如用于快进模式等。


    图1 不同帧类型示意

    视频压缩中,每帧代表一幅静止的图像,而在进行实际压缩时会采取各种算法以减少数据量,其中IPB帧就是最常见的一种。

    • I 帧是帧内编码帧(Intra-coded Frame),完全由图像包含的内容所表示,也即是我们常说的关键帧(keyframe)。

      与 P 帧 和 B 帧相比其压缩率最低,但解码时不需要其他视频帧的信息。也就是说,I帧编码的是一张完整的图像,就像JPG或者BMP文件那样。其可以看作一个图像经过压缩后的产物,I帧压缩可以得到6:1的压缩比而不会产生可察觉的模糊现象。
      P 帧和 B 帧编码的只是图像信息的一部分,即帧与帧相比发生变化的部分信息。

    • P 帧是帧间预测帧(Predicted Frame),只编码与之前的帧相比发生变化的部分的信息,也称为增量帧(Delta Frame)。

      对 P 帧的解码需要前面 I 帧或 P 帧的信息,可能是前一帧,也可能是非直接相邻的之前的帧。由于可以使用先前帧中的数据进行解压缩,压缩率比I帧要高。
      例如,在汽车经过固定背景时,只需对汽车的运动进行编码。编码器不需要在P帧中存储不变的背景像素,从而节省了空间。

    • B 帧是双向预测帧(Bidirectional predicted Frame),需要来自之前和之后 I 帧和 P 帧的信息。

      B帧可以同时使用前向帧和后续帧作为数据参考,通过编码当前帧与前后帧之间的差异来节省更多空间,以最大程度地压缩数据。

    从解码的角度来看,I帧资深可以通过视频解压算法解压成一张单独的完整视频画面,所以I帧去除的是视频帧在空间维度上的冗余信息。P帧需要参考其前面的一个I帧或P帧、B帧需要参考其前一个I帧或P帧及其后的一个P帧来解码成一张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间维度上的冗余信息。

    H264 的概念中有一个帧称为IDR帧(Instantaneous Decoding Refresh Frame)。因为 H264 采用了多帧预测,所以I帧之后的P帧有可能会参考I帧之前的帧,使得在随机访问时不能以找到I帧作为参考条件,因为即使找到了I帧,I帧之后的帧还是有可能解析不出来。而IDR帧就是一种特殊的I帧,这一阵之后的所有参考帧只会参考到这个IDR帧,而不会再参考前面的帧。在解码器中,一旦收到一个IDR帧,就会立即清理参考帧缓冲区,并将IDR帧作为被参考的帧。

    (全文完)


    参考资料

    [1] Moving Picture Experts Group https://wiki.multimedia.cx/index.php/Moving_Picture_Experts_Group

    [2] MPEG-1 Video https://mpeg.chiariglione.org/standards/mpeg-1/video

    [3] Frame Types https://wiki.multimedia.cx/index.php/Frame_Types

    [4] MPEG Video https://users.cs.cf.ac.uk/Dave.Marshall/Multimedia/node256.html#SECTION04291000000000000000

    [5] Video Compression https://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV0506/s0561282.pdf

    [6] I-P-B Frames https://nonuruzun.medium.com/i-p-b-frames-b6782bcd1460

    本文作者 :phillee
    发表日期 :2021年1月26日
    本文链接https://www.cnblogs.com/phillee/p/14332346.html
    版权声明 :自由转载-非商用-非衍生-保持署名(创意共享3.0许可协议/CC BY-NC-SA 3.0)。转载请注明出处!
    限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

  • 相关阅读:
    ubuntu 安装(install) pwntcha[一个做"验证码识别"的开源程序]
    MySQL 二进制日志过滤
    MySQL 分区表各个分区的行数
    MySQL 表分区A
    MySQL show binglog event in 'log_name'
    MySQL、You are using safe update mode
    SQL 设计心得、逗号分隔列表
    MYSQL @、@@、@x
    SQL Server
    建设供内网访问的网站
  • 原文地址:https://www.cnblogs.com/phillee/p/14332346.html
Copyright © 2011-2022 走看看