跳到主要内容

硬體轉碼

此功能允許您使用 GPU 加速轉碼並減少 CPU 負載。 請注意,硬體轉碼產生的影片通常比軟體轉碼在相似設置下的影片大得多,且畫質通常較低。使用較慢的預設值並偏好更高效的編碼器可以縮小此差距。 由於此功能較新,仍屬於實驗性功能,可能無法在所有系統上運行。

信息

啟用硬體加速後,無需重新執行任何轉碼作業。加速設備將用於啟用後運行的任何作業。

支援的 API

  • NVENC (NVIDIA)
  • Quick Sync (Intel)
  • RKMPP (Rockchip)
  • VAAPI (AMD / NVIDIA / Intel)

限制

  • 這裡提供的指導和配置僅適用於 Docker Compose。其他容器引擎可能需要不同的配置。
  • 目前僅支援 Linux 和 Windows(通過 WSL2)伺服器。
  • 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,則可能需要遵循這些指導,因為需要使用低功耗模式
    • 此外,如果伺服器特別配備了第 11 代 CPU 並運行於 Kernel 5.15(隨 Ubuntu 22.04 LTS 附帶),則需要升級此內核(詳見Jellyfin 文檔

RKMPP

若要 RKMPP 正常工作:

  • 您必須擁有支援的 Rockchip ARM SoC。
  • 目前只有 RK3588 支援硬體色調映射,其他 SoC 使用更慢的軟體色調映射,同時仍然使用硬體編碼。
  • 色調映射要求主機系統中存在 /usr/lib/aarch64-linux-gnu/libmali.so.1。安裝對應於您的 Mali GPU(在 RK3588 上為 libmali-valhall-g610-g13p0-gbm)的 libmali 版本,並修改 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.ymlimmich-server 下,取消對 extends 部分的註釋,並將 cpu 更改為適當的後端。

    注意:對於 WSL2 中的 VAAPI,請確保使用 vaapi-wsl 而非 vaapi

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

  4. 在管理頁面的 影片轉碼設定 中,將硬體加速設定更改為相應的選項並保存。

    注意:對於 Jasper Lake 和 Elkhart Lake CPU,需要將 Hardware Acceleration -> Constant quality mode 設置為 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 步。

完整配置 - Unraid 配置

QSV
  1. Unraid > Docker > (停止)Immich 容器 > 編輯
  2. 向下滾動並選擇 Add another Path, Port, Variable, Label or Device
  3. 在下拉菜單中選擇 Device,並設置任何名稱和值 /dev/dri 的條目。
  4. 繼續執行「基本配置」的第 4 步。
NVENC
  1. 在容器應用程式中,添加以下環境變量:Key=NVIDIA_VISIBLE_DEVICES Value=all
  2. 仍然在容器應用程式中,將容器從基本模式更改為高級模式,並將以下參數添加到額外參數欄位:--runtime=nvidia
  3. 重新啟動容器應用程式。
  4. 繼續執行「基本配置」的第 4 步。

提示

  • 您可能需要選擇比軟體轉碼更慢的預設來保持品質和效率
  • 雖然您可以在 NVIDIA 和 Intel 設備上使用 VAAPI,但優先選擇更專用的 API,因為它們針對各自的設備進行了更優化的設計
  • 在進行轉碼時,您可以通過檢查設備的使用情況(對於 NVIDIA 使用 nvtop,對於 Intel 使用 intel_gpu_top 等)來確認設備是否被識別和使用。轉碼時缺少錯誤日誌也表明它正在使用。