视频编解码与 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 帧、较低码率以提高压缩率。
相关推荐
天才奇男子1 天前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
学嵌入式的小杨同学1 天前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
酥暮沐1 天前
iscsi部署网络存储
linux·网络·存储·iscsi
❀͜͡傀儡师1 天前
centos 7部署dns服务器
linux·服务器·centos·dns
Dying.Light1 天前
Linux部署问题
linux·运维·服务器
S19011 天前
Linux的常用指令
linux·运维·服务器
小义_1 天前
【RH134知识点问答题】第7章 管理基本存储
linux·运维·服务器
梁洪飞1 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
_运维那些事儿1 天前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
Y1rong1 天前
linux之文件IO
linux