买 NAS 或迷你主机来跑 Plex,最关心的问题是:它能同时给几个人转码?这个脚本先检查机器上有没有能用的核显或显卡(
/dev/dri、render 组、vainfo、nvidia-smi),再用 ffmpeg 实测纯 CPU 软件转码的速度,估算能同时转码几路。另外给出把核显交给 Plex 容器的 compose 片段。
先看清成品
- box 的情况: box 是 8 核 Xeon 虚拟机,没有
/dev/dri,所以脚本如实报告“没有可用的核显或显卡”,硬件转码没有测过。- 软件转码实测: 带噪点的 1080p 测试片转成 720p,速度约 4.7–4.8 倍实时,估算可以同时转码约 3 路;纯测试图样能跑到 15.1 倍(见调试示例)。
- compose 叠加文件:
docker compose config校验通过。- 前提: 硬件加速是 Plex Pass 功能,需要服务器所有者有 Plex Pass 订阅(见 Plex 帮助中心)。
注意:只给媒体服务器放你有权使用的内容,比如自己拍的视频、自己购买并合法备份的光盘、公共领域或采用开放授权的作品。不要安装或分享盗版插件和资源,不要把媒体库共享给家庭以外的人,硬件转码等付费功能请按官方方式订阅(Plex Pass,价格以官网为准,本文不列)。遵守《Plex 服务条款》。
做完之后你会得到什么?
| 成果 | 说明 |
|---|---|
hw_check.sh |
检查 CPU、/dev/dri、render 组、vainfo 和 NVIDIA 显卡,再跑软件转码基准 |
docker-compose.hw.yml |
叠加在 A 篇的 compose 上,把 /dev/dri 交给容器 |
需要准备哪些环境?
| 项目 | 要求 | 说明 |
|---|---|---|
| CPU | 带核显的 Intel CPU,支持 Quick Sync | Plex 官方推荐 Intel Quick Sync 或 NVIDIA 显卡;AMD 显卡按“现状”提供支持 |
| 系统 | 64 位 Linux | 官方正式支持的是 Ubuntu 16.04+ 和 Fedora 26+,其他发行版也可能可以用 |
| 订阅 | Plex Pass | 硬件加速是付费功能 |
| ffmpeg | 用来跑基准测试 | sudo apt install ffmpeg |
文件结构
36-plex-B-src/
├── hw_check.sh
└── docker-compose.hw.yml
第 1 步:检查脚本
hw_check.sh:
#!/usr/bin/env bash
# 检查这台 NAS / 迷你主机能不能给 Plex(或 Jellyfin、Emby)做硬件转码,再用 ffmpeg 粗测纯 CPU 软件转码的速度。
# 用法:./hw_check.sh [测试视频] 不传测试视频时,会生成 10 秒带噪点的 1080p 测试片(最好传一部你自己的片子)
set -uo pipefail
echo "== CPU =="; grep -m1 "model name" /proc/cpuinfo | cut -d: -f2- | sed 's/^ //'; echo "核心数:$(nproc)"
echo "== /dev/dri(Intel 核显 / AMD 显卡的设备节点) =="
if ls /dev/dri/renderD* >/dev/null 2>&1; then
ls -l /dev/dri/
g=$(stat -c %G /dev/dri/renderD128); echo "renderD128 属于组:$g(运行媒体服务器的用户要在这个组里)"
id -nG | grep -qw "$g" && echo "✓ 当前用户在 $g 组" || echo "! 当前用户不在 $g 组:sudo usermod -aG $g \$USER"
command -v vainfo >/dev/null && vainfo --display drm --device /dev/dri/renderD128 2>&1 | grep -E "Driver version|VAProfileH264|VAProfileHEVC" | head -6 \
|| echo "(没有安装 vainfo:sudo apt install vainfo,可以查看支持哪些编解码)"
else
echo "✗ 没有 /dev/dri/renderD*:没有可用的核显或显卡,或者驱动没加载,或者是虚拟机没有直通"
fi
command -v nvidia-smi >/dev/null && nvidia-smi --query-gpu=name,driver_version --format=csv,noheader || echo "(没有 nvidia-smi:没有 NVIDIA 显卡,或者没装驱动)"
echo "== 软件转码基准(1080p → 720p H.264 4 Mbps,preset veryfast) =="
SRC=${1:-}
if [ -z "$SRC" ]; then SRC=$(mktemp --suffix=.mkv)
ffmpeg -hide_banner -loglevel error -y -f lavfi -i "testsrc2=size=1920x1080:rate=30:duration=10,noise=alls=60:allf=t" -c:v libx264 -preset ultrafast -crf 18 -pix_fmt yuv420p "$SRC"; fi # 加噪点:纯测试图样太好编码,测出来会偏快 3 倍左右
speed=$(ffmpeg -hide_banner -nostats -y -i "$SRC" -vf scale=-2:720 -c:v libx264 -preset veryfast -b:v 4M -an -f null - 2>&1 | grep -o "speed=[ 0-9.]*x" | tail -1 | tr -dc '0-9.')
echo "速度:${speed}x 实时"
awk -v s="$speed" 'BEGIN{n=int(s*0.7); printf "粗略估计:大约能同时软件转码 %d 路 1080p→720p(按 70%% 余量计算)\n", n}'
box 上的实际输出:
== CPU ==
Intel(R) Xeon(R) Processor
核心数:8
== /dev/dri(Intel 核显 / AMD 显卡的设备节点) ==
✗ 没有 /dev/dri/renderD*:没有可用的核显或显卡,或者驱动没加载,或者是虚拟机没有直通
(没有 nvidia-smi:没有 NVIDIA 显卡,或者没装驱动)
== 软件转码基准(1080p → 720p H.264 4 Mbps,preset veryfast) ==
速度:4.73x 实时
粗略估计:大约能同时软件转码 3 路 1080p→720p(按 70% 余量计算)
第 2 步:把核显交给容器
docker-compose.hw.yml:
# 在 36-plex-A 的 docker-compose.yml 基础上叠加:把核显设备交给容器(Intel Quick Sync / VAAPI)
# 用法:docker compose -f docker-compose.yml -f docker-compose.hw.yml up -d
services:
plex:
devices:
- /dev/dri:/dev/dri
docker compose -f docker-compose.yml -f docker-compose.hw.yml up -d
然后按帮助中心的步骤操作:Plex Web → Settings → Server → Transcoder → 打开右上角的 Show Advanced → 勾选 Use hardware acceleration when available → Save Changes(不需要重启服务器)。
检查点:播放时把画质调低,强制触发转码,然后在 Dashboard 里看当前播放会话,确认显示的是硬件转码(hw)。这一步需要真实的核显和 Plex Pass,box 上没有测过。
调试示例:基准测试测出来太乐观
第一版用纯 testsrc2 测试图样做基准,结果是:
速度:15.1x 实时
粗略估计:大约能同时软件转码 10 路
测试图样大面积是纯色,编码器几乎不用费力。换成加了噪点的片子以后:
速度:4.77x 实时
粗略估计:大约能同时软件转码 3 路
两者相差 3 倍多。所以脚本默认改用带噪点的片子,并且建议传入一部你自己的真实片子:基准测试要用接近真实的素材才有参考价值。
常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
容器里没有 /dev/dri |
compose 没有叠加 hw 文件 | 用两个 -f 启动 |
| 找不到硬件加速选项 | 服务器版本太旧,或者没有 Plex Pass | 升级服务器;账号需要有 Plex Pass |
| 虚拟机里没有核显 | 没有做 GPU 直通 | 在宿主机或物理机上运行 |
| 一个 4K 转码就卡住 | 软件转码 4K 很吃 CPU | 尽量让客户端直接播放,或者准备一个 1080p 版本 |
模板规则
- 先检查,再买硬件:基准测试用你自己的片子。
- 硬件转码按官方订阅使用。
- 估算只是参考,以实际播放时的 Dashboard 为准。
项目资源
| 用途 | 地址 |
|---|---|
| 硬件加速(官方) | https://support.plex.tv/articles/115002178853-using-hardware-accelerated-streaming/ |
| 官方 Docker 镜像(含 /dev/dri 说明) | https://github.com/plexinc/pms-docker |
| ffprobe 文档 | https://ffmpeg.org/ffprobe.html |
| Plex 服务条款 | https://www.plex.tv/about/privacy-legal/plex-terms-of-service/ |
能不能硬件转码,看 /dev/dri 和订阅;不能的话软件转码能撑几路,看基准测试。两个问题都有了答案,再决定买什么机器。