碼完整指南:把 CPU 從 99% 拉回個(gè)位數(shù))
Jellyfin 硬件轉(zhuǎn)碼完整指南把 CPU 從 99% 拉回個(gè)位數(shù)【免費(fèi)下載鏈接】jellyfinThe Free Software Media System - Server Backend API項(xiàng)目地址: https://gitcode.com/GitHub_Trending/je/jellyfin晚上 8 點(diǎn)全家搶一臺(tái)電視片源是 4K HDR客戶端又要求轉(zhuǎn)碼——top里 CPU 沖到 99%播放端開始一卡一卡。把Jellyfin 硬件轉(zhuǎn)碼打開之后同一場景 CPU 占用通常能從99% 壓到個(gè)位數(shù)因?yàn)橐曨l編碼這一步被整體挪去了 GPU 的專用加速單元。這套機(jī)制在 Jellyfin 里不是黑盒從 FFmpeg 參數(shù)拼裝到日志落盤代碼全部可查。這篇帶你把原理看懂、把開關(guān)打開、把常見坑踩平。一張表看懂 Jellyfin 支持哪幾種硬件轉(zhuǎn)碼別急著翻文檔先確認(rèn)你的硬件在不在支持名單里。Jellyfin 的加速類型由HardwareAccelerationType枚舉定義見 MediaBrowser.Model/Entities/HardwareAccelerationType.cs一共 8 種取值芯片方枚舉值FFmpeg 編碼器后綴驗(yàn)證命令NVIDIAnvenc_nvencnvidia-smiIntel 核顯qsv_qsvvainfoAMD / IntelLinuxvaapi_vaapivainfoApplevideotoolbox_videotoolbox系統(tǒng)自帶AMD AMF / V4L2M2M / RKMPP同名同名視平臺(tái)而定注意兩個(gè)默認(rèn)行為EncodingOptions構(gòu)造函數(shù)里HardwareDecodingCodecs默認(rèn)只含[h264, vc1]見 MediaBrowser.Model/Configuration/EncodingOptions.cs意味著 HEVC、VP9 默認(rèn)仍走 CPU 解碼VaapiDevice默認(rèn)指向/dev/dri/renderD128。配置時(shí)心里要有數(shù)。從播放請(qǐng)求到 GPU 編碼中間發(fā)生了什么Jellyfin 的轉(zhuǎn)碼本質(zhì)是拉起一個(gè) FFmpeg 子進(jìn)程硬件加速全部體現(xiàn)在命令行參數(shù)里。流程可以拆成四步播放請(qǐng)求進(jìn)入TranscodeManager由 MediaBrowser.MediaEncoding/Transcoding/TranscodeManager.cs 里的StartFfMpeg決定是直傳、復(fù)制流還是真轉(zhuǎn)碼EncodingHelper根據(jù)當(dāng)前HardwareAccelerationType查編碼器映射表把h264_nvenc、h264_qsv、h264_vaapi這類后綴拼進(jìn)-c:v參數(shù)解碼側(cè)按硬件能力追加-hwaccel參數(shù)如cuda、vaapiGPU 解碼結(jié)果直接留在顯存里做濾鏡、色調(diào)映射省掉一次顯存往返進(jìn)程被_activeTranscodingJobs列表登記播放心跳ping會(huì)定期更新任務(wù)狀態(tài)斷播后進(jìn)程自動(dòng)回收。一個(gè) NVENC 任務(wù)最終長這樣ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mkv \ -c:v h264_nvenc -preset p5 -b:v 8000k output.mp4也就是說你不需要手寫任何 FFmpeg 命令Jellyfin 只負(fù)責(zé)把正確的參數(shù)組裝好。控制臺(tái) 3 步開硬件轉(zhuǎn)碼 ?第一步先驗(yàn)證驅(qū)動(dòng)和 FFmpeg 能力驅(qū)動(dòng)沒裝好后面全白搭nvidia-smi # NVIDIA 用戶 vainfo # Intel / AMD 用戶vainfo輸出里有h264、hevc的 VA-API profile才說明 VA-API 鏈路通了。第二步切換加速類型登錄控制臺(tái)進(jìn)入控制臺(tái) → 服務(wù)器 → 播放在硬件加速下拉框選擇NVIDIA NVENC、Intel Quick Sync或VAAPI保存并重啟服務(wù)。第三步看日志確認(rèn)轉(zhuǎn)碼日志前綴是FFmpeg.Transcode-定義在 TranscodeManager.cs默認(rèn)寫在 Jellyfin 日志目錄/var/log/jellyfin/或自定義路徑。啟動(dòng)一次轉(zhuǎn)碼后執(zhí)行tail -f /var/log/jellyfin/ffmpeg.transcode-*.log | grep nvenc日志里出現(xiàn)h264_nvenc或Using GPU stream字樣說明 GPU 真的接管了編碼。進(jìn)階調(diào)優(yōu)這幾個(gè)參數(shù)最影響觀感 ??控制臺(tái)「播放」頁里和編碼質(zhì)量直接相關(guān)的旋鈕H264 / H265 的 CRF默認(rèn)H264Crf 23、H265Crf 28越小畫質(zhì)越好、體積越大。硬解設(shè)備多時(shí)可以往20附近調(diào)碼率上限4K 轉(zhuǎn) 1080p 建議不低于20 Mbps否則 10bit 源壓 8bit 目標(biāo)時(shí)細(xì)節(jié)先崩色調(diào)映射EnableTonemapping控制 HDR→SDRTonemappingAlgorithm默認(rèn)bt2390這是 HDR 片源在普通電視上的畫質(zhì)命門設(shè)備路徑VA-API 用戶若vainfo顯示的設(shè)備不是renderD128改VaapiDeviceIntel 多 GPU 機(jī)器建議同步確認(rèn)QsvDevice。多開場景下還有個(gè)隱藏項(xiàng)啟用限流Throttling默認(rèn)關(guān)閉。開啟后 FFmpeg 會(huì)按播放速度自我約束避免轉(zhuǎn)碼任務(wù)跑滿 CPU/GPU 卻只服務(wù)一個(gè)卡頓的客戶端。翻車了對(duì)著這張表排 日志特征原因處理No NVENC capable devices foundNVIDIA 驅(qū)動(dòng)缺失或版本過舊裝好驅(qū)動(dòng)確保nvidia-smi能正常輸出No VAAPI support for codec輸入編碼如 mpeg4不被 VA-API 接受源文件先軟解再轉(zhuǎn)或換源Failed to initialize VAAPI用戶對(duì)/dev/dri無權(quán)限sudo usermod -aG video jellyfin后重啟服務(wù)任務(wù)回落到軟編Jellyfin 自帶 FFmpeg 未編譯對(duì)應(yīng)硬件選項(xiàng)換用發(fā)行版提供的帶 nvenc/vaapi 的 FFmpeg排障原則先看ffmpeg.transcode-*.log的第一屏參數(shù)確認(rèn)編碼器后綴對(duì)不對(duì)再往下翻錯(cuò)誤棧。參數(shù)錯(cuò)了后面日志再花哨也沒用。Jellyfin 是完全開源的上面每個(gè)旋鈕在源碼里都能找到出處。下一步打開控制臺(tái)按第二步把加速類型切到匹配你硬件的那一項(xiàng)再看日志里的編碼器名確認(rèn)生效遇到表里沒覆蓋的報(bào)錯(cuò)直接搜 README.md 或到社區(qū)論壇帶著日志片段提問效率最高。【免費(fèi)下載鏈接】jellyfinThe Free Software Media System - Server Backend API項(xiàng)目地址: https://gitcode.com/GitHub_Trending/je/jellyfin創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考