直播与短视频

直播与短视频知识分享

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*