Jellyfin GPU加速
Jellyfin支持采用GPU进行视频转换,这里我采用容器来运行Jellyfin,就是先部署 NVIDIA Container Toolkit 以实现容器内NVIDIA硬件转换视频。
配置Jellyfin的GPU
登录控制台 -> 播放 (Playback) -> 顶部的 硬件加速 (Hardware acceleration) 下拉菜单
在 “硬件加速 (Hardware acceleration)” 下拉菜单中,默认是“无”,将其修改为:
Nvidia NVENC修改后,页面下方会弹出一大堆勾选框,此时需要按照自己的硬件,例如我是 Nvidia Tesla P10 GPU运算卡 来选择Pascal 架构的硬件编解码编排 => Tesla P10 的 NVDEC 解码器支持绝大多数现代主流格式,勾选以下选项:
[x] H264
[x] HEVC (H.265)
[x] MPEG2
[x] VC1
[x] VP8
Tesla P10 绝对不可以选择
[ ] HEVC 10bit(P10 属于 Pascal 架构,该架构的 NVDEC 不支持 HEVC 10bit 的硬件解码,强开会导致播放 4K HDR 蓝光盘时直接报错黑屏)
[ ] VP9 / AV1(P10 硬件上不支持这两种格式的解码)
确保勾选了
[x] 勾选 “启用增强型NVDEC解码器” (Enable enhanced NVDEC decoder)
[x] 勾选 “启用硬件编码” (Enable hardware encoding)
高级调优设置(榨干 24GB 显存)
启用色调映射(Hardware Tone Mapping): 如果高画质电影是 HDR 格式,而你的手机或浏览器只支持 SDR,P10 会通过 CUDA 核心实时进行色彩转换,让画面不发灰。
并发转码限制(Max Simultaneous Video Transcoding Streams):
默认是 0(不限制)。得益于P10 24GB 显存,普通的消费级显卡(如 GTX 1050)在驱动层面被 NVIDIA 锁死只能同时转码 3-5 路,但 Tesla 系列计算卡在驱动层面是完全解锁并发限制的!
只要显存够,这块 P10 可以同时为局域网内的几十台设备进行 1080p 视频转码。因此保持 0 即可。
在完成了上述硬件加速配置之后,当视频播放时选择了特定Qulity(和原片不同格式),此时服务器端就会看到 ffpmeg 开始工作,对于启用了GPU硬件加速的环境, ffmpeg的CPU使用率极低,并且nvidia-smi显示有ffmpeg进程在处理
nvidia-smi 中显示GPU工作Wed Jun 3 23:07:49 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA Graphics Device Off | 00000000:03:00.0 Off | 0 |
| N/A 35C P0 52W / 150W | 289MiB / 23040MiB | 12% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 61915 C /usr/lib/jellyfin-ffmpeg/ffmpeg 286MiB |
+-----------------------------------------------------------------------------------------+
排查
我发现实际上视频转换时,服务器端 ffmpeg 疯狂消耗了CPU,但是 nvidia-smi 显示GPU却 "纹丝未动"
有一种可能是Docker引擎没有配置 NVIDIA Container Toolkit ,所以需要通过容器内
nvidia-smi验证:
nvidia-smidocker exec -it jellyfin nvidia-smi
输出显示容器内其实是可以正常使用GPU的,有输出:
nvidia-smi 显示GPU的 NVIDIA Container Toolkit 配置正确Wed Jun 3 22:33:31 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA Graphics Device Off | 00000000:03:00.0 Off | 0 |
| N/A 28C P8 8W / 150W | 0MiB / 23040MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
登录到 Jellyfin 平台,检查转码日志(Jellyfin 每一次转码失败,都会生成一个独立的 FFmpeg.Transcode.xxx.log 运行日志)
登录 Jellyfin 网页后台 -> 控制台 (Dashboard) -> 日志 (Logs)
...
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M ... -i file:"/media/movies/...mkv" ... -codec:v:0 libx264 -preset veryfast -crf 23 ...
...
这里可以看到 使用了纯 CPU 编码器 libx264 : 如果成功启用了 NVIDIA 硬件加速编码,这里应该显示的是 -codec:v:0 h264_nvenc (由 NVIDIA GPU 的专用硬件编码芯片接管),但是很不幸这里看到的是 -codec:v:0 libx264 (开源 CPU 软件编码器)。
为什么 Jellyfin 不传 GPU 参数?
乌龙了:原来我上一次配置GPU加速设置忘记点击save按钮
实践体验
使用Jellyfin的一个优势是充分利用服务器端的 Nvidia Tesla P10 GPU运算卡 进行视频转换,这对于客户端减轻压力非常有帮助。举例而言,我的 MacBook Pro 15" Late 2013 使用的是非常古老的 Intel Core i7-4850HQ处理器 并且内置的显卡NVIDIA GeForce GT 750M 和 Intel Iris Pro 只支持H.264 (AVC) 的 8bit 硬件解码,所以在观看我在网上下载的 《蓝》 Trois.Couleurs.Bleu.AKA.Three.Colors.Blue.1993.CC.Bluray.2160p.DTS-HDMA5.1.DoVi.HDR.x265.10bit-DreamHD.mkv 非常吃力,整个CPU核心全部被消耗殆尽,且没有GPU工作。
通过将视频文件导入Jellyfin中,通过浏览器客户端播放,就可以看到服务器端 Nvidia Tesla P10 GPU运算卡 承担了视频转换(自动根据客户端适配),此时观察到服务器的 top 输出:
Tasks: 319 total, 1 running, 318 sleeping, 0 stopped, 0 zombie
%Cpu(s): 37.7 us, 0.5 sy, 0.0 ni, 61.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem : 64217.9 total, 31133.2 free, 5605.4 used, 28384.4 buff/cache
MiB Swap: 8192.0 total, 8192.0 free, 0.0 used. 58612.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
717140 root 20 0 11.8g 1.7g 299432 S 302.7 2.8 4:21.85 ffmpeg
1621 root 20 0 261.0g 401832 241808 S 3.7 0.6 3:09.63 jellyfin
1170 root 20 0 3130888 97592 62828 S 0.3 0.1 14:28.44 dockerd
717016 admin 20 0 10932 6688 4352 R 0.3 0.0 0:00.55 top
可以看到占用了CPU 3个核心
而NVIDIA也消耗了70%计算能力进行视频转换:
nvidia-smi 观察可以看到视频转码进程Mon Jun 15 05:16:18 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA Graphics Device Off | 00000000:03:00.0 Off | 0 |
| N/A 36C P0 53W / 150W | 385MiB / 23040MiB | 74% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 717140 C /usr/lib/jellyfin-ffmpeg/ffmpeg 382MiB |
+-----------------------------------------------------------------------------------------+
此时从浏览器客户端观察视频的 Playback Info 可以观察到视频播放的是转换后的 H264 格式:
...
Transcoding Info
Video codec H264
Audio codec AAC
Audio channels 6
Bitrate 33.7 Mbps
Transcoding progress 3.2%
Transcoding framerate 27 fps (1.13x)
...