引言
在高清与超高清视频普及的今天,H.264 (AVC)、H.265 (HEVC) 以及新兴的 AV1 是支撑现代互联网视频流转的三大基石。本文将从核心编码概念、技术演进、AV1 的崛起以及码率控制策略四个维度进行深度拆解。
一、 视频编码与压缩:本质是一回事吗?
在进入技术细节前,我们需要明确一个根本性问题:视频编码(Encoding)的本质,几乎等同于视频压缩(Compression)。
1. 为什么“编码”即“压缩”?
如果不进行压缩,视频数据量是惊人的。以一个常见的 1080p、30fps、8-bit RGB 的原始视频(Raw Video)为例:
- 计算一秒钟的数据量:。
- 这意味着一分钟的视频就需要约 11 GB 的存储空间。
因此,视频编码器的核心任务就是寻找一种“速记法”,通过去除冗余信息,用尽可能小的体积还原尽可能真实的画面。
二、 视频编码核心概念
1. I/P/B 帧详解
- I 帧 (Intra-coded, 帧内编码帧):
- 原理:完整保留一帧所有信息。它是解码的起点和随机访问点。
- I 帧 vs IDR 帧:
- I 帧:是一个广义概念。在一个非 IDR 的 I 帧之后,后面的帧仍然可以参考该 I 帧之前的帧。这可能导致在拖动进度条时出现画面残留(花屏)。
- IDR 帧 (Instantaneous Decoding Refresh):是一种特殊的 I 帧。它具有“强制刷新”功能,解码器在遇到 IDR 帧时会清空参考帧缓存区(DPB),确保 IDR 帧之后的帧绝对不会参考其之前的任何帧。所有 IDR 帧都是 I 帧,但并非所有 I 帧都是 IDR 帧。
- P 帧 (Predictive, 前向预测帧):
- 原理:只记录与前一个参考帧(I 或 P)的运动矢量差异。
- B 帧 (Bi-predictive, 双向预测帧):
- 原理:同时参考前后帧(通常是一个 I/P 帧和一个 P 帧)。
- P/B 帧也有“特殊类型”吗?:
- 在 H.264/H.265 中,P/B 帧可以分为参考帧和非参考帧。
- 非参考 B 帧 (Non-reference B-frame):这是最常见的 B 帧,它不被任何其他帧参考。这意味着在网络拥塞或性能不足时,可以直接丢弃非参考 B 帧而不影响后续画面的解码,这在时域分级编码 (Temporal Scalability) 中非常关键。
- 参考 B 帧 (Reference B-frame):在更高效的编码模式下,B 帧也可以作为其他 B 帧的参考(常见于 Hierarchical B-frame 结构),从而进一步提升压缩效率。
2. GOP (Group of Pictures, 图像组) 与帧的关系
GOP 是 I/P/B 帧的组织单元。一个 GOP 是一组连续的画面,由一个 I 帧(通常是 IDR 帧)开始,后面跟着多个 P 帧和 B 帧。
GOP 的典型结构
一个典型的 GOP 序列如下所示:
I B B P B B P B B P ... I
- GOP 长度 (GOP Size/Length):指两个 I 帧之间的总帧数。
- 封闭 GOP vs 开放 GOP:
- 封闭 GOP (Closed GOP):该组内的 P/B 帧只参考本组内的 I 帧。这种结构适合切片流(如 HLS/DASH),因为切片可以从任意 I 帧独立开始解码。
- 开放 GOP (Open GOP):允许 B 帧参考前一个 GOP 的帧。压缩率更高,但拖动进度条时可能会出现短暂花屏。
关键区别:显示顺序 vs 解码顺序
由于 B 帧需要参考“未来”的帧,这导致了视频流中存在两种顺序:
- 显示顺序 (PTS, Presentation Time Stamp):观众看到的画面顺序:
I B B P。 - 解码顺序 (DTS, Decoding Time Stamp):解码器处理的顺序。为了解码第二个 B 帧,必须先解码它参考的 P 帧,因此顺序变为:
I P B B。
GOP 长度与 FPS 的配比建议
在实际编码中(如使用 FFmpeg、OBS 或硬件编码器),最常见的建议是 GOP 长度 = 1x 或 2x FPS(即每 1 秒或 2 秒一个 I 帧)。
为什么要这样设置?
- 随机访问(快进/快退):视频播放器只能从 I 帧开始解码。如果 GOP 设置为 10 秒(如 30fps,GOP=300),当你点击进度条时,播放器可能需要等待数秒来寻找最近的 I 帧,或者在解码出画面前先经历一段花屏。
- 抗丢包能力:在网络传输(如直播)中,如果丢失了一个 P 帧,画面会一直“糊”下去,直到下一个 I 帧出现才能恢复正常。1-2 秒的 GOP 意味着即使网络波动,画面最快能在 1 秒内自动修复。
- 直播延迟:在 HLS/DASH 等流媒体协议中,切片长度通常是 GOP 长度的倍数。较短的 GOP 有助于降低端到端的直播延迟。
- 压缩效率的平衡:虽然 GOP 越长(I 帧越少)压缩率越高,但边际效应递减。通常 GOP 超过 5 秒后,节省的码率已不明显,反而带来了巨大的解码压力和随机访问延迟。
3. NALU 与参数集 (SPS/PPS/VPS)
视频流并不是简单的像素数据,它被封装成一个个 NALU (Network Abstraction Layer Unit, 网络提取层单元)。其中最关键的是描述视频全局配置的“参数集”。
- SPS (Sequence Parameter Set, 序列参数集):
- 作用:包含整个视频序列的全局信息。
- 关键内容:编码 Profile(基准/高级)、Level、视频分辨率、帧率、色彩空间(YUV420 等)、最大参考帧数。
- PPS (Picture Parameter Set, 图像参数集):
- 作用:包含一帧或多帧图像的特定配置。
- 关键内容:熵编码模式(CAVLC/CABAC)、初始量化参数(QP)、切片(Slice)组信息。
- VPS (Video Parameter Set, 视频参数集) —— 仅 H.265/AV1:
- 作用:H.265 引入,用于描述多层视频流(如 3D 视频、可伸缩编码)的共享信息。
为什么它们至关重要?
- 解码前提:解码器在收到 I 帧之前,必须先解析出 SPS 和 PPS。否则,解码器根本不知道视频的长宽或编码级别,会导致解码失败。
- 出现频率:在直播流(如 RTMP)或录制的 TS 文件中,SPS/PPS 通常会周期性地出现在每个 IDR 帧之前。这样当用户中途进入直播间时,能立即获取参数集并开始解码,而不需要等待文件头。
WARNING丢包风险:如果 SPS/PPS 在传输中丢失,即便后续的 I 帧和 P 帧完整,整个 GOP 也会因为失去“解码说明书”而彻底无法播放。
三、 H.264 vs H.265:块划分的革命
1. 从 MB (宏块) 到 CTU (编码树单元)
- H.264:固定 16x16 宏块。在 4K 视频中,过细的划分会导致冗余的预测数据占据过多带宽。
- H.265:引入 CTU,最大支持 64x64。它能像拼图一样,在平坦区域用大块,在复杂区域用小块。
2. 预测模式的增强
H.265 将帧内预测方向从 H.264 的 9 种增加到了 35 种,显著提升了画面边缘的细腻度。
四、 AV1:开源与效率的新标杆
AV1 (AOMedia Video 1) 是由 Google、Netflix 等巨头组成的 AOM 联盟推出的开源、免专利费格式。
1. 为什么需要 AV1?
H.265 虽然优秀,但其专利授权极其复杂且昂贵。AV1 的出现不仅解决了成本问题,更在压缩效率上实现了对 H.265 的超越。
2. 核心技术优势
- 更灵活的划分:AV1 支持多达 10 种 不同的块划分模式(不仅仅是 H.265 的四叉树),且块大小可达 128x128。
- 调色板编码 (Palette Mode):对于人工合成的内容(如游戏画面、网页),AV1 能识别出少数几种主要颜色进行编码,效率极大提升。
- 胶片颗粒合成 (Film Grain Synthesis):AV1 会在编码时移除胶片噪点,并在解码端重新生成。这能节省大量浪费在“编码随机噪点”上的码率。
IMPORTANT压缩率对比:在同等画质下,AV1 通常比 H.265 节省约 30% 的带宽,比 H.264 节省约 50% 以上。
五、 码率控制策略 (Rate Control)
| 模式 | 名称 | 原理 | 适用场景 |
|---|---|---|---|
| CBR | 固定码率 | 强制每秒输出固定数据量。 | 带宽受限的窄带直播。 |
| VBR | 动态码率 | 复杂画面给高码率,简单画面给低码率。 | 电影、点播视频。 |
| CRF | 恒定质量因子 | 追求视觉质量一致。 | 离线转码、压片。 |
总结:该如何选择?
| 特性 | H.264 (AVC) | H.265 (HEVC) | AV1 |
|---|---|---|---|
| 压缩效率 | 基准 (100%) | 提升 ~40% | 提升 ~60-70% |
| 编码速度 | 极快 | 中等 | 较慢 (需硬件加速) |
| 专利费用 | 低 | 高昂/复杂 | 完全免费 |
| 兼容性 | 极其广泛 | 现代设备普遍支持 | 普及中 (RTX 30+, Apple A17 Pro+) |
建议策略:
- 老旧设备兼容:无脑选择 H.264。
- 移动端/电视 4K 点播:选择 H.265 以节省流量。
- 极高画质/节省 CDN 带宽:如果客户端支持硬件解码,优先使用 AV1。