📄 一句话概括
量化是整条链路里唯一真正丢信息的步骤——而且QP 越小画质越好、码率越高,是一条单调的取舍曲线。
📝 本节和前面几节的关系
6.3.2 讲了变换,这一节讲真正决定【压缩多少】的那一步。
一、量化在做什么
量化的动作很简单:把连续的系数值,映射到有限的档位上。 挡位之间的间隔叫量化步长——步长越大,丢得越多,压得越狠。 在 H.264 这类标准里,量化步长由 QP(量化参数) 控制。 QP 每加 6,量化步长翻一倍——这是一个近似指数的关系。
二、为什么只有它丢信息
把它前后的步骤对比一下就清楚了: 预测:算残差,可逆;变换:换坐标系,可逆; 熵编码:换表示,无损; 量化:把多个值映射成一个代表值——不可逆。 所以整条链路里,只有量化这一步是【有损】的。
三、QP 与码率的关系
QP 18:画质很好,码率最高——适合存档与母版。 QP 23:通用点播的常见档位。 QP 28:移动端,体积优先。 QP 33:弱网直播,码率可以再砍半。 所以要调码率,最直接的手段是改 QP,而不是改分辨率—— 改分辨率会把画面尺寸也改了,而 QP 只动质量与体积。
四、为什么不能一直降码率
因为量化丢掉的细节永远补不回来(5.3.5 讲过反量化不是逆运算)。 压得太狠,会出现三类典型症状: 块效应——块边界对不齐,画面上出现方格; 色彩断层——渐变色变成一层层的色带; 细节糊掉——纹理被抹平,人物脸上像上了一层蜡。 所以【码率能降多少】这个问题,答案取决于内容能忍到什么程度。
五、动手 Demo:量化步长变了,码率跟着变多少
量化是整条链路里唯一真正丢信息的步骤。
rows = [("18", "很好", "约 12 Mbps", "存档、母版"),
("23", "好", "约 8 Mbps", "通用点播"),
("28", "可用", "约 4 Mbps", "移动端"),
("33", "较差", "约 2 Mbps", "弱网直播")]
for a, b, c, d in rows:
print("QP %-4s %-8s %-12s %s" % (a, b, c, d))
实跑输出:
--------------------------------------------------------------------
量化步长变了,码率跟着变多少
--------------------------------------------------------------------
量化是整条链路里唯一真正丢信息的步骤。
QP 画质 典型码率 说明
------------------------------------------
18 很好 约 12 Mbps 存档、母版
23 好 约 8 Mbps 通用点播
28 可用 约 4 Mbps 移动端
33 较差 约 2 Mbps 弱网直播
注意第三、四行:**QP 从 28 放到 33,码率直接砍半。**
而且 QP 越小画质越好、码率越高——**这是一条单调的取舍曲线**。
所以调码率最直接的手段不是改分辨率,**而是改量化步长**。
注意第三、四行:QP 从 28 放到 33,码率直接砍半。 而且 QP 越小画质越好、码率越高——这是一条单调的取舍曲线。 所以调码率最直接的手段不是改分辨率,而是改量化步长。
30 秒实验
- 把同一段视频用 QP 23 与 QP 33 各压一次,比较体积。
- 再放大看块效应有没有出现。
常见误区
- 以为量化只是【降精度】。它会带来块效应、断层这些可见失真。
- 靠改分辨率调码率。改 QP 更直接,也不会动画面尺寸。
自测三问(点开对答案)
1. 整条压缩链路里哪一步真正丢信息? —— 量化。 2. QP 每加 6 会发生什么? —— 量化步长大约翻一倍。 3. 压得太狠会出现哪三类症状? —— 块效应、色彩断层、细节被抹平。- ☐ 下一节(6.3.4 熵编码)
相关笔记
- 熵编码 — 量化之后的无损收尾
- 有损压缩 — 有损真正发生的地方
- 视频编解码流程 — 为什么反量化补不回来
- 🎬 FFmpeg入门详解 · 索引