Garmin VIRB Edit NVENC 硬件加速修复补丁
补丁概述
本补丁用于修复 Garmin VIRB Edit(已停止更新的老软件)在 NVIDIA RTX 30 系显卡 + 新驱动(R550 及以上)上无法使用 NVENC 硬件加速编码的问题。
修复方式:通过两个 DLL 文件,让 VIRB Edit 重新使用 NVIDIA GPU 硬件加速编码(NVENC),代替默认的 CPU 软件编码(libx264)。
问题背景
VIRB Edit(2018 年停止更新)内置的 FFmpeg 3.3 使用的是 NVIDIA NVENC 旧版 preset 体系(HP/HQ/BD/LOW_LATENCY 等命名式 GUID)。
NVIDIA 从驱动 R550(2024 年初)起,彻底移除了对这些旧 preset 的支持。导致:
- VIRB Edit 的 NVENC 初始化失败(错误:
NV_ENC_ERR_UNSUPPORTED_PARAM) - 导出视频时只能走 CPU 软件编码,GPU 硬件加速失效
- 表现为:导出时 CPU 满载、GPU 空闲、导出速度极慢
同时,VIRB Edit 的编码器选择逻辑(dispatcher)默认把"低/中/高"质量都路由到 CPU 编码器 libx264,即使 NVENC 可用也不会调用它。
本补丁同时解决这两个问题。
补丁文件说明
文件 1:video.pipeline.ffmpeg.nvenc-fixed.dll
用途:强制 VIRB Edit 使用 NVENC 硬件编码器。
原理:VIRB Edit 的编码器选择逻辑(在 video.pipeline.ffmpeg.dll 中)默认把"低/中/高"质量都映射到 CPU 编码器 libx264,NVENC 路径永远不会被执行。本补丁修改了这个选择逻辑的一处跳转指令(jbe → NOP),让所有质量设置都走 NVENC 路径。
安装方式:替换 VIRB Edit 目录下的 video.pipeline.ffmpeg.dll。
原始文件校验:
- 原版 MD5:
6aff49fba43dcc6feff4acea9440268a - 补丁版 MD5:
4ecb7012618911a2fff4d22d620030ce
文件 2:nvEncodeAPI64.dll
用途:翻译旧版 NVENC API 调用,适配新驱动。
原理:这是一个"兼容 shim"(基于开源项目 nvenc_shim),通过 DLL 劫持拦截 NVENC API 调用,自动完成:
- 将旧版 preset GUID 翻译成新版 P1-P7 preset + tuningInfo
- 将被移除的旧速率控制模式(CBR_HQ/VBR_HQ/CBR_LOWDELAY_HQ)转换成现代等价模式
- 自动修正结构体版本号,匹配当前驱动版本
- 清零跨 SDK 版本含义变化的保留字段
安装方式:复制到 VIRB Edit 目录(不要替换任何文件,直接新增)。Windows 会优先加载程序目录下的同名 DLL,而不是 System32 中的真实驱动 DLL。
注意:此文件不是 NVIDIA 驱动文件,是第三方兼容层。删除它即可回滚,不影响系统驱动。
安装步骤
前提:已安装 NVIDIA 显卡驱动,且显卡为 RTX 30 系或更新(或驱动版本 R550 及以上)。
- 关闭 VIRB Edit
备份原文件(重要):
- 将
C:\Program Files\Garmin\VIRB Edit\video.pipeline.ffmpeg.dll - 重命名为
video.pipeline.ffmpeg.dll.bak
- 将
替换文件 1:
- 将
video.pipeline.ffmpeg.nvenc-fixed.dll - 复制到
C:\Program Files\Garmin\VIRB Edit\ - 并重命名为
video.pipeline.ffmpeg.dll
- 将
添加文件 2:
- 将
nvEncodeAPI64.dll - 复制到
C:\Program Files\Garmin\VIRB Edit\(保持原名)
- 将
- 启动 VIRB Edit,导出视频
安装完成后,VIRB Edit 目录应包含:
C:\Program Files\Garmin\VIRB Edit\
├── video.pipeline.ffmpeg.dll ← 补丁版(原版备份为 .bak)
├── video.pipeline.ffmpeg.dll.bak ← 原版备份
├── nvEncodeAPI64.dll ← shim(新增)
└── avcodec-57.dll ← 保持原版,不要动验证方法
导出视频时,打开任务管理器 → 性能 → GPU,查看 Video Encode 引擎是否有占用:
- 有占用 → 补丁生效,NVENC 硬件加速工作正常
- 无占用且 CPU 满载 → 补丁未生效,需要排查
回滚方法
如需恢复原状:
- 删除
C:\Program Files\Garmin\VIRB Edit\nvEncodeAPI64.dll - 删除补丁版的
video.pipeline.ffmpeg.dll - 将
video.pipeline.ffmpeg.dll.bak重命名回video.pipeline.ffmpeg.dll
注意事项
两个文件必须同时安装,缺一不可:
- 只装文件 1(没有 shim):NVENC 被调用但旧 preset 被新驱动拒绝,导出失败或回落 CPU
- 只装文件 2(没有 dispatcher 补丁):VIRB Edit 默认走 CPU 编码,shim 不被调用
- 仅适用于 NVIDIA 显卡。Intel 核显(如 i5-13500H 的 Iris Xe)走的是 QSV 硬件编码,与本补丁无关。
- 不要动 avcodec-57.dll。如果之前替换过它,请恢复原版(原版 MD5:
2295be69d0fb4a44bc6b2cc513ef8d62),否则可能与补丁冲突。 - 不要降级驱动。本补丁就是为了解决"不降级驱动"场景下的 NVENC 兼容问题。
- 如果 NVIDIA 驱动更新到更新版本导致补丁失效,可尝试更新 nvenc_shim(访问 GitHub 项目获取新版)。
文件清单
| 文件 | 用途 | 安装位置 |
|---|---|---|
video.pipeline.ffmpeg.nvenc-fixed.dll | 强制使用 NVENC | 替换为 video.pipeline.ffmpeg.dll |
nvEncodeAPI64.dll | 翻译旧 preset 适配新驱动 | 直接复制(新增) |
技术备注(供后续维护)
- 问题根因:NVIDIA 驱动 R550+ 移除了旧版 NVENC preset(HP/HQ/BD/LOW_LATENCY 命名式 GUID)的支持
- dispatcher 关键位置:
video.pipeline.ffmpeg.dll偏移0x239b7,76 21(jbe)改为90 90(NOP) - shim 来源:https://github.com/luizhtss/nvenc_shim
- shim 导出的入口函数:
NvEncodeAPICreateInstance、NvEncodeAPIGetMaxSupportedVersion