跳至主内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

AMD显卡硬件加速教程

本教程将指导您通过AMF或VA-API在AMD集成显卡和独立显卡上设置完整的视频硬件加速。若您使用macOS,请改用VideoToolbox

加速方法

自GCN架构起,AMD显卡开始支持硬件加速转码。

在Windows系统中,AMF是唯一可用方案。

在Linux系统中有两种方案:

  • VA-API - 所有GPU的首选方案,在Polaris(RX400/500)及以上架构GPU中支持完整加速,开源实现。

  • AMF - 不推荐使用,支持有限,仅提供硬件编码功能,闭源实现。

Windows系统中的AMF接口基于DXVA/D3D11VA开发,而Linux系统则基于AMD专业版Vulkan和OpenCL堆栈(闭源方案)。我们仅在Windows平台为其提供完整的硬件加速支持。

Linux系统中的VA-API接口采用开源实现。该开放驱动栈遵循Intel的Libva标准,并通过Mesa的Gallium RadeonSI驱动暴露视频硬件能力。得益于RADV Vulkan驱动的开发者,我们可在Polaris+架构GPU上实现VA-API与Vulkan的互操作,从而利用Vulkan计算在Linux系统实现完整的硬件加速。

备注
  • 与NVIDIA NVENC不同,AMD显卡没有并发编码会话数量限制
  • AMF和VA-API在Windows/Linux系统均支持无头服务器运行(无需连接显示器)

色调映射方法

所有支持HEVC 10-bit解码的AMD显卡均支持硬件加速的HDR/DV到SDR色调映射。

在Windows/Linux平台可选用两种方案,优缺点如下:

  1. OpenCL

    • 优点 - 支持杜比视界P5,提供精细调优选项,硬件兼容性广。
    • 缺点 - Linux系统不支持零拷贝。
  2. Vulkan

    • 优点 - 支持杜比视界P5,使用libplacebo渲染器,无需ROCm OpenCL运行时。
    • 缺点 - 仅限Linux系统,零拷贝仅支持Polaris+架构GPU。

选择GPU硬件

初学者请参考硬件选择指南获取选购建议,高级用户请继续阅读本节内容。

注意

多数AMD独立显卡配备视频编码器,但请注意特定型号——RX 6400/6500系列不具备视频编码器

AMD锐龙APU(后缀为G/GE/H/HS/HX的型号)及基于Zen 4架构的处理器均搭载集成显卡。

选购用于硬件加速的GPU前,建议通过AMD产品规格页面确认视频编解码支持情况。

转码H.264

AVC/H.264 8-bit因其出色的兼容性仍被广泛使用。所有支持AMF或VA-API的AMD显卡均可进行编解码。

  • H.264 8-bit编解码 - 所有支持AMF或VA-API的AMD显卡

转码HEVC

HEVC/H.265 仍然是存储4K 10-bit、HDR和杜比视界视频的首选格式。得益于x265成熟的软件编码支持,以及2016年后发布的大多数GPU广泛实现的硬件编码支持。

AMD对HEVC的支持情况较为复杂:

  • HEVC 8-bit解码 - Radeon R9 Fury及以上(Fiji架构)

  • HEVC 8-bit编码 - Radeon RX 400系列(Polaris)及以上

  • HEVC 10-bit解码 - Radeon RX 400系列(Polaris)及以上

  • HEVC 10-bit编码 - Ryzen 4000系列APU(Renoir)、Radeon RX 5000系列(Navi 1x)及以上

AV1转码支持

AV1是免版税的未来视频编解码器。其更小的文件尺寸能显著节省存储空间和网络带宽,但缺点是编解码对CPU要求极高。硬件加速使得实时转码AV1流成为可能。AV1编码功能在Jellyfin 10.9及以上版本提供支持。

AMD在其最新GPU中增加了AV1加速支持:

  • AV1 8/10-bit解码 - Radeon RX 6000系列(Navi 2x)、Ryzen 6000移动版APU及以上(RX 6400/6500除外)

  • AV1 8/10-bit编码 - Radeon RX 7000系列(Navi 3x)、Ryzen 7000/8000系列、AI 7/9 HX移动版APU、Ryzen 8000G桌面版APU及以上

其他编解码器支持

请参考以下资源:

速度与画质表现

由于缺乏B帧支持,AMD H.264硬件编码器的画质表现一直不尽如人意。虽然RX 6000/VCN3.0重新支持了B帧,但画质提升有限。

AMD HEVC编码器的表现远优于H.264编码器,而RX 7000/VCN4.0新增的AV1编码支持有望改变AMD的编码画质现状。不过目前仍无法匹敌Intel QSV和NVIDIA NVENC。VCN4.0大幅提升了编码速度,VCN5.0则显著改善了画质表现,并修复了VCN4.0中AV1编码器要求高度为64像素对齐的问题(例如1080p错误编码为带黑边的1082p)。

编码速度与画质排序:

VCN5(RX 9000) >> VCN4(RX 7000) > VCN3/VCN2(RX 6000/RX 5000/Renoir) > VCN1/VCE(Raven/Picasso/GCN架构GPU)

Windows环境配置

推荐使用Windows 10 64位及以上系统。Windows Docker和WSL/WSL2不支持AMF加速。

Windows平台已知问题与限制

请参阅此章节了解已知问题和限制。

Windows主机配置步骤

  1. 若您从非GCN架构的AMD GPU升级且未重装系统,请使用DDU彻底卸载旧驱动。

  2. AMD 驱动程序与支持 全新安装最新版驱动程序。

  3. 禁止 Windows 远程桌面会话抢占 GPU 资源:

    • 通过 Win+R 快捷键调出运行对话框,输入 gpedit.msc 打开"本地组策略编辑器"
    • 在左侧导航树定位至 [计算机配置 > 管理模板 > Windows 组件]
    • 在此处找到 [远程桌面服务 > 远程桌面会话主机 > 远程会话环境]
    • 双击右侧面板的 [为所有远程桌面服务会话使用硬件图形适配器]
    • 在弹出窗口中选择 [已禁用] 并点击 [确定],随后重启系统 远程桌面GPU设置
  4. 在 Jellyfin 中启用 AMF 加速,并取消勾选不支持的编解码器。

Windows 环境验证

  1. 在 Jellyfin Web 客户端播放视频,通过降低分辨率或码率触发视频转码。

  2. 打开"任务管理器"并切换到 GPU 页面。

  3. 按以下方式检查各引擎占用率:

    备注

    重复的引擎名称表示GPU可能配备多个视频处理引擎

    • 3D - 2D/3D图形或GPGPU计算负载
    • Copy - 位块传输/拷贝引擎负载
    • Video Codec - 视频编解码器负载
    • Video Decode - 视频解码器负载
    • Video Encode - 视频编码器负载
    • Compute - GPGPU计算负载

    Windows系统AMD状态验证

Linux 环境配置

需使用 64 位 Linux 发行版。支持的 GPU 型号取决于内核与固件版本。

Linux 平台已知问题与限制

请参阅 此章节 了解已知问题与功能限制。

Linux 主机配置指南

Debian/Ubuntu 系统

Jellyfin 所需的 jellyfin-ffmpeg* deb 包已包含所有必要的用户态 Mesa 驱动。

此外只需配置 jellyfin 用户的设备访问权限。

备注

需要 root 权限。

  1. 假设您已添加 Jellyfin 仓库至 apt 源列表,并安装了 jellyfin-serverjellyfin-web

  2. 安装 jellyfin-ffmpeg7 软件包。若存在冲突依赖可移除废弃的 jellyfin 元包:

    sudo apt update && sudo apt install -y jellyfin-ffmpeg7
  3. 确保 /dev/dri 目录存在至少一个 renderD* 设备节点。否则请升级内核或在 BIOS 中启用集成显卡。 注意查看设备节点的权限属组(通常为 rendervideo):

    $ ls -l /dev/dri

    total 0
    drwxr-xr-x 2 root root 120 Mar 5 05:15 by-path
    crw-rw----+ 1 root video 226, 0 Mar 5 05:15 card0
    crw-rw----+ 1 root video 226, 1 Mar 5 05:15 card1
    crw-rw----+ 1 root render 226, 128 Mar 5 05:15 renderD128
    crw-rw----+ 1 root render 226, 129 Mar 5 05:15 renderD129
  4. jellyfin 用户加入 rendervideo 用户组,然后重启 jellyfin 服务:

    备注

    某些发行版中用户组可能名为 input

    sudo usermod -aG render jellyfin
    sudo usermod -aG video jellyfin
    sudo systemctl restart jellyfin
  5. 检查支持的 VA-API 编解码器:

    备注

    Mesa Gallium driver 表示已支持 VA-API 接口

    sudo /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128

    libva info: VA-API version 1.17.0
    libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so
    libva info: Found init function __vaDriverInit_1_17
    libva info: va_openDriver() returns 0
    Trying display: drm
    vainfo: VA-API version: 1.17 (libva 2.17.0)
    vainfo: Driver version: Mesa Gallium driver 23.1.0-devel for AMD Radeon RX Vega (vega10, LLVM 15.0.7, DRM 3.49, 6.1.14-1)
    vainfo: Supported profile and entrypoints
    ...

    VAEntrypointVLD 表示显卡支持该格式解码,VAEntrypointEncSlice 表示支持该格式编码

    Jellyfin 设置VA-API 配置
    H264VAProfileH264Baseline
    VAProfileH264Main
    VAProfileH264High
    VAProfileH264ConstrainedBaseline
    HEVCVAProfileHEVCMain
    MPEG2VAProfileMPEG2Simple
    VAProfileMPEG2Main
    VC1VAProfileVC1Simple
    VAProfileVC1Main
    VAProfileVC1Advanced
    VP8VAProfileVP8Version0
    VAProfileVP8Version1
    VAProfileVP8Version2
    VAProfileVP8Version3
    VP9VAProfileVP9Profile0
    AV1VAProfileAV1Profile0
    HEVC 10bitVAProfileHEVCMain10
    VP9 10bitVAProfileVP9Profile2
  6. 检查 Vulkan 运行时状态:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr

    [AVHWDeviceContext @ 0x557f13a57bc0] GPU listing:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: llvmpipe (LLVM 15.0.7, 256 bits) (software) (0x0)
    [AVHWDeviceContext @ 0x557f13a57bc0] Device 0 selected: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] Queue families:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: graphics compute transfer sparse (queues: 1)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: compute transfer sparse (queues: 4)
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_push_descriptor
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_sampler_ycbcr_conversion
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_synchronization2
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_memory_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_dma_buf
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_image_drm_format_modifier
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_semaphore_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_host
    ...
  7. 如需使用第二块 GPU,请在 Jellyfin 仪表盘中将 renderD128 改为 renderD129

  8. 在 Jellyfin 中启用 VA-API,并根据 vainfo 输出取消勾选不支持的编解码器

Linux Mint

Linux Mint 基于 Ubuntu 的软件包体系构建

可参照 Debian 与 Ubuntu Linux 的配置步骤,但需从 Jellyfin 服务器发布页 手动安装所有软件包 jellyfin-serverjellyfin-webjellyfin-ffmpeg7。同时请根据 官方版本映射表 确认正确的代号名称

Arch Linux

备注

需要 root 权限。

  1. 安装 Archlinux/extra 仓库的 jellyfin-ffmpeg 包:

    sudo pacman -Syu jellyfin-ffmpeg
  2. 需手动安装用户态Mesa驱动以支持VA-API和RADV Vulkan:

    sudo pacman -Syu libva-mesa-driver vulkan-radeon
  3. 检查 VA-API 编解码器支持:

    sudo pacman -Syu libva-utils
    sudo vainfo --display drm --device /dev/dri/renderD128
  4. 检查 Vulkan 运行时状态:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr
  5. 继续完成 Debian 与 Ubuntu Linux 章节的剩余步骤。

其他发行版

对于缺乏常规维护的发行版,我们提供便携式 jellyfin-ffmpeg 二进制文件。

可通过以下链接下载:

备注

glibc 和 Linux 内核最低要求:

  • x86_64 / amd64 架构 - glibc >= 2.28, Linux 内核 >= 4.18 (2018 年及之后发布的主流发行版)

解压后安装到正确路径,并在 Jellyfin 控制台修改 FFmpeg 路径使其匹配:

备注

需要 root 权限。

cd ~/
mkdir -p jellyfin-ffmpeg
wget https://repo.jellyfin.org/releases/ffmpeg/<VERSION>/jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz
tar -xvf jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz -C jellyfin-ffmpeg
sudo mv jellyfin-ffmpeg /usr/lib
sudo ldd -v /usr/lib/jellyfin-ffmpeg/ffmpeg

安装其他必要的 Mesa 驱动包及其依赖项(需包含以下关键词):

  • Mesa libva vaapi driver - RadeonSI

  • Mesa vulkan driver - RADV

Linux 虚拟化环境配置

官方 Docker 镜像

官方 Docker 镜像已包含所有必要的用户态 Mesa 驱动。

您只需将主机的 render 组 ID 传递给 Docker,并根据需求修改配置。

备注

需要 root 权限。

  1. 查询主机系统 rendervideo 组的 ID,用于 Docker CLI 或 docker-compose 文件:

    备注

    某些发行版中组名可能为 input

    getent group render | cut -d: -f3
    getent group video | cut -d: -f3
  2. 使用Docker命令行docker compose:

    • 命令行示例:
      docker run -d \
      --name=jellyfin \
      --volume /path/to/config:/config \
      --volume /path/to/cache:/cache \
      --volume /path/to/media:/media \
      --user 1000:1000 \
      --group-add="122" \ # Change this to match your "render" host group id and remove this comment
      --net=host \
      --restart=unless-stopped \
      --device /dev/dri/renderD128:/dev/dri/renderD128 \
      jellyfin/jellyfin
    • docker-compose YAML配置示例:
      services:
      jellyfin:
      image: jellyfin/jellyfin
      user: 1000:1000
      group_add:
      - '122' # Change this to match your "render" host group id and remove this comment
      network_mode: 'host'
      volumes:
      - /path/to/config:/config
      - /path/to/cache:/cache
      - /path/to/media:/media
      devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
  3. 如需使用系统中的第二块 GPU,请将 renderD128 改为 renderD129

  4. 若要试用不稳定版本,请自行承担风险将 jellyfin/jellyfin 替换为 jellyfin/jellyfin:unstable

  5. 检查 VA-API 编解码器支持情况:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
  6. 检查 Vulkan 运行时状态:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device vulkan
  7. 在 Jellyfin 中启用 VA-API 并取消勾选不支持的编解码器。

Linuxserver.io Docker 方案

LSIO Docker 镜像由 linuxserver.io 维护,请参考其 GitHub 文档:linuxserver/docker-jellyfin

备注

官方 Docker 镜像与 LSIO Docker 镜像中 Jellyfin 配置文件和数据的存储路径不同,因此无法直接互换使用。

其他虚拟化方案

其他虚拟化方案未经验证,AMD GPU 可能支持也可能不支持。

更多信息请参考 Intel GPU 硬件加速教程 - Linux 虚拟化配置

Linux 系统验证方法

在 Linux 系统上,目前没有可靠方法读取 AMD GPU 的 VCE/UVD/VCN 引擎占用率。

但您仍可通过 radeontop 工具查看其他引擎的占用情况。

备注

需要 root 权限。

  1. 安装radeontop工具(不同发行版包名可能不同):

    • Debian/Ubuntu系统:
      sudo apt update && sudo apt install -y radeontop
    • Arch Linux系统:
      sudo pacman -Syu radeontop
  2. 在 Jellyfin 网页客户端播放视频,并通过降低分辨率或码率触发视频转码。

  3. 使用 radeontop 命令检查 3D 引擎的占用率。