2. 视频编码基础
做码率控制,说白了就是在跟编码器的“脾气”打交道。你得先摸清楚它的几个核心零件怎么工作,后面调参时才不会抓瞎。这一节我带你快速过一遍,都是后面实战里天天要碰的东西。
2.1 I/P/B 帧:三种帧,三种性格
编码器不会傻乎乎地一帧一帧独立压缩。它会把帧分成三类,每类的压缩策略完全不同。
| 帧类型 | 全称 | 压缩方式 | 大小比例(参考) |
|---|---|---|---|
| I 帧 | Intra-coded frame | 完全独立编码,不参考任何其他帧 | 最大(约 P 帧的 3~5 倍) |
| P 帧 | Predictive-coded frame | 参考前面的 I 或 P 帧,只编码差异 | 中等 |
| B 帧 | Bi-directional frame | 参考前后两帧,压缩率最高 | 最小(约 I 帧的 1/5) |
我个人习惯把 I 帧叫作“关键帧”,它是随机访问的入口。P 帧是“前向预测”,B 帧是“双向预测”。你想想看,B 帧能参考前后两帧的信息,所以压缩效率最高,但也最依赖解码顺序。
2.2 GOP 结构:帧的编排艺术
GOP(Group of Pictures)就是一组连续帧的编排方式。它决定了 I 帧出现的频率,以及 P/B 帧的排列模式。
常见的 GOP 结构有两种:
- 封闭式 GOP:每个 GOP 以 I 帧开头,内部帧不跨 GOP 参考。适合随机访问要求高的场景。
- 开放式 GOP:B 帧可以跨 GOP 边界参考。压缩效率更高,但随机访问稍差。
GOP 长度(通常用两个 I 帧之间的帧数表示)直接影响码率波动。GOP 越长,码率越平稳,但随机访问点越少。我一般在点播场景用 250 帧左右的 GOP,直播场景则缩短到 60~120 帧。
2.3 量化参数 QP:码率与质量的旋钮
QP(Quantization Parameter)是编码器里最直接的“质量-码率”调节旋钮。它的原理很简单:
- QP 越小,量化越精细,图像质量越高,码率越大。
- QP 越大,量化越粗糙,图像质量越低,码率越小。
在 H.264/H.265 中,QP 的取值范围通常是 0~51。实际应用中,我很少用到 0 或 51 这种极端值。0 是无损,码率爆炸;51 是马赛克,基本没法看。常用的范围是 18~40。
| QP 值 | 质量表现 | 典型应用场景 |
|---|---|---|
| 18~22 | 接近无损,肉眼几乎看不出差异 | 存档、母版制作 |
| 23~28 | 高质量,细节保留好 | 高清点播、影视内容 |
| 29~35 | 中等质量,有一定细节损失 | 直播、短视频 |
| 36~40 | 低质量,明显模糊 | 监控、低码率场景 |
2.4 率失真优化:码率控制的底层逻辑
率失真优化(Rate-Distortion Optimization, RDO)是编码器做决策时的“算账”过程。它要回答一个问题:在给定的码率预算下,怎么分配比特才能让失真最小?
数学上,RDO 可以简化为一个拉格朗日优化问题:
J = D + λ × R
其中:
- J:率失真代价,编码器要最小化的目标
- D:失真(通常用 SSE 或 SAD 衡量)
- R:码率(编码该块需要的比特数)
- λ:拉格朗日乘子,控制码率和失真的权衡
λ 越大,编码器越倾向于省码率(宁可损失质量);λ 越小,编码器越倾向于保质量(不惜多花比特)。
在实际的码率控制算法中,λ 通常由 QP 推导而来。H.264 参考模型里有一个经典公式:
λ = 0.85 × 2^(QP/3 - 4)
这个公式我记了十年。它把 QP 和 λ 直接挂钩,码率控制算法通过调整 QP 来间接控制 λ,从而影响编码器的率失真决策。
2.5 知识体系总览
下面这张图把本章的核心概念串起来了。你可以看到 I/P/B 帧、GOP、QP 和 RDO 之间的关系:
嗯,到这里你应该明白了:码率控制不是孤立地调一个参数,而是在 GOP 的节奏下,通过 QP 和 λ 来引导编码器的率失真决策。后面的章节,我们会一步步把这个逻辑变成可运行的算法。