🎬 第八章 音视频编解码技术与流程
📄 一句话概括

不管哪个标准,一个视频编码器内部都是六块:分块、预测、变换、量化、熵编码、码率控制——只有量化会丢信息,其余五块是换表示或做调度。

📝 本节和前面几节的关系

第七章讲完了原理与标准,从这一章开始落到实处:编码器内部到底有哪些技术、按什么顺序跑。

一、编码器的六个模块

把任何一个视频编码器拆开,里面都是这六块: 分块/宏块划分——把画面切成规则的小块,作为一切处理的单位; 预测——帧内或帧间预测,只把残差往下传; 变换——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 秒实验

  1. 用 FFmpeg 的 -preset 参数把同一个视频压两遍(一个 ultrafast、一个 veryslow),对比文件大小与耗时。
  2. 两次的码率控制参数要保持一样,这样才能看出【搜索得细不细】值多少钱。

常见误区

  1. 以为【编码就是压缩】。编码是一整套流程,压缩只是它带来的结果。
  2. 以为六块里每块都会丢信息。只有量化丢,其余都是可逆换表示或纯调度。
  3. 以为标准规定了整个编码器。标准只管码流语法,搜索与决策完全自由。
自测三问(点开对答案) 1. 视频编码器有哪六个模块? —— 分块、预测、变换、量化、熵编码、码率控制。 2. 哪一块真正丢信息? —— 只有量化;预测与变换是可逆的换表示。 3. 为什么同一标准下不同编码器产出差很多? —— 标准不管运动估计与模式选择,这些自由度带来巨大差异。

相关笔记