跳转到主要内容

硬件转码

此功能允许您使用 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 编码。
    • 较新的设备通常具有更高的转码质量。

前提条件

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

设置

基本设置

  1. 如果您尚未下载最新的 hwaccel.transcoding.yml 文件,请下载并确保其与 docker-compose.yml 位于相同的文件夹中。

  2. docker-compose.yml 文件中,在 immich-server 下取消注释 extends 部分,并将 cpu 更改为适当的后端。

    注意:对于 WSL2 中的 VAAPI,请确保使用 vaapi-wsl 而不是 vaapi

  3. 使用这些更新的设置重新部署 immich-server 容器。

  4. 在管理员页面的 视频转码设置 下,将硬件加速设置更改为适当选项并保存。

    注意:对于 Jasper Lake 和 Elkhart Lake CPU,您需要将 硬件加速 -> 恒定质量模式 设置为 CQP

  5. (可选)为实现最佳性能,启用硬件解码。

单一 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
  1. Unraid > Docker > (停止)Immich 容器 > 编辑
  2. 向下滚动并选择“添加另一路径、端口、变量、标签或设备”。
  3. 在下拉菜单中选择“设备”,并添加任意名称的条目和值为 /dev/dri
  4. 继续进行“基本设置”的第 4 步。
NVENC
  1. 在容器应用中添加此环境变量:键=NVIDIA_VISIBLE_DEVICES 值=all
  2. 仍在容器应用中,将容器从基本模式更改为高级模式,并在附加参数字段中添加以下参数:--runtime=nvidia
  3. 重启容器应用。
  4. 继续进行“基本设置”的第 4 步。

提示

  • 您可能希望选择比软件转码更慢的预设以保持质量和效率。
  • 虽然可以使用 NVIDIA 和 Intel 设备的 VAAPI,但更优先选择专门针对其设备优化的 API。
  • 转码时,您可以通过检查设备的利用率(例如 NVIDIA 的 nvtop,Intel 的 intel_gpu_top 等)确认设备是否被识别和使用。转码时缺乏错误日志也表明设备正在被使用。