【音视频原理】视频帧的 I P B 帧概念

本文详细介绍了B帧(双向内插帧)的工作原理,包括其依赖关系、解码过程,以及画面组(GOP)的概念。讨论了不同类型的帧解码错误影响,并探讨了视频压缩算法如H.264、HEVC、MPEG、AVS、VP8和VP9在实际应用中的角色。
摘要由CSDN通过智能技术生成

一、B 帧 - 双向内插帧


1、B 帧简介

B 帧 全称 " 双向内插帧 ( Bi-directional Predicted Frames ) " , 采用 双向预测编码方式 , 也就是 B 帧 记录的是 本帧 B 帧 与 前后 I 帧 或 P 帧 的差别 ;

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

注意 : B 帧 需要依赖于其前的最近的一个 I 帧 或者 P 帧 及其后的最近的一个 P 帧 进行解码 , B 帧 不能 依赖与 B 帧 ;

  • B 帧 依赖的 前一帧 可以是 I 帧 或者 P 帧 ;
  • B 帧 依赖的 后一帧 肯定是 P 帧 , 不可能 是 I 帧 ;

要解码B帧 , 不仅要取得之前的缓存画面 , 还要解码之后的画面 , 通过 前后画面帧 与 本帧 共 3 帧的 数据叠加 取得最终的画面 ;

B 帧 压缩率高 , B 帧 的 压缩 与 解码 对计算机的性能要求较高 ;

2、B 帧解码案例

B 帧解码时 , 需要参考 前后 两帧 数据 ;

下面的 三帧 数据进行解码时 ,

首先 , 解码 I 帧关键帧 ,

然后 , 解码 P 帧 , 根据 I 帧 解码 P 帧 ,

最后 , 解码 B 帧 , 根据 I 帧 和 P 帧 解码 B 帧 ;

二、画面组 Group of Pictures 概念


1、画面组 Group of Pictures 概念

画面组 ( Group of Pictures ) 由 I 帧 / P 帧 / B 帧 组成 ;

  • I 帧是 " 内部编码帧 ( Intra Coded Frames ) " , 可以作为随机访问的参考点 , 并且可以被视为一个完整的图像 ; 画面组 的 第一帧 , 必须是 I 帧 ;一个画面组中 , 只有一个 I 帧 ;
  • P 帧是 " 前向预测帧 ( Predicted Frames ) " , 记录的是 相对于前一帧 的变化 ;
  • B 帧是 " 双向内插帧 ( Bi-directional Predicted Frames ) " , 记录的是 相对于前后帧 的差别 ;

画面组 ( GOP , Group of Pictures ) 的 长度 和 P 帧 / B 帧的数量 等参数 , 对视频压缩效率和图像质量有着重要影响。

画面组 ( GOP , Group of Pictures ) 长度越长 , P 帧 和 B 帧 的数量越多 ,

  • 视频压缩效率越高 ;
  • 图像质量越差 ;

在实际应用中需要 根据具体需求 和 场景 来选择合适的 GOP 参数 , 以达到最佳的 压缩效果 和 图像质量 ;

2、各类型帧解码错误影响

B 帧 不是参考帧 , 解码错误 不会扩散到其它帧 , 只会影响自己所在的一个帧 ;

I 帧 一旦解码错误 , 会影响到整个 画面组 的 显示 ;

P 帧 解码错误 , 会影响到 后续 P 帧 , 或者依赖该 P 帧 之前 或 之后 的 B 帧 的 画面显示 ;

三、画面组 Group of Pictures 编解码顺序


1、画面组相关的几个次序说明

画面组相关的几个次序说明 : 在下图中有几个相关的顺序 ;

  • 解码顺序 : 先解码 I 帧 关键帧 , 再解码 P 帧 , 最后解码 B 帧 ;
  • 显示顺序 : 就是帧正常排列的顺序 ;
  • DTS : Decoding Time Stamp , 解码时间戳 , 告知播放器该在何时解码这一帧的数据 , 该时间戳是 AVPacket 结构体中的一个成员 , 表示这个压缩包应该何时被解码 ;
  • PTS : Presentation Time Stamp , 显示时间戳 , 告诉播放器该在何时显示这一帧的数据 , 该数据决定帧在播放过程中实际显示时间的关键因素 ;

大多数 编解码标准中 ( 如 : H.264 ) , 编码顺序 和 显示顺序 可能并不一致 , 特别是当存在B帧时 ;

此时 DTS 和 PTS 就显得尤为重要 , 这两个时间戳 能够确保音视频数据的正确同步和顺序播放 ;

2、画面组解码次序详细解析

每个 GOP 画面组 都是以 I 帧开始 , 先把 I 帧 解码出来 ;

I 帧 意味着 重新开始 :

  • 丢弃数据 : 只要 I 帧 解码出来 , 就可以将前面的 GOP 画面组 抛开 , 丢弃 ; 之前 上一个 画面组 GOP 解码出来的 数据 , 保存的中间数据 , 差异数据 , 关键帧数据 , 可以全部丢弃了 ;
  • 新关键帧 : 之后的 数据 都以 这个 I 帧 为基础进行解码 ,
  • 错误终止 : 如果前面的 画面组 有解码错误 , 那么从这个 I 帧 开始 , 就不会出错了 ;

画面组 的 第一帧 I 帧 , 解码出来之后 , 就可以把 依赖于 该 I 帧的 前向预测帧 P 帧 , 解码出来 , 这是 第二个 需要解码的帧 ;

在 I 帧 和 P 帧 中间的 两个 B 帧 , 都依赖于 前面的 I 帧 和 后面的 P 帧 ;

  • 第二个 B 帧 , 记录的数据是与 第一个 I 帧 和 第四个 P 帧 的 差异数据 ;
  • 第三个 B 帧 , 记录的数据是与 第一个 I 帧 和 第四个 P 帧 的 差异数据 ;

两个 B 帧的 前后次序 , 就是 前后次序决定的 ;

如果 解码次序打乱 , 也可以按照 显示时间戳 进行 正确的播放 ;

四、常用视频压缩算法 ( 仅做参考 )


1、MPEG 阵营算法

MPEG 阵营算法 : Moving Picture Experts Group , 制定音视频压缩标准的国际组织 ;

  • MPEG-1 算法 : 针对 1.5 Mbps 以下数据传输率的数字存储媒体运动图像及其伴音编码的国际标准 , 应用广泛 , 如 : VCD ;
  • MPEG-2 算法 : 提供接近广播级质量的视频输出 , 常用于 DVD / 数字有线电视 领域 ;
  • MPEG-4 算法 : 流媒体 高质量视频 算法 , 以对象的压缩方式 提高了压缩效率 , 同时提供了更好的交互性和灵活性 ;
  • H264 算法 : 又称为 " AVC 算法 " , 高度压缩数字视频编解码器标准 , 以先进的压缩技术使得在同等图像质量的条件下 , 压缩后的数据量比以前的标准 ; 广泛应用于 网络流媒体 / 视频通话 / 高清电视广播等领域 ;
  • H265 算法 : 又称为 " HEVC 算法 " , 提供更高的压缩效率 , 更高分辨率的视频 , 如 4K / 8K ; 可以在维持相同视频质量的同时 , 将视频文件的压缩效率提高一倍 , 这意味着视频文件将减少一半 ;

2、中国阵营算法

中国阵营算法 :

  • AVS 算法 : 中国具有自主知识产权的音视频编码技术标准 , 制定数字音视频的压缩、解压缩、处理和表示等共性技术标准 , 为数字音视频设备与系统提供高效经济的编解码技术 ;

3、Google 阵营算法

Google 阵营算法 :

  • VP8 算法 : Google 开发的开源视频压缩格式 , 是 WebM 项目的一部分 , 提供高质量的实时视频压缩 , 同时保持较低的解码复杂性 ;
  • VP9 算法 : 提供了更高的压缩效率 , 也是 WebM 的一部分 , 用于 网络视频流 和 WebRTC 等应用 ;

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值