硬件转码
此功能允许您使用 GPU 来加速转码并减少 CPU 负载。 请注意,与类似设置下的软件转码相比,硬件转码会生成明显更大的视频,通常质量较低。使用较慢的预设并优先选择更高效的编码器可以缩小这一差距。 由于这是一个新功能,目前仍处于实验阶段,可能无法在所有系统上正常运行。
启用硬件加速后,您无需重新运行任何转码任务。任何在启用后开始运行的任务都会使用加速设备。
支持的 API
- NVENC(NVIDIA)
- Quick Sync(Intel)
- RKMPP(Rockchip)
- VAAPI(AMD / NVIDIA / Intel)
限制
- 此处的说明和配置专用于 Docker Compose。其他容器引擎可能需要不同的配置。
- 仅支持 Linux 和 Windows(通过 WSL2)服务器。
- WSL2 不支持 Quick Sync。
- 当前不支持树莓派。
- 双通道模式仅支持 NVENC,其他 API 将忽略此设置。
- 默认情况下,目前仅支持硬件加速编码。这意味着仍然使用 CPU 进行软件解码和色调映射。
- 您可以通过在视频转码设置中启用硬件解码来获得端到端加速。
- 依赖于硬件
- 编解码器支持各不相同,但通常支持 H.264 和 HEVC。
- 值得注意的是,NVIDIA 和 AMD GPU 不支持 VP9 编码。
- 较新的设备通常具有更高的转码质量。
- 编解码器支持各不相同,但通常支持 H.264 和 HEVC。
前提条件
NVENC
- 您必须在服务器上安装官方 NVIDIA 驱动程序。
- 在 Linux(WSL2 除外)上,您还需要安装 NVIDIA 容器工具包。
QSV
- 若要使 VP9 正常工作:
- 您必须拥有第 9 代或更新的 Intel CPU。
- 如果您拥有第 11 代或更早的 CPU,则可能需要遵循 这些 指南,因为需要启用低功耗模式。
- 此外,如果服务器上特别使用第 11 代 CPU 并运行内核 5.15(随 Ubuntu 22.04 LTS 提供),则需要升级该内核(请参考 Jellyfin 文档)。
RKMPP
若要启用 RKMPP:
- 您必须拥有支持的 Rockchip ARM SoC。
- 仅 RK3588 支持硬件色调映射,其他 SoC 使用较慢的软件色调映射,同时仍使用硬件编码。
- 色调映射需要
/usr/lib/aarch64-linux-gnu/libmali.so.1
在主机系统上存在。安装与您的 Mali GPU 对应的libmali
版本(在 RK3588 上为libmali-valhall-g610-g13p0-gbm
),并修改hwaccel.transcoding.yml
文件:- 在
rkmpp
下取消注释需要用于 OpenCL 色调映射的 3 行,通过删除每行开头的#
符号 - /dev/mali0:/dev/mali0
- /etc/OpenCL:/etc/OpenCL:ro
- /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro
- 在
设置
基本设置
-
如果您尚未下载最新的
hwaccel.transcoding.yml
文件,请下载并确保其与docker-compose.yml
位于相同的文件夹中。 -
在
docker-compose.yml
文件中,在immich-server
下取消注释extends
部分,并将cpu
更改为适当的后端。注意:对于 WSL2 中的 VAAPI,请确保使用
vaapi-wsl
而不是vaapi
。 -
使用这些更新的设置重新部署
immich-server
容器。 -
在管理员页面的
视频转码设置
下,将硬件加速设置更改为适当选项并保存。注意:对于 Jasper Lake 和 Elkhart Lake CPU,您需要将
硬件加速
->恒定质量模式
设置为CQP
。 -
(可选)为实现最佳性能,启用硬件解码。
单一 Compose 文件
包括 Unraid 和 Portainer 在内的某些平台截至目前不支持多个 Compose 文件。作为替代方案,您可以将 hwaccel.transcoding.yml
文件的相关内容“内联”到 immich-server
服务中。
例如,该文件中的 qsv
部分为:
devices:
- /dev/dri:/dev/dri
您可以将其添加到 immich-server
服务中,而不是从 hwaccel.transcoding.yml
扩展:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# 请注意缺少 `extends` 部分
devices:
- /dev/dri:/dev/dri
volumes:
...
完成后,您可以继续进行“基本设置”的第 3 步。
All-In-One - Unraid 设置
QSV
- Unraid > Docker > (停止)Immich 容器 > 编辑
- 向下滚动并选择“添加另一路径、端口、变量、标签或设备”。
- 在下拉菜单中选择“设备”,并添加任意名称的条目和值为
/dev/dri
。 - 继续进行“基本设置”的第 4 步。
NVENC
- 在容器应用中添加此环境变量:键=
NVIDIA_VISIBLE_DEVICES
值=all
。 - 仍在容器应用中,将容器从基本模式更改为高级模式,并在附加参数字段中添加以下参数:
--runtime=nvidia
。 - 重启容器应用。
- 继续进行“基本设置”的第 4 步。
提示
- 您可能希望选择比软件转码更慢的预设以保持质量和效率。
- 虽然可以使用 NVIDIA 和 Intel 设备的 VAAPI,但更优先选择专门针对其设备优化的 API。
- 转码时,您可以通过检查设备的利用率(例如 NVIDIA 的
nvtop
,Intel 的intel_gpu_top
等)确认设备是否被识别和使用。转码时缺乏错误日志也表明设备正在被使用。