H.266/VVC 双雄对决:VTM vs VVenC 深度对比分析

本文对 H.266/VVC 标准的两大开源实现------官方参考软件 VTM 与 Fraunhofer HHI 优化编码器 VVenC------进行全方位深度对比,涵盖项目定位、架构设计、编码性能、源码结构、工程实践等多个维度。


一、介绍:VVC 标准与两大实现

1.1 VVC 标准简述

2020 年 7 月,ITU-T VCEG 与 ISO/IEC MPEG 联合发布了 Versatile Video Coding (VVC) ,标准编号为 Rec. ITU-T H.266 | ISO/IEC 23090-3。作为 HEVC/H.265 的继任者,VVC 目标是在同等主观质量下节省约 50% 码率,代价是编码复杂度提升约 10 倍、解码复杂度提升约 2 倍。

VVC 的核心新增工具包括:

  • QTMT 划分:四叉树 + 多类型树(二叉树/三叉树),取代 HEVC 的单一四叉树
  • 67 种帧内预测模式(HEVC 仅 35 种)+ 宽角度帧内预测
  • 仿射运动补偿(Affine Motion Compensation)
  • 解码端运动矢量修正(DMVR)
  • 自适应环路滤波器(ALF)+ 亮度映射与色度缩放(LMCS)
  • 依赖量化(Dependent Quantization, DQ)
  • 多变换选择(MTS):DCT-2 / DCT-8 / DST-7
  • 屏幕内容编码(SCC)、360° 视频、HDR 等专用工具

1.2 两大实现概览

维度 VTM VVenC
全称 VVC Test Model Fraunhofer Versatile Video Encoder
开发方 JVET(VCEG + MPEG 联合) Fraunhofer HHI(JVET 核心成员)
仓库地址 vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM github.com/fraunhoferhhi/vvenc
首次发布 2018 年(VTM 1.0) 2020 年 9 月(VVenC 0.1)
当前版本 ~v25+(持续迭代) v1.14.0(2026 年)
许可证 BSD 3-Clause Clear BSD
定位 参考软件:正确性优先 生产级编码器:速度与效率优先
SIMD 优化 SSE4.1/AVX/AVX2, NEON/SVE/SVE2, LSX
多线程 混合并行(GOP + CTU + WPP + Tile)
码率控制 基础 CQP 单遍/双遍 VBR + CQF 封顶模式
感知优化 XPSNR 驱动的 QPA

一句话总结:VTM 是标准的"字典",VVenC 是标准的"产品"。VVenC 之于 VTM,就像 x265 之于 HM------前者面向工程落地,后者面向标准验证。


二、原理:架构设计与设计哲学

2.1 VTM 的设计哲学:正确性至上

VTM 的核心设计目标是 正确性、完整性和可读性。它要回答的问题是:"VVC 标准的每个语法元素和编码工具,是否被正确实现了?"

因此 VTM 的架构设计遵循以下原则:

  1. 工具全覆盖:标准中定义的每个编码工具都必须有对应实现,不论复杂度多高
  2. 代码可读性优先:变量命名规范、注释详尽,方便研究者理解算法逻辑
  3. 不做性能优化:不使用 SIMD 指令集、不支持多线程,保证代码逻辑清晰
  4. 编解码对称:同时包含完整编码器(EncoderApp)和解码器(DecoderApp)
  5. 配置文件驱动 :通过 cfg/ 目录下的配置文件控制编码参数

VTM 的本质是一个 标准验证平台。JVET 在每次会议提案中,都需要基于 VTM 进行 Core Experiment(核心实验),验证新工具的压缩增益。VTM 的代码结构直接映射了 VVC 标准的规范文本结构。

2.2 VVenC 的设计哲学:工程效率至上

VVenC 回答的问题是:"VVC 标准如何在实际产品中高效运行?"

VVenC 并非从零开发,而是 基于 VTM 10.0 裁剪后重建。具体做法是:

  1. 保留 VTM 的 VVC 划分框架(QTMT)、基本帧间/帧内预测和环路滤波
  2. 重新实现大部分编码工具:许多工具采用替代实现方案,在达到相同压缩增益的同时大幅提升速度
  3. 搜索空间剪枝:基于 Pareto 最优分析,为不同预设设计不同的搜索空间裁剪策略
  4. SIMD 全覆盖:对运动估计、变换、量化、环路滤波、仿射预测等关键路径进行 AVX2/NEON 向量化
  5. 混合多线程:GOP 级、帧级、CTU 级并行融合,通过单一线程池调度

2.3 架构对比

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      VTM 架构                                │
│                                                             │
│  EncoderApp ──► EncoderLib ──► CommonLib                   │
│       │              │              │                       │
│  cfg 文件驱动    全工具实现     共享数据结构                   │
│                  (无优化)      (Picture, Slice, CU)          │
│                                                             │
│  特点:单线程、无 SIMD、工具全覆盖、代码即规范                  │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                     VVenC 架构                               │
│                                                             │
│  vvencapp ──┐                                               │
│              ├─► vvenc (C API) ──► EncoderLib ──► CommonLib │
│  vvencFFapp ┘        │               │              │       │
│                    VVEncImpl     搜索剪枝+RDO    共享数据结构  │
│                       │            │              │       │
│                   NoMallocThreadPool  SIMD (x86/ARM)       │
│                   (混合并行)        (AVX2/NEON/SVE)         │
│                                                             │
│  特点:多线程、SIMD 全覆盖、预设驱动、Pareto 优化搜索空间       │
└─────────────────────────────────────────────────────────────┘

2.4 模块对照

模块 VTM VVenC 差异说明
应用层 EncoderApp, DecoderApp + 工具链 vvencapp, vvencFFapp VVenC 仅含编码器,解码交给 VVdeC
API 层 无独立 API,直接编译为可执行文件 C API (vvenc.h),ABI 稳定 VVenC 支持库集成
编码库 EncoderLib(全工具) EncoderLib(重写+剪枝) VVenC 重新实现 MTS/ISP 等工具
公共库 CommonLib CommonLib(继承自 VTM) 核心数据结构一致
解码库 DecoderLib(完整) DecoderLib(仅重建环路) VVenC 仅保留编码所需的最小解码
线程池 NoMallocThreadPool VVenC 独有,零分配线程池
SIMD x86/ARM/LoongArch 全覆盖 VVenC 独有
配置 cfg 文件 + 命令行 vvenc_config 结构体 + 预设 VVenC 更面向 API 集成

三、公式:率失真优化与性能评价

3.1 率失真优化(RDO)

VVC 的编码决策核心是率失真优化,目标是在码率 R 和失真 D 之间找到最优平衡:

J=D+λ⋅RJ = D + \lambda \cdot RJ=D+λ⋅R

其中 λ\lambdaλ 由量化参数 QP 导出:

λ=0.85×2QP−123.0\lambda = 0.85 \times 2^{\frac{QP - 12}{3.0}}λ=0.85×23.0QP−12

对于分裂决策(VVC 的 QTMT 划分),使用 G-BFOS 算法递归求解:

Js=∑i=1kJs,i+λ⋅RsJ_s = \sum_{i=1}^{k} J_{s,i} + \lambda \cdot R_sJs=i=1∑kJs,i+λ⋅Rs

其中 Js,iJ_{s,i}Js,i 是第 iii 个子块的最优编码代价,RsR_sRs 是编码分裂决策的码率。VVC 有多种竞争分裂方式(二叉树、三叉树、水平/垂直),因此搜索空间随深度 指数增长,远超 HEVC 的线性增长。

VTM 对所有分裂模式进行完整的 RDO 计算;VVenC 通过启发式剪枝提前终止部分分支,以少量质量损失换取大幅速度提升。

3.2 BD-rate 评价方法

性能对比使用 Bjøntegaard Delta Rate (BD-rate):

  1. 在 4 个 QP 点(22, 27, 32, 37)分别编码
  2. 计算每个 QP 点的 PSNR 和码率
  3. 在 log-rate vs. PSNR 平面上进行三次多项式拟合
  4. 计算两条 RD 曲线之间的面积差

BD-rate=∫PSNRmin⁡PSNRmax⁡(Rtest−Ranchor) dPSNR∫PSNRmin⁡PSNRmax⁡Ranchor dPSNR×100%\text{BD-rate} = \frac{\int_{\text{PSNR}{\min}}^{\text{PSNR}{\max}} (R_{\text{test}} - R_{\text{anchor}}) \, d\text{PSNR}}{\int_{\text{PSNR}{\min}}^{\text{PSNR}{\max}} R_{\text{anchor}} \, d\text{PSNR}} \times 100\%BD-rate=∫PSNRminPSNRmaxRanchordPSNR∫PSNRminPSNRmax(Rtest−Ranchor)dPSNR×100%

BD-rate 为负值表示码率节省(越好)。质量指标使用加权 PSNR:

PSNRYUV=6×PSNRY+PSNRCb+PSNRCr8\text{PSNR}{\text{YUV}} = \frac{6 \times \text{PSNR}Y + \text{PSNR}{Cb} + \text{PSNR}{Cr}}{8}PSNRYUV=86×PSNRY+PSNRCb+PSNRCr

3.3 VVenC 感知优化模型

VVenC 引入了基于 XPSNR 心理视觉模型的感知 QP 自适应(QPA):

QPadapted=f(QPbase,σlocal2,XPSNRref)\text{QP}{\text{adapted}} = f(\text{QP}{\text{base}}, \sigma_{\text{local}}^2, \text{XPSNR}_{\text{ref}})QPadapted=f(QPbase,σlocal2,XPSNRref)

其中 σlocal2\sigma_{\text{local}}^2σlocal2 是局部方差,反映纹理复杂度。QPA 在纹理平坦区域适当提高 QP(降低质量),在纹理丰富区域降低 QP(提升质量),使主观质量更均匀。


四、图示:性能数据可视化

4.1 编码速度对比(VVenC 1.14.0 vs VTM-19.2)

以下数据基于 JVET 通用测试条件(CTC),AMD EPYC 7502P 32 核处理器,8 线程:

复制代码
VVenC 各预设相对 VTM 的加速比(HD+UHD 平均)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

faster  ████████████████████████████████████████████  2400x
fast    ██████████████████████████████████████        1100x
medium  █████████████████                              330x
slow    ██████████                                      87x
slower  ██                                              19x

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VTM 基准 = 1x

4.2 压缩效率对比(BD-rate vs HM-17.0)

复制代码
PSNR_YUV BD-rate vs HM-17.0(负值 = 码率节省)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

VTM CTC     ██████████████████████████████████████████  -43.0%
VVenC slower █████████████████████████████████████████   -42.1%
VVenC slow   ████████████████████████████████████        -39.1%
VVenC medium ███████████████████████████████             -35.1%
VVenC fast   ████████████████████████                    -25.8%
VVenC faster █████████████                               -13.3%

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0% = HM 性能基准

4.3 速度-质量 Pareto 前沿

复制代码
         质量提升 ↑
         │
   -43% ●──●─── VTM CTC
         │   ╲
   -42% │    ●─── VVenC slower
         │     ╲
   -39% │      ●─── VVenC slow
         │       ╲
   -35% │        ●─── VVenC medium ★推荐
         │         ╲
   -26% │          ●─── VVenC fast
         │           ╲
   -13% │            ●─── VVenC faster
         │
         └─────────────────────────────→ 编码速度
          1x   19x  87x  330x 1100x 2400x

4.4 码率控制性能

VVenC 码率控制模式对比(Intra 周期 = 1s,BD-rate 相对固定 QP):

预设 单遍 BD-rate 单遍时间 双遍 BD-rate 双遍时间
faster +1.91% 113% +0.17% 118%
fast +2.24% 106% +0.91% 115%
medium +2.25% 106% +1.08% 110%
slow +2.46% 105% +1.26% 107%
slower +2.77% 107% +1.36% 107%

亮点:双遍码率控制仅增加约 7-18% 编码时间,BD-rate 偏差可低至 0.17%。码率偏差方面,单遍平均约 2%,双遍平均约 1.3%。


五、踩坑点:实际使用中的坑

坑 1:VTM 编码速度极慢

VTM 编码 1080p 视频可能需要 数分钟/帧 ,编码一段 10 秒 30fps 的 4K 视频可能需要 数天

建议:日常开发测试用 VVenC,仅在需要标准一致性验证或算法研究时用 VTM。

坑 2:VVenC 的 medium 预设默认开启多线程

VVenC medium 预设默认启用多线程并行(WPP + 帧级并行),但某些 CI 环境下多线程会导致非确定性输出。

建议 :CI 测试中使用 --threads 1 强制单线程,或编译时启用 -DVVENC_FFP_CONTRACT_OFF=On 保证跨平台比特一致。

坑 3:ARM 平台浮点收缩问题

VVenC 在 ARM (AArch64) 上默认允许编译器使用 FMA(融合乘加)指令,这可能导致跨平台输出不匹配。

建议

bash 复制代码
# CMake 方式
cmake .. -DVVENC_FFP_CONTRACT_OFF=On

# Makefile 方式
make install-release ffp-contract-off=On

坑 4:VVenC 移除了 LMCS

从 v1.14.0 开始,VVenC 弃用并移除了 LMCS(亮度映射与色度缩放)工具。如果用旧版本编码的码流用新版本解码可能存在差异。

建议:升级版本前检查 changelog,关注工具移除信息。

坑 5:VTM 与 VVenC 配置参数不互通

VTM 使用 cfg 文件 + 命令行参数,VVenC 使用 vvenc_config 结构体 + 预设系统。两者的参数命名和含义有差异,不能直接迁移配置。

建议 :VVenC 的 vvencFFapp 提供了与 VTM 类似的细粒度控制参数,可以作为过渡桥梁。

坑 6:x265 的 SSE 编译要求

VVenC 要求 x86 架构至少支持 SSE 4.1。在老旧 CPU 上加载 libvvenc 会触发非法指令错误。

建议:v1.13.1 已修复此问题并明确要求 SSE 4.1,部署前确认目标平台支持。

坑 7:VTM 的 GitLab 仓库访问

VTM 托管在 Fraunhofer HHI 的内部 GitLab (vcgit.hhi.fraunhofer.de),国内访问可能不稳定。

建议 :使用 GitHub 镜像仓库(如 ELEC5870/VVCSoftware_VTM),或配置代理。


六、源码拆解:代码结构深度对比

6.1 VTM 源码结构

复制代码
VVCSoftware_VTM/
├── source/
│   ├── App/                         # 应用程序层
│   │   ├── EncoderApp/              #   编码器入口 (EncoderApp.cpp)
│   │   ├── DecoderApp/              #   解码器入口 (DecoderApp.cpp)
│   │   ├── BitstreamExtractorApp/   #   码流提取工具
│   │   ├── SEIFilmGrainApp/         #   胶片颗粒 SEI 工具
│   │   ├── SEIRemovalApp/           #   SEI 删除工具
│   │   ├── StreamMergeApp/          #   码流合并工具
│   │   └── SubpicMergeApp/          #   子图合并工具
│   └── Lib/
│       ├── CommonLib/               # 公共库(编解码共用)
│       │   ├── CommonDef.h          #   全局定义
│       │   ├── Picture.h/.cpp       #   图像数据结构
│       │   ├── TypeDef.h            #   类型定义(VVC 语法)
│       │   ├── Slice.h/.cpp         #   Slice 头解析与管理
│       │   ├── CodingStructure.h    #   编码结构(CU/PU/TU)
│       │   ├── IntraPrediction.cpp  #   帧内预测
│       │   ├── InterPrediction.cpp  #   帧间预测
│       │   ├── TransformModule.cpp  #   变换
│       │   ├── Quant.cpp            #   量化
│       │   ├── LoopFilter.cpp       #   环路滤波(DBF/SAO/ALF)
│       │   └── RomArrays.cpp        #   查找表
│       ├── EncoderLib/              # 编码器专用库
│       │   ├── EncTop.h/.cpp        #   编码器顶层控制
│       │   ├── EncGOP.cpp           #   GOP 管理
│       │   ├── EncSlice.cpp         #   Slice 编码
│       │   ├── EncCu.cpp            #   CU 级编码决策(核心)
│       │   ├── InterSearch.cpp      #   帧间搜索
│       │   ├── IntraSearch.cpp      #   帧内搜索
│       │   ├── MotionEstimation.cpp #   运动估计
│       │   ├── RateCtrl.cpp         #   码率控制
│       │   └── EncReshape.cpp       #   LMCS 重塑
│       ├── DecoderLib/              # 解码器专用库
│       │   ├── DecTop.cpp           #   解码器顶层
│       │   ├── DecSlice.cpp         #   Slice 解码
│       │   └── DecCu.cpp            #   CU 解码
│       └── Utilities/               # I/O 工具
│           ├── YuvFileIO.cpp        #   YUV 文件读写
│           └── MsgLog.cpp           #   日志
├── cfg/                             # 编码配置文件
│   ├── encoder_intra_vtm.cfg        #   全帧内(AI)
│   ├── encoder_randomaccess_vtm.cfg #   随机存取(RA)
│   ├── encoder_lowdelay_vtm.cfg     #   低延迟 B(LDB)
│   └── encoder_lowdelay_P_vtm.cfg   #   低延迟 P(LDP)
├── doc/                             # 技术文档与软件手册
└── CMakeLists.txt

VTM 代码特点

  • EncCu.cpp 是编码决策的核心,包含完整的 QTMT 划分搜索逻辑
  • 每个编码工具都有独立的搜索/决策函数,逻辑清晰但无任何性能优化
  • TypeDef.h 包含所有编译时开关,通过宏定义控制工具启用

6.2 VVenC 源码结构

复制代码
vvenc/
├── source/
│   ├── App/
│   │   ├── vvencapp/                # 简化编码器(预设驱动)
│   │   │   └── vvencapp.cpp
│   │   └── vvencFFapp/              # 全功能专家编码器
│   │       └── vvencFFapp.cpp
│   └── Lib/
│       ├── vvenc/                   # 公共 API 层(C 接口)
│       │   ├── vvenc.h              #   公共头文件
│       │   ├── vvencCfg.h           #   配置结构体定义
│       │   ├── vvencimpl.cpp        #   API 实现封装
│       │   └── CMakeLists.txt       #   构建 SIMD 分发库
│       ├── CommonLib/               # 公共库(继承自 VTM + 优化)
│       │   ├── CommonDef.h
│       │   ├── Picture.h/.cpp       #   优化内存布局
│       │   ├── TypeDef.h
│       │   ├── DepQuant.cpp         #   依赖量化(含 SIMD)
│       │   ├── x86/                 #   x86 SIMD 实现
│       │   │   ├── DepQuantX86.h
│       │   │   ├── FixMissingIntrin.h
│       │   │   └── ...              #   AVX2/SSE4.1 内联函数
│       │   ├── arm/                 #   ARM SIMD 实现
│       │   │   └── ...              #   NEON/SVE 内联函数
│       │   └── ...                  #   其余与 VTM 对应
│       ├── EncoderLib/              # 编码器库(重写 + 优化)
│       │   ├── EncLib.h/.cpp        #   编码器顶层
│       │   ├── EncGOP.h/.cpp        #   GOP 管理 + 多线程调度
│       │   ├── EncPicture.cpp       #   单帧编码协调
│       │   ├── EncStage.h           #   编码阶段抽象(流水线)
│       │   ├── RateCtrl.h           #   码率控制(单遍/双遍)
│       │   └── GOPCfg.h/.cpp        #   GOP 结构配置
│       ├── DecoderLib/              # 最小化解码器(仅重建环路)
│       └── apputils/                # 应用工具
│           ├── VVEncAppCfg.h        #   命令行解析
│           └── YuvFileIO.h          #   YUV I/O
├── thirdparty/
│   └── simde/                      # SIMDE 跨平台 SIMD 兼容层
├── include/vvenc/                   # 公共头文件
├── cfg/                             # 配置文件
├── test/                            # 测试套件
│   ├── vvenclibtest/                #   库单元测试
│   └── vvencinterfacetest/          #   API 接口测试
└── CMakeLists.txt

6.3 关键代码差异

(1) 多线程模型

VTM :完全单线程,EncGOP::compressGOP() 顺序处理每一帧。

VVenC :混合并行模型,核心在 EncGOP 中:

cpp 复制代码
// VVenC EncGOP.h 中的关键成员
NoMallocThreadPool* m_threadPool;       // 零分配线程池
PicList             m_procList;         // 正在处理的图片列表
PicList             m_freePicEncoderList; // 空闲图片编码器

// 并行策略:
// 1. GOP 级:多个 GOP 可并行处理
// 2. 帧级:同一 GOP 内无依赖关系的帧可并行
// 3. CTU 级:WPP(Wavefront Parallel Processing)
// 4. Tile 级:独立 Tile 并行编码

VVenC 通过 m_mtProfile 参数控制并行强度(0-3),-1 为自动选择。

(2) SIMD 优化分发

VTM:直接使用标量 C++ 代码。

VVenC:运行时 SIMD 分发机制:

cpp 复制代码
// VVenC TypeDef.h 中的 SIMD 架构枚举
enum SIMD_E_ARCH {
  SCALAR = 0,
  SSE41,    // x86 最低要求
  SSE42,
  AVX,
  AVX2,     // 主要优化目标
  AVX512,
  NEON,     // ARM
  SVE,
  SVE2,
  LSX,      // LoongArch64
};

// 编译时分离构建,运行时函数指针分发
// 避免编译器将高级指令泄漏到主二进制中

VVenC 将 SIMD 代码编译为独立的目标文件(如 vvenc_x86_simd),在初始化时根据 CPU 特性选择最优代码路径。

(3) 搜索空间剪枝

VTMEncCu::compressCtu() 对每个 CTU 进行完整的 QTMT 递归搜索,测试所有分裂模式。

VVenC:基于预设的 Pareto 优化配置,在不同预设下启用不同的剪枝策略:

  • faster:激进的提前终止,仅测试少量模式
  • medium:平衡模式,关键决策点保留完整搜索
  • slower:接近 VTM 的完整搜索,但仍有 SIMD 加速
(4) 码率控制

VTM:基础 CQP(固定 QP),支持简单的码率控制。

VVenC:多模式码率控制:

  • 单遍 VBR:GOP 级别控制,带短时前瞻窗口
  • 双遍 VBR:首遍收集全序列统计,二遍优化分配
  • CQF 封顶模式(v1.12.0+):结合 QP 与 QPA,可设最大码率上限
(5) API 设计

VTM :无独立 API,直接编译为 EncoderApp 可执行文件,参数通过命令行和 cfg 文件传入。

VVenC:提供 C 语言 API,ABI 稳定:

c 复制代码
// VVenC C API 典型使用流程
vvenc_config cfg;
vvenc_config_default(&cfg);
vvenc_config_parse(&cfg, "preset", "medium");
vvenc_config_parse(&cfg, "qp", "32");

vvenc_encoder* enc = vvenc_encoder_create();
vvenc_encoder_init(enc, &cfg);

// 逐帧编码
vvencYUVBuffer yuvBuf;
vvencAccessUnit au;
vvenc_encoder_encode(enc, &yuvBuf, &au, &ret);

// 刷新剩余码流
vvenc_encoder_flush(enc, &au);

// 释放
vvenc_encoder_close(enc);

七、效果对比:综合评测

7.1 编码速度

VVenC 在所有预设下都远超 VTM:

对比项 VTM-19.2 VVenC medium VVenC faster
相对速度 1x 330x 2400x
1080p 编码时间 ~小时级 ~秒级 ~亚秒级
4K 编码时间 ~天级 ~分钟级 ~秒级

7.2 压缩效率

VVenC slower 预设的压缩效率已非常接近 VTM CTC 配置:

对比项 VTM CTC VVenC slower VVenC medium
PSNR_YUV BD-rate vs HM -43.0% -42.1% -35.1%
MS-SSIM BD-rate vs HM -47.0% -45.6% -39.4%
与 VTM 的效率差距 基准 ~0.9% ~7.9%

7.3 功能完整度

功能 VTM VVenC
全部 VVC 编码工具 ✅ 完整 ⚠️ 大部分(LMCS 已移除)
编码器
解码器 ✅ 完整 ❌ 仅重建环路(用 VVdeC)
一致性测试码流
屏幕内容编码 (SCC) ✅ 完整 ⚠️ 检测+部分优化
多层扩展
数字签名 SEI ✅ (OpenSSL)
HDR/WCG ✅ (PQ/HLG/BT.2020)
码率控制 基础 ✅ 单遍/双遍/CQF
感知优化 ✅ XPSNR QPA
多线程 ✅ 混合并行
SIMD ✅ 全平台
C API 集成 ✅ ABI 稳定

7.4 适用场景推荐

场景 推荐 理由
VVC 标准研究/学习 VTM 代码即规范,工具全覆盖
算法提案验证 VTM JVET 要求基于 VTM 出实验结果
一致性测试码流生成 VTM 唯一权威来源
商用编码产品开发 VVenC 速度快、有 API、可集成
视频流媒体服务 VVenC medium 预设 + 码率控制
实时编码/直播 VVenC faster 预设 + 低延迟配置
离线高质量编码 VVenC slower 预设,接近 VTM 质量
跨平台部署 VVenC SIMD 全覆盖 + C API
编解码器性能分析 两者 VTM 做上限基准,VVenC 做工程基准

7.5 生态关系图

复制代码
          VVC 标准 (H.266 / ISO 23090-3)
                    │
         ┌──────────┴──────────┐
         │                     │
    JVET 标准化               Fraunhofer HHI
    (VCEG + MPEG)            (JVET 核心成员)
         │                     │
    ┌────┴────┐          ┌─────┴─────┐
    │   VTM   │          │  VVenC    │
    │ 参考软件 │◄──基于──│ 优化编码器 │
    └────┬────┘          └─────┬─────┘
         │                     │
    ┌────┴────┐          ┌─────┼─────┐
    │EncoderApp│          │vvencapp  │
    │DecoderApp│          │vvencFFapp│
    │ 工具链   │          │libvvenc  │
    └─────────┘          └─────┬─────┘
                              │
                    ┌─────────┴─────────┐
                    │                   │
                VVdeC              FFmpeg VVC
              (优化解码器)          (集成支持)

八、版本演进与未来

8.1 VTM 版本里程碑

版本 时间 里程碑
VTM 1.0 2018 初版,基于 BMS 框架
VTM 5.0 2019 主要编码工具基本成型
VTM 10.0 2020.07 配合 VVC 标准正式发布
VTM 13.0 2021 CTC 基准版本
VTM 19.0 2023 VVenC 性能对比锚点
VTM 25+ 2026 持续迭代,增加 SEI 扩展

8.2 VVenC 版本演进

版本 时间 关键改进
0.1 2020.09 首版,基于 VTM 10.0,4 个预设
1.0.0 2021.05 5 个预设,多线程支持
1.7.0 2022 ARM SIMD 优化,切换至 EPYC 测试平台
1.11.0 2024.02 帧间并行完成,矢量化 DQ,SCC 检测改进
1.12.0 2024.06 CQF 码率封顶模式,MTProfile 参数
1.13.0 2025 大量 ARM SVE 优化,多 GOP 并行,胶片颗粒分析
1.14.0 2026 移除 LMCS,ARM SVE/SVE2 完善,FFP 收缩控制

8.3 第三方生态

除 VTM 和 VVenC 外,VVC 生态中还有其他值得关注的实现:

  • VVdeC:Fraunhofer HHI 的优化 VVC 解码器,VVenC 的解码端搭档
  • uvg266:学术开源 VVC 帧内编码器,单线程比 VVenC 快 2 倍以上
  • OpenVVC:INSA Rennes 开发的实时 VVC 解码器,支持 FFplay/VLC 集成
  • FFmpeg VVC:FFmpeg 内置的 VVC 解码支持
  • Intel IPEX / NVIDIA NVENC:硬件加速 VVC 编码方案

九、总结

VTM 和 VVenC 并非竞争关系,而是 互补的生态伙伴

  • VTM 是 VVC 标准的"金标准"------它定义了 VVC 编码的理论上限,是所有提案验证的基准。代码即规范,每一个函数都映射着标准文本的一条语义规则。它的价值在于 正确性和权威性,而非工程效率。

  • VVenC 是 VVC 标准的"工程化"------它在 VTM 的基础上重新设计架构,通过 SIMD 向量化、混合多线程、搜索空间剪枝和感知优化,将 VVC 从"实验室"推向了"生产线"。它的价值在于 实用性和性能

对于视频编码研究者和工程师来说,理解两者的差异和关系至关重要:用 VTM 学习标准,用 VVenC 构建产品。在实际项目中,可以先基于 VTM 验证算法思路,再在 VVenC 框架中实现工程优化。

VVenC 当前 1.14.0 版本的 medium 预设(多线程 + 可选 QPA)已被官方推荐为编码速度与压缩性能的最佳平衡点------相比 VTM 加速 330 倍,相比 HM 节省 35% 码率,且仅需 8 线程即可实现。对于大多数实际应用场景,这已经是一个可以直接部署的方案。


参考资料

  1. B. Bross et al., "Overview of the Versatile Video Coding (VVC) Standard and its Applications," IEEE TCSVT, 2021.
  2. A. Wieckowski et al., "VVenC: An Open And Optimized VVC Encoder Implementation," IEEE ICMEW, 2021.
  3. A. Wieckowski et al., "VVC Search Space Analysis Including an Open, Optimized Implementation," IEEE TCSVT, 2022.
  4. VTM 仓库: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
  5. VVenC 仓库: https://github.com/fraunhoferhhi/vvenc
  6. VVenC Wiki (Encoder Performance): https://github.com/fraunhoferhhi/vvenc/wiki/Encoder-Performance
  7. VVenC DeepWiki: https://deepwiki.com/fraunhoferhhi/vvenc
  8. H. Touzani et al., "Complexity Analysis of the VVenC Versus VVC Encoder," IJEECS, 2024.
  9. ITU-T H.266 / ISO/IEC 23090-3 (VVC Standard), 2020.
相关推荐
无线视频解决方案5 小时前
HDMI直出vsMIPI转接对比:AM8360D为何能省2颗芯片
音视频·无线图传·炬力北方
ai产品老杨5 小时前
边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)
性能优化·音视频
程序员老陆7 小时前
OpenGL 在视频渲染里的角色:它到底加速了什么?
音视频·gpu·opengl
熊猫钓鱼>_>7 小时前
Seedance 2.0 技术深度解析:重构AI视频生成的世界模型新范式
人工智能·笔记·ai·重构·音视频·变革·sedence2.0
弈语道破AI7 小时前
3D渲染不再熬时间!即梦 Seedance 2.5 具备3D白模渲染功能的AI视频生成工具
人工智能·3d·音视频
AI创界者7 小时前
最新 ComfyUI + LTX-2.5 本地一键整合包:文生视频/图生视频/数字人全流程指南
人工智能·aigc·音视频
阿童木写作8 小时前
速卖通卖家图片翻译工具:批量图片翻译+视频字幕+智能抠图一站式搞定
大数据·人工智能·python·音视频
hans汉斯17 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
AI服务老曹20 小时前
AI视频分析API常见问题和排查清单
人工智能·音视频