🎬 第六章 音视频压缩编码基础
📄 一句话概括

GOP 就是两个 IDR 帧之间的那一串帧——GOP 越长码率越低,但随机访问点越少、丢包恢复越差。

📝 本节和前面几节的关系

6.5.1 讲清了四种帧,这一节讲它们怎么组织成一个周期。

一、GOP 是什么

GOP(Group of Pictures,图像组)指的是:两个 IDR 帧之间的那一串帧。 它以 IDR 帧开头,包含若干个 P 帧与 B 帧。 所以 GOP 长度 = 关键帧间隔——这两个说法其实是一回事。

二、开放 GOP 与闭合 GOP

闭合 GOP:GOP 里的帧只参考本组内的帧,不越界。 好处是每个 GOP 都能独立解码,剪辑与拖动都方便。 开放 GOP:允许参考前一组里的帧,压得略狠一点。 代价是不能从中间任意切入——前面的组也要拿到才行。 所以【能不能任意剪辑】这件事,取决于 GOP 是开放的还是闭合的。

三、长度怎么取舍

短(如 30 帧):拖动快、抗丢包强——但码率高。 中(如 60 帧):码率与体验平衡——常规选择。 长(如 250 帧):码率最低——但拖动慢、丢包恢复差。 原因很直接:GOP 越长,B/P 帧占比越高(它们便宜),但中间能独立开始的位置就越少。

四、怎么定这个参数

判据还是那句:先看场景的硬约束。 短视频:要拖动跟手——用较短的 GOP。 直播:怕丢包,也怕起播慢——GOP 不能太长。 影视存档:画质与体积优先——可以用长 GOP。 这就是 4.1.5 与 5.6 反复出现的同一条规律:场景决定参数。

五、动手 Demo:GOP 长一点还是短一点

GOP(图像组)就是【两个 IDR 帧之间的那一串帧】。

rows = [("短(如 30)", "拖动快、抗丢包强", "码率高"),
        ("中(如 60)", "码率与体验平衡", "常规选择"),
        ("长(如 250)", "码率最低", "拖动慢、丢包恢复差")]
for a, b, c in rows:
    print("%-12s %-18s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
GOP 长一点还是短一点
--------------------------------------------------------------------

GOP(图像组)就是【两个 IDR 帧之间的那一串帧】。

  GOP 长度         优点                 缺点
  ---------------------------------------------------------
  短(如 30)      拖动快、抗丢包强     码率高
  中(如 60)      码率与体验平衡       常规选择
  长(如 250)     码率最低             拖动慢、丢包恢复差

  这个取舍在 5.1.4 提过一次,**这里补上它的技术原因**:
  GOP 越长,B/P 帧占比越高,**码率越低;但随机访问点越少。**

这个取舍在 5.1.4 提过一次,这里补上它的技术原因: GOP 越长,B/P 帧占比越高,码率越低;但随机访问点越少。

30 秒实验

  1. 拿同一段视频,用 GOP 长度 30 与 250 各压一次。
  2. 比较体积,再试着拖动播放,体会这个取舍。

常见误区

  1. 以为 GOP 越长越【高级】。拖动与抗错都会变差。
  2. 把开放 GOP 用于需要精细剪辑的素材。那会导致切不准。
自测三问(点开对答案) 1. GOP 指什么? —— 两个 IDR 帧之间的那一串帧,以 IDR 开头,包含若干 P/B 帧。 2. 闭合 GOP 与开放 GOP 的区别是什么? —— 闭合 GOP 内不参考组外帧,每个 GOP 可独立解码;开放 GOP 允许跨组参考。 3. GOP 长度怎么选? —— 短视频与直播用较短,影视存档可用较长——场景决定参数。

相关笔记