Immich:硬件转码

Immich:硬件转码

这项功能可用 GPU 加速转码,降低 CPU 负载。注意:在类似设置下,硬件转码产生的视频通常比软件转码明显更大,画质往往也更低。使用较慢预设并优先选择效率更高的编解码器,可以缩小差距。这是一项较新的功能,仍处于实验阶段,可能无法适用于所有系统。

提示

启用硬件加速后,无须重做已有转码任务;之后运行的任务会使用加速设备。

支持的 API

• NVENC (NVIDIA)

• Quick Sync (Intel)

• RKMPP (Rockchip)

• VAAPI (AMD / NVIDIA / Intel)

限制

• 本文的说明和配置仅针对 Docker Compose,其他容器引擎可能需要不同配置。

• 只支持 Linux 服务器,以及通过 WSL2 运行的 Windows 服务器。

• WSL2 不支持 Quick Sync。

• 当前不支持 Raspberry Pi。

• 仅 NVENC 支持两遍转码模式,其他 API 会忽略这一设置。

• 默认只有编码使用硬件加速,解码和色调映射仍由 CPU 通过软件完成。

• 在视频转码设置中启用硬件解码,可获得端到端加速。

• 具体能力取决于硬件:

• 编解码器支持各不相同,但通常支持 H.264 和 HEVC。

• 尤其要注意,NVIDIA 和 AMD GPU 不支持 VP9 编码。

• 较新的设备通常有更高转码质量。

前提条件

NVENC

• 服务器必须安装 NVIDIA 官方驱动。

• 在 Linux(WSL2 除外)上,还必须安装 NVIDIA Container Toolkit。

QSV

• 使用 VP9 时:

• 必须使用第 9 代或更新的 Intel CPU。

• 第 11 代及更早的 CPU 需要低功耗模式,可能必须按 Jellyfin 的说明 配置。

• 特别是第 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 的 \u00001\u0000 版本(RK3588 使用 libmali-valhall-g610-g13p0-gbm),并修改 \u00003\u0000:

• 在 rkmpp 下,去掉以下三行开头的 #,启用 OpenCL 色调映射所需挂载:

• - /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

设置

基本设置

• 若尚未下载,请下载最新的 \u00000\u0000,确保与 docker-compose.yml 放在同一目录。

• 在 docker-compose.yml 的 immich-server 下,取消 extends 部分的注释,并把 cpu 改为合适的后端。

注意:在 WSL2 上使用 VAAPI 时,应选择 vaapi-wsl,而不是 vaapi。

• 使用更新后的设置重新部署 immich-server 容器。

• 在管理页面的“Video transcoding settings”中,将硬件加速设置改为合适选项并保存。

注意:Jasper Lake 和 Elkhart Lake CPU 需要把“Hardware Acceleration”→“Constant quality mode”设为 CQP。

• 可选:启用硬件解码,获得最佳性能。

immich.json

若使用配置文件,用 accel 选择硬件(例如 Intel 使用 qsv,NVIDIA 使用 nvenc);需要硬件解码时,把 accelDecode 设为 true。

{

  "ffmpeg": {

    "accel": "qsv",

    "accelDecode": true

  }

}

单一 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}

  # Note the lack of an `extends` section

  devices:

    - /dev/dri:/dev/dri

  volumes:

  ...

完成后,从“基本设置”的第 3 步继续。

All-In-One:Unraid 设置

QSV

• 打开 Unraid → Docker,停止 Immich 容器,选择 Edit。

• 向下滚动,选择 Add another Path, Port, Variable, Label or Device。

• 下拉菜单选择 Device,名称可自定,值设为 /dev/dri。

• 从“基本设置”的第 4 步继续。

NVENC

• 在容器应用中添加环境变量:键 NVIDIA_VISIBLE_DEVICES,值 all。

• 仍在容器应用中,把 Basic Mode 改为 Advanced Mode,在 Extra Parameters 中添加 --runtime=nvidia。

• 重启容器应用。

• 从“基本设置”的第 4 步继续。

建议

• 为维持画质和效率,硬件转码可能需要比软件转码更慢的预设。

• NVIDIA 和 Intel 也可以使用 VAAPI,但优先采用各自专用 API,因为其优化更有针对性。

• 转码时检查设备利用率,可确认设备被识别并使用,例如 NVIDIA 使用 nvtop、Intel 使用 intel_gpu_top。转码时没有错误日志,也可作为设备正在使用的迹象。


来源:Hardware Transcoding。Immich 官方文档及贡献者;原文最后更新于 2026-09-28。

遵循 GNU AGPL 3.0。本稿翻译官方说明并保留配置示例。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容