在使用Docker安裝Jellyfin之後,預設是使用CPU轉碼影片,若啟用GPU硬體加速 (Hardware Acceleration) 轉碼可讓影片處理速度更快。
Jellyfin觸發轉碼的時機為何?何時該使用轉碼?參見Jellyfin的直接播放 (Direct Play) 與轉碼 (Transcoding)
Jellyfin支援Intel、AMD、Nvidia、Apple、Rockchip的加速技術,官方文件對此有詳細說明。
為方便處理影片,Jellyfin官方開發了特製版的jellyfin-ffmpeg
套件,此一套件已含在Jellyfin的官方Docker映像檔,無需另外安裝。
1. Nvidia GPU啟用NVENC硬體解碼#
將使用者加入video群組
sudo usermod -aG video root
sudo usermod -aG video $USER
- 編輯
docker-compose.yml
,在最下面加入runtime
runtime: nvidia
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
- 更新Jellyfin容器的動態連結,重啟Docker服務
sudo docker exec -it jellyfin ldconfig
sudo systemctl restart docker
- 檢查容器是否能存取Nvidia顯示卡,應能印出顯示卡驅動資訊
sudo docker exec -it jellyfin nvidia-smi
- 進入Jellyfin首頁,點選左邊選單→ 「設定」→「控制台」 →「播放」,選擇使用Nvidia NVENC硬體加速(注意每張Nvidia顯示卡能支援的編碼都不同,AV1至少需要RTX30以上),再往下捲動按儲存。
2. Intel CPU啟用QSV或VA-API硬體解碼#
只要Intel CPU有內顯,幾乎所有Intel GPU都支援VA-API硬體解碼。QSV則是要Haswell架構以後才支援。
儘管開發者說Intel解碼驅動和OpenCL執行時已含在Jellyfin的映像檔,不需要額外安裝驅動,但若驅動找不到,請還是參考官方文件了解要安裝哪些驅動套件。可能還得設定LIBVA_DRIVER_NAME
的環境變數。
- 安裝OpenCL執行時套件
sudo apt install intel-opencl-icd
- 將使用者加入render群組
sudo usermod -aG render root
sudo usermod -aG render $USER
- 取得render群組的ID,每台電腦數字不一樣
sudo getent group render | cut -d: -f3
- 修改docker-compose,在最下面加入
devices
:
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- 重新啟動容器
sudo docker compose down
sudo docker compose up -d
- 檢查Jellyfin容器能否印出Intel解碼器版本
sudo docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo
- 檢查Jellyfin容器能否印出OpenCL執行時
sudo docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va -init_hw_device opencl@va
- 重新啟動容器
sudo docker compose down
sudo docker compose up -d
至Jellyfin首頁,點選左邊選單 → 「設定」→「控制台 →「播放」,選擇使用Intel QSV硬體加速,往下捲動按儲存。
要確認影片解碼有無運作,隨便開一部影片,然後用
nvtop
這類工具查看GPU使用率就知道了。