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进程在处理

当ffmpeg使用GPU加速转换时可以看到 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-smi
docker 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)

ffpmeg日志显示转换没有使用 NVIDIA 硬件加速编码
...
/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 输出:

视频转换时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)
...