硬體轉碼
此功能允許您使用 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 編碼。
- 新型設備的轉碼品質更高。
- 編解碼器支援因設備而異,但通常支援 H.264 和 HEVC。
前置條件
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
- 在
配置
基本配置
-
如果尚未擁有,下載最新的
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,需要將
Hardware Acceleration
->Constant quality mode
設置為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 步。
完整配置 - Unraid 配置
QSV
- Unraid > Docker > (停止)Immich 容器 > 編輯
- 向下滾動並選擇
Add another Path, Port, Variable, Label or Device
- 在下拉菜單中選擇
Device
,並設置任何名稱和值/dev/dri
的條目。 - 繼續執行「基本配置」的第 4 步。
NVENC
- 在容器應用程式中,添加以下環境變量:Key=
NVIDIA_VISIBLE_DEVICES
Value=all
- 仍然在容器應用程式中,將容器從基本模式更改為高級模式,並將以下參數添加到額外參數欄位:
--runtime=nvidia
- 重新啟動容器應用程式。
- 繼續執行「基本配置」的第 4 步。
提示
- 您可能需要選擇比軟體轉碼更慢的預設來保持品質和效率
- 雖然您可以在 NVIDIA 和 Intel 設備上使用 VAAPI,但優先選擇更專用的 API,因為它們針對各自的設備進行了更優化的設計
- 在進行轉碼時, 您可以通過檢查設備的使用情況(對於 NVIDIA 使用
nvtop
,對於 Intel 使用intel_gpu_top
等)來確認設備是否被識別和使用。轉碼時缺少錯誤日誌也表明它正在使用。