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

视频能压这么狠,是因为里面有四类冗余——其中时间冗余最值钱:相邻两帧的差别通常不到 5%。

📝 本节和前面几节的关系

5.2 讲了视频怎么被打包,5.3 进入正题:它是怎么被压下去的。

一、四类冗余

空间冗余:同一帧里相邻像素的值很接近——可用帧内预测压。 时间冗余:相邻帧里同一位置的像素很接近——可用帧间预测压。 编码冗余:不同符号出现的概率不均——可用熵编码压。 视觉冗余:有些细节人眼分辨不出——可以量化时丢掉。

二、时间冗余为什么最值钱

因为它重复得最多:一秒 30 帧里,相邻两帧的变化通常不到 5%。 也就是说,95% 的像素在上下一帧里是同一个东西。 把相同的部分只存一次,省下来的就是大头——这就是视频能压到上百倍的根本原因。 4.2 里音频没有这么强的冗余,所以音频的压缩比天生低于视频。

三、两类编码的分工

帧内编码:只用当前帧自己的信息,可以独立解码(比如 I 帧)。 帧间编码:参考别的帧,压缩率高但不能独立解码(P 帧、B 帧)。 两者配合使用:关键的位置放 I 帧,其余尽量用帧间编码。

四、一个核心取舍

压缩的本质永远是一个取舍:压得越狠,依赖越多,出错的影响面也越大。 所以一段视频丢了几个包,在 I 帧附近恢复得快,在长 GOP 中间就会花屏一片。 理解了这一点,就能理解后面所有的编码参数为什么那样设。

五、动手 Demo:视频里到底有哪几种【冗余】

视频能被压这么狠,是因为里面重复的东西实在太多。

rows = [("空间冗余", "同一帧里相邻像素很像", "帧内预测"),
        ("时间冗余", "相邻帧里同一位置很像", "帧间预测、运动补偿"),
        ("编码冗余", "符号出现概率不均", "熵编码"),
        ("视觉冗余", "有些细节人眼看不到", "量化、丢高频")]
for a, b, c in rows:
    print("%-8s %-22s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
视频里到底有哪几种【冗余】
--------------------------------------------------------------------

视频能被压这么狠,是因为里面重复的东西实在太多。

  冗余类型     哪里重复                 怎么压
  ---------------------------------------------------------
  空间冗余     同一帧里相邻像素很像     帧内预测
  时间冗余     相邻帧里同一位置很像     帧间预测、运动补偿
  编码冗余     符号出现概率不均         熵编码
  视觉冗余     有些细节人眼看不到       量化、丢高频

  四类里**时间冗余最值钱**——
  相邻两帧的差别通常不到 5%,**把相同的部分只存一次,省下的是大头**。

四类里时间冗余最值钱—— 相邻两帧的差别通常不到 5%,把相同的部分只存一次,省下的是大头。

30 秒实验

  1. 截取一段视频里相邻的两帧,对比它们的差别区域有多大。
  2. 这个差别区域,就是帧间编码真正要传的东西。

常见误区

  1. 以为压缩就是【把画面变模糊】。它先做的是去掉重复。
  2. 把帧内编码与帧间编码对立起来。两者是配合使用的。
自测三问(点开对答案) 1. 视频里有哪四类冗余? —— 空间冗余、时间冗余、编码冗余、视觉冗余。 2. 为什么时间冗余最值钱? —— 相邻帧差别通常不到 5%,重复的部分最多。 3. 帧内编码与帧间编码的分工是什么? —— 帧内可独立解码,帧间压缩率高但依赖别的帧。

相关笔记