为 jellyfin 开启 VPP 和 openCL 色调映射

2021-10-20 17:48:25 21点赞 97收藏 26评论

本文主要对 Docker 中常用的 jellyfin/jellyfin 和 linuxserver/jellyfin ,简单比较两个版本并进一步探讨在10.7.7和10.8.0测试版中顺利实现 QSV/VAAPI 硬解,VPP/openCL 色调映射的方法,以下经验纯属个人意见,如有异议,欢迎指正。

其实在硬件满足的情况下(说人话就是你的NAS的CPU是intel的,带264/265硬件编解码,系统嘛就默认群晖就好了),实现完整支持 QSV/VAAPI 硬解,VPP/openCL 色调映射以及解决中文方框问题只需下面三个步骤:
(1)安装/更新 intel 驱动
(2)安装/更新 ffmpeg
(3)安装字库补丁

如果你熟悉docker和linux,你可以忽略下面的介绍,直接跳到安装步骤。

jellyfin 原开发者更新了 ffmpeg4.4-1,解决了部分 VPP 转 HDR 视频文件缺元数据而报错的问题,修复了一些转码方面的细节,并支持 openCL 色调映射中实现 HDR 视频的 PGS 字幕烧录(可惜直到目前最新的10.8.0的jellyfin 测试版仍然还没支持调用,该实现还得等待 jellyfin 服务器端更新)。
以上安装将涉及一些liunx的命令,我试着介绍相对便于操作的方法来实现。同时有些比如10.8.0测试版缺乏一些依赖包,安装步骤需要更多,如果你不需要折腾,你只需按照每个步骤的前面几步执行。

在正式解决这几个问题之前,我们要先确定我们使用的jellyfin版本。目前docker中最常用的就是jellyfin/jellyfin和linuxserver/jellyfin。
jellyfin/jellyfin 内核是基于 debian(buster) 的,原生自带 VAAPI 的 openCL 色调映射支持,只是在转码 HDR 视频的时候,无法显示 PGS 字幕,即使可以升级最新的 ffmpeg4.4-1也需要 jellyfin 服务器端升级后支持。而且该内核的 intel 驱动更新非常缓慢,现在应该还在 21.1.1 版本按兵不动。
linuxserver/jellyfin 内核基于 ubuntu(focal),正式版原生 intel 驱动和 ffmpeg 已经配置好源,可以直接通过命令行升级最新版本。而且 ubuntu 内核的 intel 驱动更新比较积极,所以我们就来折腾 linuxserver/jellyfin 好了。

Docker 中的 jellyfinDocker 中的 jellyfin

选择 linuxserver/jellyfin 最好直接选 latest 版本,当然你也可以选择需要的版本。推荐选择 latest 版本是为了今后方便免配置更新(此处严重敲黑板,睡觉的同学注意一下)。如果你想试试最新的 10.8.0 的测试版,那么这里是没有的,你可以在我介绍 SSH 命令的部分找到下载的方法。

选择 latest 版本选择 latest 版本

这不是一篇基础的 jellyfin 架设安装教程,我假设你在这方面已经顺利安装完成(如果不顺利,请不要扔砖头,你可以查询很多保姆级安装教程)。
不过这里我还是补充几句,jellyfin/jellyfin 的配置目录一般我们指定 config、cache,而 linuxserver/jellyfin 的我们通常只用指定 config 目录就可以了,他们的目录结构有一小点差别,如果你想共同使用,那么&(#&¥,算了吧,我还没研究,我要说的是应该没什么必要。。。。那么你配置的用户,媒体库,网络端口什么的呢,基本上都在这个 config 目录里面了。如果有新的版本,你直接下载更新注册表里面的 latest 版本,然后到 Docker 页面里面找到你的容器实例:容器 -> 操作 -> 重置(群晖最近升级了一次 Docker ,我记得以前这里好像叫 清除),那么你的 Docker 容器实例不仅部署了最新版本,还跟以前配置的一样:你 config 配置的东西都在。就是,就是,我们需要的补丁都得重新打过。据我估计,怎么的也减少了我们键盘输入几十秒的时间,这就是我前面敲黑板的地方,几十秒有没有,真的有没有?如果你敲键盘很快,算了吧,下次我不敲黑板了。
如果你注册表下载遇到超时,无响应,或者你极度不耐烦,那么请用 SSH 来解决。来个 SSH 命令行吧,记得 sudo -i 命令先提升权限。
docker pull linuxserver/jellyfin:latest
这个初次拉取或后继更新都可以用这个命令。不知道为什么,这个拉取比图形界面选的顺当得多,不知道是不是我的网络卡,机器卡,脑壳卡?
对了,刚才说到 10.8.0 测试版,好的,拉这个版本:
docker pull linuxserver/jellyfin:nightly
这个 nightly 呢,好像叫隔夜版,就是开发者夜夜更新的意思,……(&)*¥#),目前的隔夜版,都是 10.8.0 的。

如果有更新的话会下载最新模块如果有更新的话会下载最新模块

更新完成后更新完成后

在开始安装前,最后一个准备工作,在 docker中 打开 bash。具体地方 容器实例 -> 详情 -> 终端机 -> 新增 -> bash 。

bash命令窗口bash命令窗口

这里我们可能用到的查询命令:
查看 ffmpeg 版本
/usr/lib/jellyfin-ffmpeg/ffmpeg
查看 内核(ubuntu)的版本
cat /etc/lsb-release
查看 CPU 架构
uname -a
查看 intel 驱动
vainfo

到这里,我们已经准备得差不多,下面可以开始我们的更新步骤了:

(1)安装/更新 intel 驱动

标准 latest 版本的源是指定好了的,所以我们安装前更新一下源就可以了,如果第一次更新,需要一点点时间,可以泡杯咖啡。

在 bash 里面执行:
apt update

等你咖啡还没泡好的时候,应该就可以执行安装 intel 驱动 并配置查询语句 vainfo了:
apt install intel-media-va-driver-non-free vainfo -y

如果要打开openCL色调映射,还需要装下面这个驱动(再次敲黑板,手有点疼
apt install intel-opencl-icd

安装完成后,你可以通过 vainfo 命令查询安装好的驱动的版本。今天安装好,应该是21.3.3,真的好快,前两天还是21.3.1来着。看着 ubuntu 驱动的更新速度,不得不叹气 debian 万年不变的21.1.1。

当然,你觉得兼容性有问题或你是个怀旧的人,你可以指定安装版本:
apt install intel-media-va-driver-non-free=21.2.2+i593~u20.04
这个版本好像很多人在用,前几天21.3.1配合ffmpeg4.3.2-1硬解是有问题的,你可以随便降级,想用什么版本呢,随便选一个吧:
apt install intel-media-va-driver-non-free=21.3.1+i611~u20.04
apt install intel-media-va-driver-non-free=21.2.1+i571~u20.04
apt install intel-media-va-driver-non-free=21.2.0+i557~u20.04
apt install intel-media-va-driver-non-free=21.1.3+i538~u20.04

黑板敲得手疼了,我弱弱的提示一下安装nightly 10.8.0测试版尝鲜的朋友吧,官方原包下来是没有指定源的,下载不了驱动,我们得先把源指定好,安装两个依赖包才能完成上面的驱动安装:

先添加 intel key
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | apt-key add -

添加 intel 源
echo 'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main' >> /etc/apt/sources.list

添加源之后记得用 apt udpate 更新一下源。另外,jellyfin/jellyfin 基于debian 内核可能还会提示缺少依赖包,先装依赖包的依赖包 libz3-4 (版本>=4.8.7)

dpkg -i libz3-4_4.8.7-4build1_amd64.deb
安装这个依赖包自己网上找一下吧,我的电脑了不知道怎么就有一个,顺手拿来就用了。wget获取或者本地目录安装,你可以跳到下一节去看ffmpeg4.4-1xxx.deb的安装方式,这里就不重复了,估计要用测试版的人很少吧,用的人也得勤快点吧~

现在可以直接从源升级安装驱动的依赖包 libigdfcl1 了
apt install libigdfcl1

觉得上面的 bash 命令难得输入容易出错吗,Ctrl C/V 不能用吗。群晖 Docker 有帮助提示你,在 bash 窗口,要用 Ctrl C/V,你先按 Ctrl A 激活再接着使用 Ctrl C/V。每次都要用Ctrl A这个招式哦,不用不行哦,记得哦。

(2)安装/更新 ffmpeg

去开发者代码库查到对应的最新版本
https://repo.jellyfin.org/releases/server/ubuntu/versions/jellyfin-ffmpeg/
目前应该找到对应最新的是 jellyfin-ffmpeg_4.3.2-1-focal_amd64.deb

如果直接网络拉取,还得安装一个wget命令:
apt install wget -y

这是一个合并命令,进入home目录把拉取的ffmpeg放在home目录下:
cd /home && wget https://repo.jellyfin.org/releases/server/ubuntu/versions/jellyfin-ffmpeg/4.3.2-1/jellyfin-ffmpeg_4.3.2-1-focal_amd64.deb

执行安装更新:
dpkg -i jellyfin-ffmpeg_4.3.2-1-focal_amd64.deb

安装到这步,你的 jellyfin 应该可以任意选择 QSV/VAAPI 硬解码了。QSV硬解模式下,可以选 VPP 色调映射,而 VAAPI 硬解模式下 VPP 和 openCL 色调映射都可以工作。但我说的工作,不是正常工作,有点遗憾。在这个几个驱动配合下,选择 VPP 色调映射,QSV 硬解在部分转码视频转码锁定在18-19帧,VAAPI/QSV 硬解在部分 HDR 视频转换时报错(报缺元数据)。选 openCL 色调映射,只能选 VAAPI 硬解,虽然不会因为 HDR 视频缺元数据而报错,但是转换所有 HDR 视频的时候都无法烧录 PGS 字幕。

好消息是开发者听见了群众的呼声,2021年9月15日更新了 ffmpeg4.4-1 ,解决了 VPP 色调映射模式下部分 HDR 视频缺元数据的问题。10月10日,开发者再次更新 ffmpeg4.4-1,修复更多细节,并加入 openCL 色调映射模式下烧录 PGS 字幕的支持,遗憾的是截止目前的jellyfin 10.8.0 测试版,都还没在服务端更新这个支持,只能继续等待了。

那么我们还是要更新 ffmpeg4.4-1 的,这个版本至少让 VAAPI 硬解配合 VPP 色调映射实现了完整的 HDR,PGS字幕实时转码。我们先去开发网站找到10月10日的 ffmpeg4.4-1 更新:https://github.com/jellyfin/jellyfin-ffmpeg/pull/76 ,这个页面里开发者已经帮我们编译好了,找到中间 Checks 标签,然后右上角 Artifacts 里面找到我们需要的打包文件,如图,应该是19MB的 focal amd64 package。

开发者页面开发者页面

解开这个压缩包,找到里面的 jellyfin-ffmpeg_4.4-1-focal_amd64.deb 。怎么安装到 docker 里面呢,本来应该拷贝到 home 目录下面去的,这里我简化一下吧。我们不是给 jellyfin 配置了 config 目录吗,把 jellyfin-ffmpeg_4.4-1-focal_amd64.deb 丢 config 目录里面吧(真的要丢吗),然后就可以在 bash 里面升级安装了。
dpkg -i /config/jellyfin-ffmpeg_4.4-1-focal_amd64.deb

(3)安装字库补丁

每次都这样,每次都要这样,唉。真的每次更新都要安装一次耶。

我假设你的字幕中文方框问题随着新版本的推出已经知道怎么设置了,我只告诉你媒体库标题方框的解决办法(别扔砖头...)。来串命令吧:
apt install fonts-noto-cjk-extra

对了,字库安装过后,jellyfin要重启字库才能生效,不像前两步的驱动更新,你一更新就能用。

好了,全文结束了。如果你是一个爱折腾的人,那么 jellyfin 绝对可以让你折腾个够,哈哈。

展开 收起
26评论

  • 精彩
  • 最新
  • 请教一下,我是华擎J3455,安装的DS918。之前一直用vappi,现在按帖子操作完之后,开启qsv,只要是有转码的影片就会提示“该客户端与媒体不兼容,服务器未发送兼容的媒体格式”。折腾很久都找不到问题在哪里。

    校验提示文案

    提交
    你确定安装 ffmpeg4.4-1 了吗。

    校验提示文案

    提交
    我装的是4.3.2.1,但是不影响开QSV吧?

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 媒体方框用的字库apt install fonts-noto-cjk-extra,装了重启后也没有生效啊。网上用的复制六个字体的方式也搞不定

    校验提示文案

    提交
    在媒体库去[刷新元数据]一下,[刷新模式] 选 [覆盖所有元数据] 模式即可,记得字体安装后要重启一次docker实例。

    校验提示文案

    提交
    收起所有回复
  • 9500T的cpu,intel QSV/还不如VAAPI效率高,X265 10BITS解码居然只有14fps,VAAPI差不多40fps。不知道哪里做错了

    校验提示文案

    提交
    发现要把那张图片先删掉,再重新生成才可以

    校验提示文案

    提交
    部分转码文件在QSV模式会被锁定在13/18 FPS 左右,原作者还没修复。估计是和PGS等图形字幕相关,关掉图形字幕,你就满血转码了。现在用VAAPI使用VPP色调映射,基本上完美没有问题。

    校验提示文案

    提交
    收起所有回复
  • 作者你好,你确定4.4.1修复了,可以vaapi用vpp可以烧录psg字幕?我试了还是只有19帧。我服务器版本7.6,intel和ff都更新到最新版了。

    校验提示文案

    提交
    达文牛(作者) :QSV只能开启VPP色调映射,启用映射的时候,4.3版本会因为部分HDR视频被误判缺少元数据而转码失败。4.4就是解决VPP映射这个问题的。而VAAPI可以选openCL映射,所以没有凸显这个问题。openCL映射只是无法显示PGS等图形字幕而已。安装4.4之后目前最佳选择是VAAPI加VPP色调映射。因为QSV还有转码锁帧的问题要等开发者修复。

    校验提示文案

    提交
    哎,无缘。重新装了个10.7.7,安装ff4.4.1,用vaapi+vpp只有9fps。等待吧。可能4025太弱了

    校验提示文案

    提交
    收起所有回复
  • 还有大佬想问下镜像中的/usr/lib/jellyfin-ffmpeg/ffmpeg路径怎么在套件版里使用,用路径选择找不到FFMPEG的路径。反过来docker倒是可以调用条件版的,只是开头要加上/media

    校验提示文案

    提交
    套件版本的还没测试过,空了看看。最近在试用10.8.0.alpha1。。

    校验提示文案

    提交
    那还是等等了 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 我是开发者,路过通知一下。修复字幕烧录、提升HDR色调映射速度的代码已经提交了。包括服务端、网页端,有能力的可以提前下载编译试用一下。jellyfin-ffmpeg也必须更新到之前链接里的4.4.1版本。
    去看看
    去看看

    校验提示文案

    提交
  • 貌似前两个月有人发过这个方法。不过依然感谢楼主分享。收藏就等于学会了 [龇牙]

    校验提示文案

    提交
  • 目前测试了下非常快,可惜的是所有HEVC格式的视频都无法播放。除非用套件版本老式的硬件方式,才可以卡成PPT。大佬有研究出来原因吗,还是要继续等版本更新。

    校验提示文案

    提交
  • 我E3 1285l V4的cpu按照步骤还是不能qsv转码,气死我了,只能选择vaapi

    校验提示文案

    提交
  • 可以将上述步骤写成脚本放在custom-cont-init.d文件夹里,创建containner的时候就会自动执行了。

    校验提示文案

    提交
  • 参考:去看看

    校验提示文案

    提交
  • 有大佬回复吗?想问一下:
    我服务端在群晖Docker装的N大Jellyfin,客户端用的安卓Jellyfin。
    之前安卓客户端上用的网页播放器1080p 20mbps码率解码一直不卡。昨天看的好好的突然app突然卡死,退出重开app以后播放画面卡顿,但音频流畅。后来尝试电脑客户端观影正常,手机调用内部播放器和第三方播放器都正常,唯独网页播放器卡顿,请问大佬知道原因吗?
    手机app软件删除重装也没用。

    校验提示文案

    提交
  • 作者你好想问你下我使用apt install intel-media-va-driver-non-free vainfo -y安装intel核显只有20.1.1是为什么

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
97
扫一下,分享更方便,购买更轻松