不管哪个标准,一个视频编码器内部都是六块:分块、预测、变换、量化、熵编码、码率控制——只有量化会丢信息,其余五块是换表示或做调度。
第七章讲完了原理与标准,从这一章开始落到实处:编码器内部到底有哪些技术、按什么顺序跑。
一、编码器的六个模块
把任何一个视频编码器拆开,里面都是这六块: 分块/宏块划分——把画面切成规则的小块,作为一切处理的单位; 预测——帧内或帧间预测,只把残差往下传; 变换——DCT 类变换,把能量挤到少数系数上; 量化——按 QP 把系数粗化,决定画质与码率; 熵编码——霍夫曼/算术编码,把剩下的符号写短; 码率控制——分配 QP、管理缓冲,盯住目标码率。
二、六块的分工不是并列的
这六块不要平铺着记,它们分成三种性质: 去冗余:预测、变换——都是可逆的换表示,一点信息都不丢; 丢信息:只有量化一块; 调度:分块与码率控制——它们不碰数据内容,只管怎么组织。 记住这个分类,很多问题一眼就能判断方向:画质有损,只可能是量化那一刀。
三、标准管到哪一层
这六块里,标准规定的是【码流怎么写、怎么写才合法】: 被标准管住的:分块的语法、变换的整数近似、熵编码的码表、语法元素; 标准不管的:运动估计怎么搜、预测模式怎么选、QP 怎么分配。 所以同一份 H.264 标准下,x264 与硬件编码器的产出可以差出一倍码率(第 7.4.1 节)。
四、这一章的两条线
第八章按视频与音频两条线分别展开: 8.2 到 8.4——视频:先看整体流程,再钻 I/P/B 帧的技术细节,最后到运动估计; 8.5——音频:MPEG-1/2/4 与 AC-3 四代编码的技术盘点。 两条线的结构其实是一样的:都是【变换 → 量化 → 熵编码】,差别只在预测那一步能不能用上时间冗余(第 7.3 节)。
五、动手 Demo:视频编码器的六个模块
不管哪个标准,一个视频编码器内部都是这六块。
rows = [("分块/宏块划分", "切成规则小块", "前置"),
("预测", "只把残差往下传", "去冗余"),
("变换", "能量挤到少数系数", "去空间相关"),
("量化", "按 QP 粗化系数", "唯一丢信息"),
("熵编码", "把符号写短", "无损收尾"),
("码率控制", "盯住目标码率", "全局调度")]
for a, b, c in rows:
print("%-12s %-14s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
视频编码器的六个模块
--------------------------------------------------------------------
不管哪个标准,一个视频编码器内部都是这六块。
模块 作用 在哪个环节
---------------------------------------------------------------------
分块/宏块划分 把画面切成规则的小块,作为处理单位 前置
预测 帧内或帧间预测,只把残差往下传 去冗余
变换 DCT 类变换,把能量挤到少数系数上 去空间相关
量化 按 QP 把系数粗化,决定画质与码率 唯一丢信息
熵编码 霍夫曼/算术编码,把符号写短 无损收尾
码率控制 分配 QP、管理缓冲,盯住目标码率 全局调度
六块里**只有量化会丢信息**(第 6.3.3 节),其余五块都是换表示或做调度。
这一章要讲的【技术】,就是把这六块**逐个展开**。
六块里只有量化会丢信息(第 6.3.3 节),其余五块都是换表示或做调度。 这一章要讲的【技术】,就是把这六块逐个展开。
30 秒实验
- 用 FFmpeg 的
-preset参数把同一个视频压两遍(一个 ultrafast、一个 veryslow),对比文件大小与耗时。 - 两次的码率控制参数要保持一样,这样才能看出【搜索得细不细】值多少钱。
常见误区
- 以为【编码就是压缩】。编码是一整套流程,压缩只是它带来的结果。
- 以为六块里每块都会丢信息。只有量化丢,其余都是可逆换表示或纯调度。
- 以为标准规定了整个编码器。标准只管码流语法,搜索与决策完全自由。
自测三问(点开对答案)
1. 视频编码器有哪六个模块? —— 分块、预测、变换、量化、熵编码、码率控制。 2. 哪一块真正丢信息? —— 只有量化;预测与变换是可逆的换表示。 3. 为什么同一标准下不同编码器产出差很多? —— 标准不管运动估计与模式选择,这些自由度带来巨大差异。- ☐ 下一节(8.2 视频编码流程)
相关笔记
- 视频编码流程 — 六块怎么串起来
- 量化 — 唯一丢信息的那一块
- 视频编码原理 — 四步骨架的另一种说法
- 视频编码的关键技术 — 第五章的六项技术清单
- 🎬 FFmpeg入门详解 · 索引