jellyfin 10.8.0 预热,为官方Docker开启VPP色调映射及PGS字幕支持
jellyfin最近放出了10.8.0 alpha测试版,目前已经是第二个版本alpha2了。想尝鲜的小伙伴可能已经安耐不住想感受一下10.8.0带来的更新(一大堆英文改进及修复,英文好的小伙伴们自己去官网围观一下吧)。想试用alpha版本,出现了一个尴尬的情况。Linuxsever/jellyfin版本的docker迟迟不发布,倒是官网的jellyfin/jellyfin版本Docker每次都是第一时间发布。当然,官网也发布各大系统的手动安装的包文件,小伙伴们任意选择。先来看看官网的安装包:
是不是很丰富呢,Next Stable Per-Releases(10.8.0)就是最新体验版啦。再看看Docker呢:
Docker更新也是非常的及时。上次我写了一篇文章《为jellyfin开启VPP和openCL色调映射》 ,推荐小伙伴们使用Linuxsever/jellyfin版本的docker来开启intel的QSV视频加速,以及QSV/VAAPI开启VPP色调映射并支持PGS字幕烧录,让我们完美实现实时转码。想不到打脸来得这么快,Linuxsever/jellyfin版本的docker截止今天都还没有10.8.0供我们尝鲜,唉,那么我们今天就换回jellyfin/jellyfin版本的Docker来实现同样的功能吧。
这里我同时要说一下当前的发行版本10.7.7和测试版本10.8.0 alpha2,毕竟10.8.0是测试版,虽然有很多改进和新功能,但也因为变动太多,出现了一些新BUG需要修复,目前仅建议喜欢折腾的小伙伴折腾。
另外一点很重要,之所以要推荐10.8.0 alpha ,是因为官方开发组由10.7.7的Debian内核版本Buster (10),更新为10.8.0的Bullseye (11)了,这个Bullseye的内核是有21.1.1版本的intel驱动可供安装的,这也是我们能够打开VPP色调映射的基础。要实现,其实只需要一步,就是下文第二节安装驱动即可。不过还有些遗留问题需要解决,所以本文包括了其它章节,如果有些小伙伴对这些很熟悉,可以直接跳到第二节去看。
这次我们从全新布置容器开始说,从新建一个Docker容器到完善补丁完美使用,实现的步骤如下:
1 安装设置jellyfin/jellyfin版本的Docker
2 安装/更新 intel 驱动
3 安装/更新 ffmpeg
4 结束,再见的时候
和上次Linuxsever/jellyfin版本的docker介绍类似,这篇文章不是科普jellyfin的Docker基础奶妈级安装教程,如果第一次使用jellyfin的小伙伴请搜索一下其他奶妈级安装教程。我们主要讨论需要动手能力的一些修补和提升,所以基础安装我会快速带过,偶尔会贴图提示下一下,希望小伙伴们理解。
1 安装设置jellyfin/jellyfin版本的Docker
首先我假设你使用并熟悉群辉NAS的docker。我们先通过注册表拉取需要的jellyfin/jellyfin映像,记得选 10.8.0-alpha2 版本。
如果你使用界面版本的Docker拉取很缓慢或老是拉取不了,可以快捷使用ssh,使用命令获取,这个速度就快多了,10.8.0 alpha2 测试版:
docker pull jellyfin/jellyfin:10.8.0-alpha2
获取完成后,点击【启动】,新建一个容器:
容器名字,取个好听的名字,容易区分的名字,或者干脆默认。记得勾选权限,可以限制资源,高权限必须选取来实现硬件编解码,然后点击【高级设置】,如图:
进入高级设置,我们主要按jellyfin的官网要求,配置config和cache目录,另外指明一个以上的多媒体目录,这我的设置仅供参考,多媒体目录我分类了一个Classic目录来做演示,并设置为只读,今后jellyfin误操作修改和删除,是无法更改我的媒体目录的,安全第一,安全第一。这个只读保护,完全不影响jellyfin的常规使用(你要用jellyfin来编辑删除媒体文件例外),如图:
配置完成后,再到网络部分勾选 【使用与 Docker Host 相同的网络】,这样避免端口映射,直接使用NAS的8096端口管理即可,这里是简化演示,有需求的小伙伴根据自己需求设定网络模式和端口,如图:
这里设置好,就可以直接点击【应用】,一个新容器就设置好了。我假设你不是jellyfin新手,web访问NAS的8096端口,设置好管理员账户密码,设置多媒体目录,就可以进入jellyfin服务了。
当然,服务器名字你可以自己取,为了便于识别,我在名称上标注了alpha2。我们可以看到版本显示是10.8.0。第一次配置服务器呢,有个基本字体需要设置来解决字幕方框问题(主要针对ASS/SSA字幕),如图:
在【控制台】【播放】设置界面中,找到【备用字体文件路径】,指定一个当前容器能够访问的路径,当然该路径里面得预先放入包括中文简体、繁体,日文,韩文的免费字体,比如放到config目录下取名myfont目录:
上图两个字体,我测试了一下,简繁体,韩文日文都是支持的,下伙伴可以网上搜一下,一般都可以找到下载。备用字体设置页面里面把路径选好,【启用备用字体】勾选上,就可以了,如图:
上面我们解决了视频播放的字体问题,媒体库的字体方框还待我们解决,比如你会看到这个情况:
这是因为jellyfin自带的系统字体缺乏扩展字库支持引起的不适,我们可以通过覆盖jellyfin的dejavu目录下的.ttf文件来实现(要动用ssh大法),不过现在有更简单的办法,通过安装包来解决:(最近外网抽风,访问很慢啊,以下更新或许耗费几分钟到几十分钟,如果大家没有耐心,可以跳过字体修复,先看后面几节,我们不需要更新资源就能完成后面几节的补丁)
安装之前,我们必须先更新源,否则可能....会提示找不到............
apt update
如果你网络够通畅的话,很快就更新完了,然后再安装字体:
apt install fonts-noto-cjk-extra
安装完成后,记得需要重启一下容器,字体才会生效。进入媒体管理,选择【刷新元数据】,模式选择【覆盖所有元数据】,如下图:
等待媒体库更新一次,这样界面图片就会重新刷新,字体也不再显示方框了:
如果你是intel的3345以上的cpu(我测试演示使用的是一个8代i5),那么默认开启硬解就应该可以正常工作了,【控制台】选择【播放】,硬件加速按照下图选择,这是官方配置可支持硬解的配置状态:
如图所示,当你开启转码播放的时候,是启动硬件加速的,如果遇到HDR视频,会调用OpenCL方式映射SDR,让你的HDR视频画面看上去不再泛白而趋于正常。
上图是正常启动硬件加速,HDR视频转换SDR视频的截图,如果你不勾选【启动色调映射】,那么你将会看到下面这种画面:
上图应该是大多数小伙伴关闭色调映射能看到的。因为我的显示器支持HDR,不巧我的操作系统也升级了Windows11,win11对于HDR支持更灵活,就算我不开启HDR,偶尔,浏览器播放器在检查到HDR视频流后还是进入了一个比较尴尬的状态,没有完整启动显示器的HDR,又不同于普通SDR显示器,或win10状态下不启动HDR的模样,如果你遇到了,参看下图,HDR启动了,但是亮度没处理好.....HDR普及看来还有很长的路要走啊。
回到我们的诉求,我们在需要转码到不支持或没开启HDR的设备上的时候,我们需要HDR转SDR映射,官方默认的色调映射已经工作了,我们为什么还要折腾呢?因为openCL色调映射现在还不支持PGS字幕!如果你的视频是PGS字幕的话,你选了字幕,它也是不显示的。当然,你关闭色调映射,PGS字幕就可以看到了,但是颜色亮度就惨不忍睹了...........jellyfin的开发者,正在抓紧修补openCL的PGS字幕烧录问题,开发人员一度更新了ffmpeg做了预先支持。但是要完全工作,还需要jellyfin的服务器端支持,可惜到10.8.0alpha2仍然还没实现。
所以我们回到老路,启动VPP色调映射。参考linuxserver/jellyfin,我们知道VPP色调映射目前是支持PGS字幕的。那么我们直接开启VPP色调映射不可以吗:
很遗憾,你会得到以下结果:
是的,太残暴了,竟然直接不支持!下一节,进入我们今天的主题,10.8.0 alpha2给了我们机会,只要我们给它打上补丁,它就能支持VPP色调映射了。
2 安装/更新 intel 驱动
前面我们提到,大概,我猜,或许是因为Debian内核,intel不给提供开源驱动的原因,所以jellyfin官方没有集成驱动。10.7.7基于Buster,10.8.0基于Bullseye,网上能找到Debian(Buster)的intel驱动只有18.4.1,这个驱动有点过时了,依赖包版本也比较低,我测试了升级部分依赖包,还是没办法升级Buster的intel驱动。但是,Debian(Bullseye)的intel驱动我们能找到到21.1.1版本,这个版本可是配合ffmpeg实现过QSV/VAAPI开启VPP色调映射的。先来个驱动包下载链接:
http://ftp.br.debian.org/debian/pool/non-free/i/intel-media-driver-non-free/intel-media-va-driver-non-free_21.1.1+ds1-1_amd64.deb
下载的.deb文件,为了方便使用和演示,请小伙伴放到我们配置容器时候挂载的config目录里。打开Docker的【容器】【详情】,到【终端机】新增一个 bash:
执行安装命令:
dpkg -i /config/intel-media-va-driver-non-free_21.1.1+ds1-1_amd64.deb
提示错误:
dpkg -i /config/intel-media-va-driver-non-free_21.1.1+ds1-1_amd64.deb
Selecting previously unselected package intel-media-va-driver-non-free:amd64. (Reading database ... 8687 files and directories currently installed.)
Preparing to unpack .../intel-media-va-driver-non-free_21.1.1+ds1-1_amd64.deb ...
Unpacking intel-media-va-driver-non-free:amd64 (21.1.1+ds1-1) ...
dpkg: dependency problems prevent configuration of intel-media-va-driver-non-free:amd64:
intel-media-va-driver-non-free:amd64 depends on libva-driver-abi-1.10; however:
Package libva-driver-abi-1.10 is not installed.
intel-media-va-driver-non-free:amd64 depends on libigdgmm11 (>= 20.4.1+ds1); ho
wever:
Package libigdgmm11 is not installed.
dpkg: error processing package intel-media-va-driver-non-free:amd64 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
intel-media-va-driver-non-free:amd64
以上提示我们缺乏依赖包或依赖包的版本太低,那我们先升级一下上文提到的两个依赖包,
libigdgmm11:
http://ftp.br.debian.org/debian/pool/main/i/intel-gmmlib/libigdgmm11_20.4.1+ds1-1_amd64.deb
libva-driver-abi-1.10:
http://ftp.br.debian.org/debian/pool/main/libv/libva/libva2_2.10.0-1_amd64.deb
同样,下载的两个.deb,我们放到config目录,执行下面两个命令:
dpkg -i /config/libigdgmm11_20.4.1+ds1-1_amd64.deb
dpkg -i /config/libva2_2.10.0-1_amd64.deb
执行上面两个安装包,应该不会再报错了,然后执行驱动安装:
dpkg -i /config/intel-media-va-driver-non-free_21.1.1+ds1-1_amd64.deb
是不是瞬间就安装成功了呢。我们来打开VPP映射看看效果:
是的,没有报错,画面中也出现了我们选中的PGS字幕。有的小伙伴可能还遇到点小问题,仍然提示播放错误,不要着急,如果你仔细看看jellyfin的服务器端日志的话,你会发现这个情况:
这个错误,跟安装驱动之前报的无法解码错误是不同的。据很久很久以前(就是上个月,2021年10月啦)开发者解释说,是部分HDR视频缺乏HDR元数据导致。在我以前文章 《为jellyfin开启VPP和openCL色调映射》 ,也说过这个问题。开发者已经更新了ffmpeg来修复这个BUG,我们需要到下一节去打上ffmpeg补丁。我也不知道为什么jellyfin开发团队已经确认并修复了这个BUG,但还是没有随10.8.0的jellyfin一起更新。总之,我们还是自己动手打上补丁吧。
3 安装/更新 ffmpeg
关于这个更新,小伙伴可以参考 《为jellyfin开启VPP和openCL色调映射》 ,在这里我就简单粗暴一点了。
为了解决部分HDR视频报错的问题,我们需要去开发者的开源网站上下载更新ffmpeg,开发页面:https://github.com/jellyfin/jellyfin-ffmpeg/pull/76/checks 这个网站是国外开源网站(你没听说过??)可能访问有点慢,有时候还打不开,耐心点,多点几次应该是可以访问的。开发页面里面右边的Artifacts,找到并下载bullseye amd64 package,如图箭头位置:
下载后,是一个zip文件,解压我们得到我们需要的.deb文件。我们仍然把它放到config目录里面,执行命令更新:
dpkg -i /config/jellyfin-ffmpeg_4.4.1-1-bullseye_amd64.deb
见证奇迹的时候到了,我们再打开刚才报错的HDR视频,应该可以顺利播放了吧。我们再回顾一下前后画面的不同:
从上到下,分别是 1 不开启色调映射的画面,2 默认容器初始状态开启opengCL启动映射但不支持PGS字幕,3 补丁后,开启VPP色调映射已经支持PGS字幕。小伙伴是不是看到除了字幕,是不是渲染颜色也更丰富了呢。
4 结束,再见的时候
非常感谢jellyfin团队,他们坚持免费并持续得更新。jellyfin现在扩展了更多的项目,其客户端涵盖windows,linux,android,androidTV,ios等,还有众多控件及相关产品在开发,更重要的是他们都是开源的。
10.8.0 目前还是 alpha2 测试版,有一些遗留问题,比如openCL 的PGS字幕支持问题。同时因为改进较多,也出现了一些新bug,期待10.8.0正式版能修复它们。
一些彩蛋供大家分享:
安装完补丁后,我们还可以启动intel 的QSV硬件解码配合VPP色调映射:
细心的小伙伴可能看到了,如上图,同样条件下转码速度从60FPS提升到了84FPS,足足提升了40%。QSV解码可是最直接的硬解,不像VAAPI还通过了内存拷贝环节,加上这么可观的的提升为什么我们不用QSV呢?呃,那是因为QSV目前还有点小BUG,开发者正在修复过程中。那就是部分视频,包括不带HDR的视频,解码会被锁定在13-19FPS左右,也是PGS字幕烧录背的锅,关闭PGS字幕,转码速度就是100多甚至300多。所以,BUG消除以前,为了更好的兼容我们还只能继续用VAAPI硬解,如下图1 BUG锁帧,图2 关闭PGS速度起飞:
10.8.0 播放界面控制按钮更多了:
新BUG排序方式在刷新后失效:
按照jellyfin开发组的速度,相信很快10.8.0就会和大家见面。欢迎小伙伴们共同探讨,全文完。
无思者无忧
校验提示文案
是妹子的梦
校验提示文案
swallowfan
校验提示文案
RoyceX
校验提示文案
值友6626941466
校验提示文案
逍遥风雨10
校验提示文案
你们跟我拼了
校验提示文案
今年大雪有大雪
校验提示文案
死在太空的猪
校验提示文案
simplifer
校验提示文案
值友2719905863
校验提示文案
okid
校验提示文案
joker95275
校验提示文案
值友3832164772
校验提示文案
telanx
校验提示文案
不求
校验提示文案
值友1663644441
校验提示文案
逍遥风雨10
校验提示文案
急停打4分
校验提示文案
baby睡梦中
校验提示文案
坑王灬驾至刂
校验提示文案
nemofq
校验提示文案
值友2719905863
校验提示文案
yolin666
校验提示文案
NyanMisaka
校验提示文案
值友4348360222
校验提示文案
攻城狮198011
校验提示文案
攻城狮198011
校验提示文案
海蓝水
校验提示文案
过来的雷
校验提示文案
丰锅神操作
校验提示文案
simplifer
校验提示文案
海蓝水
校验提示文案
值友9670507551
校验提示文案
死在太空的猪
校验提示文案
lucksc
校验提示文案
红浪漫总裁
校验提示文案
黑V夜
校验提示文案
danielin
校验提示文案
DeepRed007
校验提示文案