跳到正文

从 MacBook 的 AV1 开始:一部视频编码编年史(2):视频压缩机制与编码演进

从 MacBook 的 AV1 开始:一部视频编码编年史

  1. AV1 硬解与 MacBook 的选择
  2. 视频压缩机制与编码演进(当前)

AV1、H.264 和 HEVC 都规定压缩后的视频码流与解码方式,硬件解码则影响设备播放它们时的计算负担。第一篇从 MacBook 选型讨论了这层差别;这里继续从原始视频的数据量进入压缩过程,再沿 DCT、H.261、MPEG、H.264、HEVC、VP9 与 AV1 的演进,看新标准增加了什么,以及生态为什么需要时间接入。

为什么视频非压不可

视频最朴素的形态就是每秒播放很多张图片。假设一帧是 1920 × 1080,帧率 30 fps,用 8-bit RGB 保存,每个像素需要 3 字节:

1920 × 1080 × 30 × 3 = 186,624,000 bytes/s

也就是每秒约 186 MB,一分钟超过 11 GB。即使先转成常见的 8-bit YCbCr 4:2:0,平均每个像素约 1.5 字节,1080p30 仍接近 93 MB/s。这样的数据量不适合日常存储,更不可能直接塞进普通家庭网络持续传输。

压缩之所以可行,是因为真实视频不是随机噪声。它至少有三类可以利用的冗余。

视频压缩利用的三类冗余

空间冗余来自同一帧。天空、墙面、皮肤和桌面上的邻近像素往往相似,没有必要逐个独立描述。

时间冗余来自相邻帧。镜头没有切换时,大部分画面只是物体移动、镜头平移或局部变化,也没有必要每帧从头写一遍。

感知冗余来自人眼。我们通常对亮度边缘更敏感,对色度细节和某些高频信息更宽容,因此常见视频会使用 4:2:0 色度采样,也会在量化时有选择地舍弃不容易察觉的细节。

无损压缩只能消除可完全还原的统计冗余,空间有限。在线视频真正依赖的是有损压缩:允许重建画面和原始画面有差异,只要这种差异在目标码率下尽量不碍眼。

一条延续三十多年的主线

现代视频标准名称很多,主干却很稳定。它们大多属于「混合视频编码」:

  1. 把画面切成块;
  2. 从当前帧邻域或其他参考帧里预测这个块;
  3. 原始块减去预测块,得到残差;
  4. 对残差做变换,让能量集中到少量系数;
  5. 量化系数,把次要细节变粗,制造大量 0;
  6. 对模式、运动向量和系数做熵编码;
  7. 在编码器内部重建并滤波,作为后续帧的共同参考。

编码器先重建自己的参考帧

编码器先猜画面,再只写猜错的部分。

例如画面里有一个向右移动六个像素的方块。最笨的方法是把下一帧所有像素重新写一遍;帧间预测会在参考帧里找到相似方块,记录一个「向右 6 像素」的运动向量,再只保存新露出的背景、遮挡边缘和预测不准的纹理。预测越准,残差越接近 0,后面就越容易压缩。

量化是有损压缩最主要的损失来源。它把变换系数按一定步长取整,小系数会直接变成 0。QP 越高,量化通常越强,文件越小,细节损失也越明显。CRF、CQ、目标码率这些编码器参数,最终都在影响「每一帧、每一个块该分到多少比特」。

编码器与解码器并不对称。编码器可能试几十种块划分、多个参考帧和大量运动向量,再用率失真代价挑一个方案;解码器不需要重新搜索,只要按码流给出的决定执行。因此同一标准下,编码器可以越做越聪明、越来越慢,而所有合规解码器仍应得到一致的重建结果。

一部视频编码编年史

从 DCT、H.120 到 AV2 的视频编码时间线

1970s—1980s:先有 DCT,再有第一个数字视频标准

模拟电视同样要节省带宽,只是当时主要依靠隔行扫描、限制色度带宽和广播调制完成,还没有今天这种由码流语法约束的数字 codec。画面真正进入计算机后,像素变成可以逐项存储和传输的数字,原始数据量也立刻成了绕不开的问题。

1974 年,Nasir Ahmed、T. Natarajan 和 K. R. Rao 发表离散余弦变换论文。DCT 能把自然图像中分散的像素变化集中到少量低频系数,后续量化就可以优先保留这些主要能量,把许多高频小系数压成 0。JPEG、MPEG 以及 H.26x 家族后来使用的具体整数变换并不完全等同于原始 DCT,但「先把信号换到更容易取舍的变换域」从此成为压缩的基本手法。

1984 年的 H.120 是第一个国际数字视频压缩标准,初版使用条件更新、DPCM、标量量化和变长编码,1988 年修订版又加入运动补偿与背景预测。它运行在 1544 或 2048 kbit/s,实际部署很少,却把数字视频从研究方法推到了国际标准。ITU 对视觉编码历史的回顾把 H.120 称为第一个标准,把随后出现的 H.261 称为第一个商业上成功的数字视频编码标准。

1990:H.261 把混合编码骨架搭起来

H.120 证明数字视频可以形成国际标准,H.261 则把这条路线带进可实际部署的视频会议系统。它面向 ISDN 上的可视电话和视频会议,码率以 p × 64 kbit/s 组织。ITU 的 H.261 文档写明标准在 1990 年形成、1993 年修订。

H.261 已经有今天熟悉的轮廓:宏块、运动补偿、离散余弦变换、量化和变长编码。分辨率和工具都很有限,但「帧间预测处理时间冗余,变换编码处理空间冗余」的组合从这里稳定下来。

1992—1994:MPEG 把数字视频送进消费市场

MPEG-1 面向 CD-ROM 一类数字存储介质,后来最广为人知的落点是 VCD。它让带 I、P、B 帧的 GOP 结构走进大规模消费场景:I 帧独立解码,P 帧参考过去,B 帧可以利用前后参考得到更准预测。

MPEG-2 随后把目标转向数字电视、卫星广播和 DVD,也就是 ITU-T H.262。它支持更高码率、隔行视频和更丰富的 profile/level,最终成为广播和光盘时代的基础设施。MPEG 的历史页把 MPEG-1 的批准时间列为 1992 年、MPEG-2 列为 1994 年。

这两代标准已经说明一个现实:编码格式能否成功,不只看压缩率。采集设备、制作软件、传输网络、光盘、机顶盒、电视芯片和专利授权必须一起形成生态。

1996:H.263 把低码率视频继续往前推

H.263 仍然面向低码率通信,但运动补偿精度、可选编码工具和画面格式更灵活。它在早期网络视频、视频会议和 Flash Video 时代留下过很深的痕迹,也成为 H.264 之前的重要过渡。

2003:H.264 成为互联网视频的共同语言

H.264 同时也叫 AVC、MPEG-4 Part 10。三个名字指向同一套联合标准。它在 2003 年获批,ITU 对初版 H.264 的说明直接列出了视频会议、数字存储、电视广播、互联网流媒体和通信等目标场景。

H.264 的基本编码单元仍是 16 × 16 宏块,预测分区则可以继续拆小。新增工具包括帧内预测方向、多参考帧、四分之一像素运动补偿、整数变换、CABAC 熵编码,以及重建过程中的去块滤波。

这些工具被组合成一套便于硬件实现、解码负担可控、又能明显节省码率的标准。Blu-ray、网络视频、手机拍摄、监控、视频会议、直播推流几乎都能找到 H.264。二十多年后,它依然是最可靠的兼容性兜底。

2013:HEVC 面向 4K,VP9 面向开放 Web

分辨率从 720p、1080p 走向 4K 后,16 × 16 宏块开始显得局促。H.265/HEVC 改用最大 64 × 64 的 CTU,并允许按四叉树递归划分:平坦区域用大块减少描述开销,遇到边缘、纹理和复杂运动再拆成小块。

HEVC 还有更多帧内预测方向、更大变换尺寸、更灵活的运动补偿,以及去块滤波之外的 SAO。Tiles 和 WPP 帮助并行处理。ITU 在 2013 年公布 HEVC 时,把目标描述为相较 H.264 用约一半码率提供相当质量。这个数字是标准设计和当时测试的目标级表达,不是对任何片源、任何编码器都成立的固定折扣。

HEVC 很适合 4K、HDR、广播、摄像设备和受控播放链路,但其专利许可由多个池和权利人构成,Web 生态的实现与分发选择因此更谨慎。同一时期,Google 推动 VP9,为 YouTube 和 WebM 生态提供一条更开放的路线。Google 的文档仍将 VP9 描述为 YouTube 使用的自适应流媒体编码。

视频编码从此更明显地分成多条生态路线:电视与设备链路大量使用 HEVC,Web 平台大量使用 VP9,H.264 继续覆盖最广兼容面。

2018:开放联盟推动 AV1

AV1 吸收了 VP9、Daala、Thor 等项目的经验,同时由流媒体平台、浏览器厂商、芯片厂商和设备厂商共同参与。它仍然沿用预测、残差、变换、量化、熵编码的主干,但给编码器提供了更大的工具箱。

  • 超级块常用 128 × 128,也可使用 64 × 64,并支持比 HEVC 更丰富的非方形划分;
  • 帧内预测方向和模式更多,还包含适合屏幕内容的调色板、帧内块复制等工具;
  • 帧间预测支持复合预测、全局运动、局部扭曲运动等模型;
  • 变换尺寸和类型组合更丰富;
  • 去块滤波之后还有 CDEF 与 Loop Restoration;
  • Film Grain Synthesis 可以先去掉难压的随机颗粒,再把颗粒模型写进码流,由解码端重建相似质感。

AOMedia 的 AV1 工具说明对 CDEF、Loop Restoration 等模块给出了完整定义。工具越多,编码器越有机会找到省码率的表达方式,但搜索空间也越大。这就是早期 AV1 编码很慢、硬件解码普及又格外重要的原因。

AV1 并不存在一个对所有内容都恒定的「比 HEVC 小 20%」结论。结果会随片源、分辨率、画质指标、编码器版本、preset 和调参变化。更稳妥的理解是:AV1 为平台提供了更高的压缩上限,特别适合可以离线慢慢转码、随后向大量用户重复分发的点播业务;实时直播和个人导出则更看重编码速度与硬件能力。

H.264、H.265 与 AV1 的编码工具箱对比

2020 以后:标准继续前进,生态不会瞬间搬家

H.266/VVC 在 2020 年获批,继续减少超高清、HDR、360 度视频达到相同质量所需的码率。AV1 的下一代 AV2 规范则已在 2026 年发布。AOMedia 的客观指标测试显示,在相同质量下 AV2 相对 AV1 约可少用 30% 码率。按 AOMedia 对 AV2 落地节奏的说明,软件实现会先成熟,硬件支持随后跟进,AV1 与 AV2 也会长期共存。

这恰好能反过来解释 MacBook 的规格表:标准发布只是起点。编码器要成熟,浏览器和操作系统要接入,平台要完成转码,芯片要加入解码单元,设备还要经历几年换代。2026 年已经有 AV2,并不意味着今天买电脑就该跳过 AV1;相反,AV1 正处在规范成熟、内容增长、硬件广泛进入设备的实际部署期。

三种常见编码该怎么理解

维度 H.264 / AVC H.265 / HEVC AV1
最突出的优势 兼容性最好、编码快、硬件普及 4K/HDR 与受控设备链路成熟 开放 Web 生态、压缩上限高
基础块思路 16 × 16 宏块及子分区 最大 64 × 64 CTU,四叉树划分 最大 128 × 128 超级块,划分更丰富
编码复杂度 相对较低 明显高于 H.264 通常更高,具体看编码器和 preset
常见场景 通用分发、会议、录屏、兼容兜底 4K/HDR、Apple 设备、电视与摄像链路 YouTube、Netflix、B 站等大规模点播和新设备
主要顾虑 同画质所需码率较高 授权与 Web 兼容边界复杂 老设备硬解不足,编码耗时较长

不要把 codec 名称直接当成画质排名。一条认真编码的 H.264 高码率视频,完全可能比一条被压得太狠的 AV1 更好看。画质由片源、码率、分辨率、位深、色度采样、编码器实现、preset 和率控策略共同决定。

编码标准也不等于编码器实现。x264 输出 H.264,x265 输出 HEVC;libaom、SVT-AV1、rav1e 和 BILIAV1 都可以输出 AV1。标准只规定「合规码流如何解」,没有替编码器决定搜索策略,所以不同 AV1 编码器的速度和压缩效果仍会差很多。

同一短片可以分别用三种编码器试验,观察码率、编码耗时、伪影与播放功耗;不同编码器的 CRF 数值不能直接当成同一画质刻度。完整内容见FFmpeg 编码与播放实验弹窗。

总结

从 H.261、MPEG 到 H.264、HEVC、VP9 和 AV1,视频编码一直在利用画面的空间、时间和感知冗余。预测、残差、变换、量化和熵编码构成延续至今的主干,新标准扩充工具以争取更低码率,也增加编码搜索和实现成本。压缩效果要看片源、编码器与参数,能否普及还取决于授权、内容、软件和芯片生态,不能仅按标准新旧排名。

上一篇:AV1 硬解与 MacBook 的选择。

FFmpeg 编码与播放实验

用一次小实验把概念落地

如果本机 FFmpeg 构建包含对应编码器,可以选一段 20 到 30 秒、同时有静态细节和快速运动的视频,分别压成三版:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an out-h264.mp4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -an out-hevc.mp4
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 32 -preset 6 -an out-av1.mkv

这些 CRF 数值不能横向当成同一画质刻度,只适合作为实验起点。观察时至少看四件事:

  1. 文件大小与实际码率;
  2. 编码耗时;
  3. 暗部、文字边缘、头发、树叶、水面和快速运动处的伪影;
  4. 播放时 CPU 占用、功耗,以及播放器是否显示硬件解码。

比较时还要考虑计算和分发条件。新标准提供更高上限,但也要求更多计算和更完整的生态;慢 preset 可能省下一些码率,却要花成倍时间;固定码率便于控制带宽,CRF/CQ 则更适合让简单镜头少花、复杂镜头多花。