🎬 第五章 视频基础
📄 一句话概括

六项技术里,前三项决定能压多少,后三项决定压完好不好看——尤其环路滤波容易被忽略,但它直接决定画面有没有方块感。

📝 本节和前面几节的关系

5.3.3 讲了主流程,这一节把流程里用到的关键技术逐项拆开。

一、六项技术各解决什么

分块:让局部预测成为可能——这是所有后续技术的前提。 帧内预测:利用同一帧里的空间冗余。 帧间预测与运动补偿:利用相邻帧的时间冗余——贡献最大的一项。 变换:把能量集中到少数系数上,方便后面的量化。 量化:按感知重要性决定丢多少。 环路滤波:消除分块带来的块效应。

二、运动补偿是什么

帧间预测的核心是运动估计:先在参考帧里找到【当前块是从哪儿移过来的】。 找到之后,只需要传一个运动矢量和一点点残差,不用重传整个块。 这就是为什么【镜头缓慢平移】的画面码率很低——整幅画面都在朝一个方向移。 反过来,画面剧烈变化或噪点多时码率会上升,因为预测不准了。

三、环路滤波为什么重要

分块编码会带来一个副作用:相邻块各自量化,边界处可能对不齐。 结果就是画面上出现一片片的方块——这就是常说的【块效应】。 环路滤波的作用是在重建环节里把边界抹平。 所以它不属于【压缩】,但没有它,压缩比根本提不上去——因为量化不敢做得太狠。

四、怎么看这六项

前三项(分块、帧内、帧间)决定压缩的空间上限。 后三项(变换、量化、环路滤波)决定在这个上限内画质能保住多少。 调参的时候记住这个分工:画质差先看量化与滤波,码率高先看预测。

五、动手 Demo:视频编码的六项关键技术

每一项技术都在解决一个具体的问题。

rows = [("分块", "让局部预测成为可能"),
        ("帧内预测", "利用同一帧里的空间冗余"),
        ("帧间预测与运动补偿", "利用相邻帧的时间冗余"),
        ("变换", "把能量集中到少数系数上"),
        ("量化", "按感知重要性决定丢多少"),
        ("环路滤波", "消除分块带来的块效应")]
for a, b in rows:
    print("%-14s %s" % (a, b))

实跑输出:

--------------------------------------------------------------------
视频编码的六项关键技术
--------------------------------------------------------------------

每一项技术都在解决一个具体的问题。

  技术                   解决的问题
  ----------------------------------------------
  分块                   让局部预测成为可能
  帧内预测               利用同一帧里的空间冗余
  帧间预测与运动补偿     利用相邻帧的时间冗余
  变换                   把能量集中到少数系数上
  量化                   按感知重要性决定丢多少
  环路滤波               消除分块带来的块效应

  前三项决定【能压多少】,后三项决定【压完好不好看】。
  **环路滤波容易被忽略,但它直接决定画面有没有【方块感】。**

前三项决定【能压多少】,后三项决定【压完好不好看】。 环路滤波容易被忽略,但它直接决定画面有没有【方块感】。

30 秒实验

  1. 看一段低码率视频,暂停后放大观察块边界。
  2. 这就是环路滤波没处理干净时的样子。

常见误区

  1. 把环路滤波当成【后期美化】。它是编码回路里必须有的一环。
  2. 以为码率越高越好。预测不准时,加码率收益有限。
自测三问(点开对答案) 1. 视频编码的六项关键技术是什么? —— 分块、帧内预测、帧间预测与运动补偿、变换、量化、环路滤波。 2. 运动补偿传的是什么? —— 传运动矢量加少量残差,不重传整个块。 3. 环路滤波解决什么问题? —— 消除分块量化带来的块效应。

相关笔记