直播与短视频
直播与短视频知识分享
H.266/VVC编解码实战:超越H.265的新一代视频压缩技术全解析
H.266/VVC编解码实战:超越H.265的新一代视频压缩技术全解析
# H.266/VVC编解码实战:超越H.265的新一代视频压缩技术全解析
## 摘要
H.266/VVC是H.265/HEVC的继任者,官方测试码率比H.265降低50%。本文从VVC核心技术到FFmpeg/libvvc实战编码,全面解析如何在实际项目中应用VVC。
## 一、VVC vs H.265:技术对比
| 特性 | H.265/HEVC | H.266/VVC |
|------|--------------|-----------|
| 块划分 | CTU最大64×64 | CTU最大128×128,更灵活划分 |
| 帧内预测 | 35种方向 | 67种方向 + MIP模式 |
| 运动补偿 | 1/4像素精度 | 1/16像素精度 + GPM(几何分割) |
| 变换类型 | DCT-II | DCT-II + DST-VII + DCT-VIII(MST) |
| 量化 | 均匀量化 | LFNST(低频非可分离变换) |
| 熵编码 | CABAC | 改进CABAC |
| 压缩效率 | 基准 | 同等质量下码率降低50% |
| 编码复杂度 | 基准 | **10倍**(编码慢) |
| 解码复杂度 | 基准 | 2倍 |
## 二、VVC核心新技术
### 2.1 扩展块划分(Extended Block Partitioning)
H.265只支持四叉树(Quadtree)划分,VVC引入**四叉树+二叉树+三元树**混合划分:
```
CTU (128×128)
├── 四叉树划分:128×128 → 64×64 × 4
│ └── 二叉树划分:64×64 → 32×64 + 32×64(水平)
│ └── 三元树划分:64×64 → 16×64 + 32×64 + 16×64
└── 继续划分...
```
更灵活的划分意味着:
- 更好地适应不同纹理区域
- 减少划分冗余
- 编码效率提升约5-10%
### 2.2 帧内预测增强(Intra Prediction Enhancements)
```c
// VVC 67种帧内预测模式(H.265只有35种)
// 新增:矩阵帧内预测(MIP)
void intra_prediction_vvc(Block block) {
// 模式0-66:角度预测(更精细的角度)
// 模式67+:MIP模式(用矩阵乘法生成预测块)
if (use_mip) {
// MIP:用学得的矩阵压缩表示
// 适合平滑区域,比角度预测效果更好
apply_mip(block, mip_mode);
} else {
apply_angular_pred(block, intra_mode);
}
}
```
### 2.3 几何分割运动补偿(GPM)
```
传统运动补偿:每个块只有1个或2个运动向量
GPM:每个块可以沿分割线分成两个区域,每个区域独立运动补偿
```
```c
// GPM允许在每个编码块内使用两个不同的运动向量
// 特别适合运动边界(如前景物体移动、背景静止)
void gpm_prediction(Block block) {
// 选择分割模式:水平/垂直/两种对角线
PartitionMode mode = select_gpm_mode(block);
// 每个子区域独立运动补偿
predict_region(block.region[0], mv0);
predict_region(block.region[1], mv1);
}
```
## 三、FFmpeg编译libvvc支持
### 3.1 编译vvc参考软件(VVenc/VVdec)
```bash
# 克隆vvc参考编码器
git clone https://github.com/fraunhoferhhi/vvenc.git
cd vvenc
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
# 克隆vvc参考解码器
git clone https://github.com/fraunhoferhhi/vvdec.git
cd vvdec
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
```
### 3.2 编译FFmpeg with libvvc
```bash
# 安装依赖
sudo apt install -y nasm yasm libx264-dev libx265-dev
# 克隆FFmpeg
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
# 配置FFmpeg(启用libvvc)
./configure \
--enable-gpl \
--enable-libvvenc \
--enable-libvvdec \
--extra-cflags="-I/usr/local/include" \
--extra-ldflags="-L/usr/local/lib" \
--enable-nonfree
make -j$(nproc)
sudo make install
```
## 四、VVC实战编码
### 4.1 基础编码命令
```bash
# H.265编码(对比用)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium out_h265.mp4
# VVC编码(使用vvenc)
ffmpeg -i input.mp4 \
-c:v libvvenc \
-qp 32 \ # 量化参数(类似CRF)
-preset medium \ # 编码速度预设
-threads 8 \
out_vvc.mp4
# 查看压缩效果对比
ls -lh out_h265.mp4 out_vvc.mp4
# 预期:VVC文件比H.265小40-50%
```
### 4.2 常用编码参数
```bash
# 高质量编码(适合点播)
ffmpeg -i input.mp4 \
-c:v libvvenc \
-qp 22 \ # 更低QP = 更高质量
-preset slow \ # 更慢预设 = 更好压缩
-keyint 60 \ # 关键帧间隔(2秒@30fps)
-min-keyint 60 \
-scenecut 40 \ # 场景切换检测阈值
-threads 16 \
-c:a aac -b:a 128k \
out_high_quality.mp4
# 低延迟直播编码
ffmpeg -re -i rtmp://source/live \
-c:v libvvenc \
-qp 28 \
-preset fast \ # 快速编码
-tune zerolatency \
-g 60 \ # GOP大小
-b-frames 0 \ # 禁用B帧(降低延迟)
-refs 1 \ # 减少参考帧
-c:a aac \
-f flv rtmp://push/live
```
### 4.3 编码速度与质量平衡
| Preset | 编码速度 | 压缩效率 | 使用场景 |
|--------|---------|---------|---------|
| `ultrafast` | 1.0x(基准) | 60% | 实时直播 |
| `fast` | 0.5x | 85% | 低延迟直播 |
| `medium` | 0.2x | 95% | 点播编码 |
| `slow` | 0.1x | 100% | 高质量存档 |
| `placebo` | 0.05x | 102% | 极致质量(不推荐) |
## 五、VVC在直播场景的优化
### 5.1 低延迟配置
```bash
# RTMP低延迟直播(VVC)
ffmpeg -re -i rtmp://localhost/live \
-c:v libvvenc \
-qp 30 \
-preset fast \
-g 30 \ # 1秒GOP@30fps
-b-frames 0 \ # 无B帧
-refs 1 \ # 单参考帧
-tune zerolatency \
-f flv rtmp://push-server/live
# SRT低延迟传输(推荐)
ffmpeg -re -i rtmp://localhost/live \
-c:v libvvenc -qp 28 -preset fast \
-f mpegts srt://push-server:8890
```
### 5.2 自适应码率(ABR)
```bash
# 生成多码率版本
# 1080p@5Mbps
ffmpeg -i input.mp4 -c:v libvvenc -qp 24 -s 1920x1080 -b:v 5M output_1080p.mp4
# 720p@2.5Mbps
ffmpeg -i input.mp4 -c:v libvvenc -qp 28 -s 1280x720 -b:v 2.5M output_720p.mp4
# 480p@1Mbps
ffmpeg -i input.mp4 -c:v libvvenc -qp 32 -s 854x480 -b:v 1M output_480p.mp4
```
## 六、VVC专利与商用注意事项
| 问题 | 说明 |
|------|------|
| 专利授权 | VVC专利池比H.265更复杂,需向多个专利池付费 |
| 免费替代 | AOMedia的AV1(免专利费)是VVC的主要竞争对手 |
| 硬件支持 | 2026年新显卡开始支持VVC硬解 |
| 软件解码 | VVdec性能已可实时解码1080p@30fps(8核CPU) |
**推荐策略**:
- 点播存档:VVC(更好的压缩)
- 直播传输:H.265或AV1(更低延迟)
- 网页播放:AV1(浏览器原生支持)
## 七、未来展望:H.266的继任者
```
H.264 (AVC) → 2003年
H.265 (HEVC) → 2013年
H.266 (VVC) → 2020年标准发布
ECM (Exploratory Coding Model) → 下一代(预计2030年)
```
ECM目标:比VVC再提升20%压缩效率,重点优化:
- 神经网络辅助编码
- 更精细的块划分
- 超越块的传统编码工具
## 总结
VVC将视频压缩效率推到了新的高度,但编码复杂度和专利问题是商用的主要障碍。对于短视频平台,建议先用H.265过渡,同时跟踪AV1的生态成熟度和VVC硬件支持进展。
---
*本文由北科信息日采集系统自动生成,发布日期:2026-05-05*