news 2026/2/13 15:07:42

视频编解码与 GOP 结构详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
视频编解码与 GOP 结构详解

视频编解码与 GOP 结构详解

1. 帧类型

在 H.264/AVC 编码中,视频由不同类型的帧组成:

  • I 帧 (Intra-coded frame)

    • 关键帧,独立编码,不依赖其他帧。
    • 解码器可以从 I 帧开始解码。
    • 压缩率最低,但解码起点。
  • P 帧 (Predicted frame)

    • 前向预测帧,参考之前的 I/P 帧。
    • 压缩率比 I 帧高。
    • 解码时必须依赖前面的参考帧。
  • B 帧 (Bi-directional predicted frame)

    • 双向预测帧,同时参考前后的 I/P 帧。
    • 压缩率最高,但解码延迟大。
    • 必须等到前后参考帧解码完成后才能解码。

2. GOP (Group of Pictures)

  • 定义:一组图像的结构,通常从一个 I 帧开始,到下一个 I 帧结束。
  • N (Number):GOP 长度,即两个 I 帧之间的总帧数。
    • 例如 N=30 → 每 30 帧一个 I 帧。
  • M (Multiple):参考帧间隔,决定 P 帧之间插入多少 B 帧。
    • M=1 → 没有 B 帧,只有 I/P。
    • M=3 → 每两个 P 帧之间插入 2 个 B 帧。

示例

  • GOP=12, M=3 → 帧序列:
    I B B P B B P B B P B B I

3. 显示顺序 vs 解码顺序

视频播放时的顺序和解码器内部的解码顺序不同,尤其是有 B 帧时。

显示顺序(播放时看到的)

I → B → B → P → B → B → P → B → B → P → B → B → I

解码顺序(解码器内部处理)

I → P → B → B → P → B → B → P → B → B → I → B → B

盒示意图

显示顺序: [ I ][ B ][ B ][ P ][ B ][ B ][ P ][ B ][ B ][ P ][ B ][ B ][ I ] 解码顺序: [ I ][ P ][ B ][ B ][ P ][ B ][ B ][ P ][ B ][ B ][ I ][ B ][ B ]

👉 解码器必须先解码 I 和 P 帧,才能“回头”解码前面的 B 帧,这就是 B 帧带来延迟的原因。


4. 编码参数

  • 码率 (bps):决定画质和压缩程度。
    • 高码率 → 画质好,文件大。
    • 低码率 → 画质差,文件小。
  • GOP 长度 (N):关键帧间隔,影响随机访问和容错能力。
  • M 值:是否插入 B 帧,影响压缩率和延迟。
  • Profile/Level:决定编码器能支持的分辨率和帧率上限。
    • High@L4.0 → 支持 1080p@30fps。
    • High@L4.2 → 支持 1080p@60fps。
  • 参考帧数:影响压缩效率和解码复杂度。
  • 熵编码方式 (CABAC/CAVLC):影响压缩率和解码速度。

5. 常见场景推荐参数

  • 直播/实时编码

    • GOP = 帧率(每秒一个关键帧)。
    • M = 1(无 B 帧,低延迟)。
    • 码率:1080p60 → 8~12 Mbps。
  • 点播/录像

    • GOP 可设为 2 秒或更长。
    • M > 1(有 B 帧,压缩率高)。
    • 码率可适当降低以节省空间。
  • 监控场景

    • GOP 较短(提高容错)。
    • M = 1(低延迟)。
    • 码率中等,保证清晰度。

6. 总结

  • I/P/B是帧类型的缩写,直接对应编码方式。
  • GOP/M/N是结构参数,用来描述关键帧间隔和 B/P 帧分布。
  • 编码效果主要由 GOP、M、码率决定,同时受 Profile/Level、参考帧数、熵编码方式影响。
  • 在实时场景下,通常选择短 GOP、无 B 帧、较高码率;在存储场景下,可以选择长 GOP、有 B 帧、较低码率以提高压缩率。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 12:14:31

11、C语言程序设计:_FUNCTION__ 宏在嵌入式开发中的应用

1. 基本介绍__FUNCTION__ 是C语言的一个特殊预定义标识符,它在编译时会被替换为当前函数的名字(字符串常量)。__FUNCTION__ 的主要优势: 【1】自动获取函数名 - 无需手动输入,减少错误 【2】代码维护方便 - 函数重命名…

作者头像 李华
网站建设 2026/2/13 2:49:07

weixin194高校学习助手小程序ssm(源码)_kaic

第5章 系统实现 进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于…

作者头像 李华
网站建设 2026/2/13 7:37:24

社会网络仿真软件:NetLogo_(10).NetLogo高级编程技巧

NetLogo高级编程技巧 在前一节中,我们已经了解了NetLogo的基础编程和模型构建方法。本节将深入探讨NetLogo的一些高级编程技巧,帮助你更高效、更灵活地构建复杂的社会网络仿真模型。这些技巧包括但不限于:高级数据结构的使用、优化模型性能、…

作者头像 李华
网站建设 2026/2/13 3:02:30

业务复杂也能零代码?XinServer 可视化建表解析

业务复杂也能零代码?XinServer 可视化建表解析 最近跟几个做前端和移动端的朋友聊天,发现大家普遍有个头疼事儿:项目一到需要后端支持的时候,进度就卡壳。要么得等后端排期,要么自己硬着头皮去学 Node.js、Spring Boo…

作者头像 李华