🎬 编解码技术可视化
通过对比表格和流程图深入理解视频编码标准
主流编码标准对比
| 特性 | H.264/AVC | H.265/HEVC | AV1 | VP9 |
|---|---|---|---|---|
| 发布年份 | 2003 | 2013 | 2018 | 2013 |
| 开发组织 | ITU-T/ISO | ITU-T/ISO | AOMedia | |
| 专利授权 | 💰 收费 | 💰 收费 | ✅ 免费 | ✅ 免费 |
| 压缩效率 | 基准 | +50% | +30% | +20% |
| 编码复杂度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 硬件支持 | ✅ 广泛 | ✅ 良好 | ⚠️ 发展中 | ✅ 良好 |
| 应用场景 | 实时通讯、直播 | 4K/8K视频 | 流媒体平台 | WebRTC |
编码效率与复杂度关系
graph LR
A[H.264/AVC
基准] --> B[VP9
+20%效率]
B --> C[H.265/HEVC
+50%效率]
C --> D[AV1
+30%效率]
A --> A1[编码速度: 快]
B --> B1[编码速度: 中等]
C --> C1[编码速度: 慢]
D --> D1[编码速度: 很慢]
style A fill:#c8e6c9
style B fill:#fff9c4
style C fill:#bbdefb
style D fill:#f3e5f5
H.264/AVC 详解
H.264编码架构
flowchart TB
subgraph Input["输入处理"]
A[原始帧] --> B[帧类型判断]
end
subgraph Prediction["预测编码"]
B --> C{帧类型}
C -->|I帧| D[帧内预测]
C -->|P/B帧| E[帧间预测]
E --> F[运动估计]
F --> G[运动补偿]
end
subgraph Transform["变换量化"]
D --> H[残差]
G --> H
H --> I[DCT变换]
I --> J[量化]
end
subgraph Encoding["熵编码"]
J --> K[CAVLC/CABAC]
K --> L[输出码流]
end
subgraph Loop["解码环路"]
J --> M[反量化]
M --> N[反变换]
N --> O[重建帧]
O --> P[去块滤波]
P --> Q[参考帧缓存]
Q --> G
end
style Input fill:#e3f2fd
style Prediction fill:#f3e5f5
style Transform fill:#fff9c4
style Encoding fill:#c8e6c9
帧内预测
- 4×4块: 9种模式
- 16×16块: 4种模式
- 利用空间相关性
- I帧的核心技术
帧间预测
- 运动估计精度: 1/4像素
- 多参考帧: 最多16帧
- 宏块分割: 7种模式
- P/B帧的核心
熵编码
- CAVLC: 较简单
- CABAC: 压缩率更高
- 基于上下文
- 自适应编码
H.265/HEVC 详解
H.265 vs H.264 技术对比
graph TB
subgraph H264["H.264/AVC"]
A1[宏块: 16×16]
A2[帧内预测: 9种]
A3[变换: 4×4/8×8 DCT]
A4[运动矢量精度: 1/4像素]
end
subgraph H265["H.265/HEVC"]
B1[CTU: 64×64]
B2[帧内预测: 35种]
B3[变换: 4×4~32×32]
B4[运动矢量精度: 1/4像素]
end
A1 --> B1
A2 --> B2
A3 --> B3
A4 --> B4
style H264 fill:#e3f2fd
style H265 fill:#c8e6c9
| 技术特性 | H.264 | H.265 | 改进 |
|---|---|---|---|
| 编码单元 | 宏块 16×16 | CTU 64×64 | 更灵活的分割 |
| 帧内预测 | 9种模式 | 35种模式 | 更精细的方向 |
| 变换尺寸 | 4×4, 8×8 | 4×4 ~ 32×32 | 更大变换块 |
| 并行工具 | 有限 | Tile/WPP | 更好的并行 |
| 环路滤波 | 去块滤波 | 去块+SAO | 减少伪影 |
CTU编码树单元结构
graph TB
A[CTU 64×64] --> B[Cu分割]
B --> C[CU 32×32]
B --> D[CU 32×32]
B --> E[CU 32×32]
B --> F[CU 32×32]
C --> C1[PU预测单元]
C --> C2[TU变换单元]
E --> E1[进一步分割]
E1 --> E2[CU 16×16]
E1 --> E3[CU 16×16]
style A fill:#667eea,color:#fff
style C fill:#c8e6c9
style D fill:#c8e6c9
style E fill:#f3e5f5
style F fill:#c8e6c9
AV1 编码标准
AV1编码特性
graph TB
A[AV1 AOMedia Video 1] --> B[开源免费]
A --> C[先进编码工具]
A --> D[超高压缩效率]
B --> B1[无专利费用]
B --> B2[AOMedia联盟]
B --> B3[Google主导]
C --> C1[更大的SB 128×128]
C --> C2[更多的帧内模式]
C --> C3[CDEF约束方向增强]
C --> C4[LR环路恢复滤波]
C --> C5[多符号算术编码]
D --> D1[比VP9节省30%]
D --> D2[与H.265相当]
D --> D3[编码时间更长]
style A fill:#667eea,color:#fff
style B fill:#c8e6c9
style C fill:#fff9c4
style D fill:#f3e5f5
🎬 AV1 应用现状
- YouTube:支持AV1编码播放
- Netflix:部分内容采用AV1
- 浏览器支持:Chrome、Firefox、Edge原生支持
- 硬件解码:新一代GPU逐步支持
VP9 编码标准
VP9编码流程
flowchart LR
A[输入帧] --> B[超级块分割
64×64]
B --> C[帧内/帧间预测]
C --> D[变换编码]
D --> E[量化]
E --> F[熵编码]
F --> G[输出码流]
E --> H[反量化]
H --> I[反变换]
I --> J[环路滤波]
J --> K[参考帧存储]
K --> C
style A fill:#e3f2fd
style G fill:#c8e6c9
VP9 优势
- 完全免费开源
- 编码速度快于AV1
- 硬件支持广泛
- WebRTC首选
VP9 劣势
- 压缩效率低于AV1
- 编码工具较少
- 不支持屏幕内容
- 生态不如H.264
视频编码通用流程
混合编码框架完整流程
flowchart TB
subgraph Input["输入模块"]
A1[原始视频] --> A2[预处理]
A2 --> A3[帧划分]
end
subgraph Prediction["预测模块"]
A3 --> B1{预测选择}
B1 -->|I帧| B2[帧内预测]
B1 -->|P/B帧| B3[帧间预测]
B3 --> B4[运动估计]
B4 --> B5[运动补偿]
end
subgraph Transform["变换量化模块"]
B2 --> C1[预测残差]
B5 --> C1
C1 --> C2[整数变换 DCT/DST]
C2 --> C3[量化 QP控制]
end
subgraph Encoding["熵编码模块"]
C3 --> D1[量化系数]
D1 --> D2[CABAC/CAVLC/Range Coding]
D2 --> D3[输出码流]
end
subgraph Loop["解码环路"]
C3 --> E1[反量化]
E1 --> E2[反变换]
E2 --> E3[重建残差]
E3 --> E4[预测值相加]
E4 --> E5[重建帧]
E5 --> E6[环路滤波 Deblock/SAO]
E6 --> E7[参考帧缓存]
E7 --> B5
end
style Input fill:#e3f2fd
style Prediction fill:#f3e5f5
style Transform fill:#fff9c4
style Encoding fill:#c8e6c9
style Loop fill:#bbdefb
1. 预测
2. 变换
3. 量化
4. 熵编码
编码核心四步骤
🔑 编码器选择指南
| 应用场景 | 推荐编码 | 原因 |
|---|---|---|
| 实时通讯 | H.264 | 硬件支持好、延迟低 |
| 4K/8K视频 | H.265 | 压缩效率高、硬件支持 |
| Web视频 | AV1/VP9 | 免费、浏览器支持 |
| 视频会议 | VP9 | WebRTC优化、免费 |