本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:达文牛
大家Docker常用的jellyfin通常是官方的jellyfin/jellyfin,以及基础库支持更完善的Linuxsever/jellyfin,而今天我们将见到目前最强的Nyanmisaka/jellyfin。
说到nyanmisaka,如果大家访问过github的jellyfin官网,就知道nyanmisaka是官方开发人员。传说他跟阿塞拜疆有点联系,也说他是自己人。目前国内各大软硬件论坛博客都能看到他的留言,国外论坛上也有不少,一会儿英文,一会儿国语,看得我云里雾里。据我偷看了一眼,貌似此大佬专攻jellyfin硬件编解码方面,我记得还有好几个技术方向也看到他的专业提示,不过我最近忘了炒股,损失了好大一笔,精神不佳,导致记忆力衰退,都忘记是哪些领域了。不过,不少官方权威解答,ffmpeg调试改进,都是此大佬。那么大佬2个月前也悄悄说过(说这话的论坛转型关闭了,关闭可真快...眨眼都1个多月了),要做个国内特供版本,免受官方开源限制,直接集成更新的驱动和基础库,国内用户装上就用,不用再打补丁。。。。现在,他来了。
据nyanmisaka不公开的秘密,他的docker主要强化了核显驱动、字库驱动、ffmpeg优化参数以及10.8.0alpha3最新改进和改进还未发布的各种东东。其实nyanmisaka是有公开宣布的,但是他是用英文宣布的,我看不懂。既然视频优化上nyanmisaka大佬做了这么多工作,所以我也希望热衷硬解的小伙伴们能看到并试用这个版本的jellyfin。毕竟使用的人越多,nyanmisaka就越可能天天帮我们更新,有自己人真好。
如果你擅长于重装各种Docker版本的jellyfin,请直接跳到后面的章节去看。文章贴图比较多,为了便于小伙伴快速跳转,先列出章节:
- 全新安装 nyanmisaka/jellyfin
- 牛刀小试,改进的转码能力与效率
- jellyfin alpha3 几个小问题
- 新的色调映射算法
- 最后,很快会再见
全新安装 nyanmisaka/jellyfin
大家不要被标题全新安装吓到了,nyanmisaka是官方开发人员。所以据我测试,nyanmisaka/jellyfin兼容以前版本的jellyfin/jellyfin,你可以直接使用jellyfin/jellyfin的配置目录无损升级。
那么,这个docker是不是装上就用呢,我还是要讲一讲全新安装一个nyanmisaka/jellyfin。
首先,下载docker,我们还是以群晖为背景,开工。
获取nyanmisaka版本
如上图,打开docker搜索到nyanmisaka的jellyfin,双击下载latest版本。如果网络卡顿的小伙伴们,可以去SSH里面pull,我们可以复习一下pull指令。
docker pull nyanmisaka/jellyfin:latest
因为nyanmisaka大佬想提供的是即装即用,所以以上命令行有点违背初衷,下次不再提示。
回顾SSH的闲暇功夫,映像应该下载完毕了,(如果没有完毕,请再看看SSH.......),我们去为镜像启动一个新容器。
启动新容器
这里再复习一下为什么都推荐选latest版本,因为今后有版本升级,我们直接再次拉取latest版本,等映像更新后,我们停止以前的容器->选择重置->再启动,就可以无损升级到最新版本了。是不是感觉很不踏实,这么容易就升级了??但是,很愉快吧?
进入高级设置
我们标注1位置填写容器名称,标注2位置勾选高权限以便于我们可以使用硬件解码,标注3位置启动资源限制,可以在标注4和5位置进行一下资源限制,最后在标注6位置打开高级设置。其中2是必须的,1,3,4,5大家随意,如果你真的很随意只给jellyfin分配了1MB内存,我很想知道结果会。。。。怎么样。。。
点击【高级设置】我们要进一步设置。
高级设置启动
网络模式
存储空间设置
高级设置里面建议勾选自动启动,网络模式选【使用与 Docker Host 相同的网络】,直接使用当前设备IP和端口。储存空间这里,标注1位置,选择添加文件夹,分别添加 cache,config和media目录,nyanmisaka的配置目录与官网的jellyfin/jellyfin相同。实际上,如果你以前有jellyfin官方的docker配置有目录,你可以直接指向你以前的配置目录,平滑升级无忧。这个我好像前面提过?。。。太平滑了,不得不再说一次。
标注5位置,我将media目录设置为只读,防止jellyfin里面误操作删除媒体源文件,安全第一。标注6位置为我在NAS里面对应的目录,大家目录不同,你不要说我写错了。
配置完成按【应用】回到创建容器界面,点击【下一步】。
摘要显示
这里再次确认我们的设置,如果有问题,请不要找我。。。。点击【应用】,马上开始多媒体之旅。
不得不说,启动jellyfin可真快,即使我左手点【应用】,右手开网页,都能马上打开jellyfin。其实好像也没这么快,我键盘上找数字按字母,还带指甲太长按着老别扭,先去修理一下指甲。。。。
浏览器打开你的设备IP地址加上端口号8096。
设置中文
当然选汉语了,奇怪jellyfin官方不是有自己人吗,怎么常见的中文这里是汉语。。。。
配置管理员账号
这里需要注册一个管理员,我就默认root用户名了吧。
添加一个媒体库
这个可以跳过,但是为了便于演示,我按要求先添加一个媒体库。
媒体库设置
我这里媒体库只做最简单的电影类媒体库演示,还有剧集,音乐,相册等类型可供选择,小伙伴可以自行研究,我们会尽快过度到后期的转码效果测试,所以这里仅仅提供电影类媒体库设置作为参考。标注1位置选电影类,标注2位置取个霸气点的名字,比如:《最让人不讨厌的电影》,《厕所常用影院》。不过我还是觉得《经典电影》吐槽率高一点,万一我说经典你说不经典呢,是不是。
标注3位置按【+】选择文件夹,就是我们前面【高级设置】里面设置的那个,如果你忘了是哪个高级设置,那忘了就忘了吧。
媒体库下载语言和地区,按图设置一下,今后刮削对应刮削中文。什么是刮削,这个你可以搜一下。本文不会深入介绍刮削,刮削可能遇到元数据下载器没法访问服务器的故障,这个需要改hosts或自建DNS代理。这个是常见问题,有很多文章介绍。我的解决方案是局域网自定义DNS代理,随时可以更新,整个内网都能同步更新刮削服务器地址(api.themoviedb.org的IP时不时就不灵光了,常换常新吧)。但是这个方法有点安全隐患,这里就不展开了。我默认大家刮削是没有问题的,甚至是已经预先刮削好。
媒体库建议选项
标注1位置是10.8.0带来的新特性,每个媒体库可以自动收集合集,我暂时把它关了。因为它会自己建了一个名叫合集的媒体库,更重要的是,因为刮削元数据的原因,它统计的合集并不准确,有时候系列名也不对。想试试的小伙伴可以打开,默认是勾选上的。元数据下载器这里,第一个TheMovieDb,就是我们提到的会调用api.themoviedb.org来刮削,如果你有未刮削的电影,这个服务器基本都能刮削出来。第二个 The Open MovieDatabase 默认是勾选的。它可以补充第一服务器没刮削到的资料,比如获取烂番茄的评分。两个服务器的优先顺序可以用旁边的上下箭头调整。
标注2位置是新选项。按照音乐媒体库的同样选项解释,应该是指从电影文件内嵌的附件提取封面或海报图片。标注3位置建议取消,是刮削不了海报图片的时候从视频中截取画面。
如果你的电影已经刮削好,建议图片获取可以全部取消。
取消图片获取方式
即使你的电影已经刮削好,也建议保持元数据下载器的选项,比如你关闭了TheMovieDb,那么你的演员表头像和演员信息,就不会再更新了。
点击【确定】,第一个媒体库配置完成,【下一个】。
元数据默认选项
这里提示我们将为后期的媒体库配置默认语言和地区。
默认远程访问
转码,当然还有个作用就是外网访问了,默认是勾选的,点击【下一个】。
完成设置
若干个下一个后,终于有【完成】了,点击后会再次出现登录界面,登录我们的管理账号进去。
左上角点击进入控制台
我们观看电影之前还有点事情要做,那就是设置硬件编解码。点击左上角,进入控制台。
控制台
打开硬件解码
我们直接配置个目前官方10.8.0alpha3都不能干活的配置,如上图。注意标注5的下方、标注8和标注9这几个地方出现了新选项。标注2、标注7、标注8这个位置,我们会不同选择来进行一组简单的性能对比。这里先暂时不管,按图配置就能愉快的转码了。
对了,我们先回到媒体库看看。
已经默认支持中文字库
完美,我们没做任何补丁,媒体库字库已经支持中文,不会显示框框框框了。如果你的媒体库没有出现图片,请耐心等待它自己自动更新,如果已经更新完成还是没有显示图片和标题,那么可以选择手动刷新,来一波:
手动刷新媒体库封面
按照标注顺序,执行三步等待刷新完成。这次出现图片和中文了吧。
到此,一个全新的jellyfin安装完毕,这个即装即用的硬解jellyfin究竟如何呢,接下来我们来试试。
牛刀小试,改进的转码能力与效率
大戏出场,我们选一部4K电影,先看看该视频元数据。
视频参数
这部4K电影是63Mbps码率的HDR视频,需要HDR转SDR、带烧录PGS字幕,转码目标分辨率为1080,码率限制15Mbps。分别在QSV和VAAPI解码方式下,采用VPP和openCL色调映射方式,查看在同一段场景稳定后的转换帧率。
编解码速度对比
5组数据分别是,1.QSV转码 openCL映射 108 fps,2.QSV转码 VPP映射 77 fps,3.VAAPI转码 openCL映射 48 fps,4.VAAPI转码 VPP映射 61 fps,5.对比10.7.7版本VAPI转码 VPP映射 46 fps。
再拿一部60fps的电影测试一下。
60fps 4K 测试
同样的选QSV转码 openCL映射 稳定在110 fps 左右。
以上数据测试硬件环境 intel 8代i5,intel UHD核显655,软件系统为黑裙DSM6.2.3。测试的视频需要HDR转SDR,烧录PGS,缺少一项,转码速度都可能起飞达到3xx fps以上。
对比数据可以看到,nyanmisaka自带的驱动和ffmpeg,加上jellyfin功能支持,转码提升非常明显。
转码功能:如nyanmisaka大佬所说,无脑安装完成,无须自己打补丁,即可支持完整硬件功能。以前版本存在的QSV解码没有openCL色调映射选项,现在有了;QSV解码烧录PGS卡在19fps的问题解决了;VAAPI以前openCL无法烧录PGS字幕问题也解决了。
转码能力:QSV整体转码能力优于VAAPI。与以前的版本相比,VAAPI转码VPP映射(以前版本只有这个模式支持PGS烧录)帧率由46fps提高到61fps,提升33%。QSV转码与VAAPI转码在映射方式上效率相反,QSV在openCL映射方式下效率最高,而VAAPI转码在VPP映射方式下效率高于openCL映射。实际上,经过几天的连续转码试用,我更推荐大家用QSV转码配合openCL色调映射来日常工作,毕竟这个转码帧率能达到110fps左右,比以前的能用的模式(模式不一样哦)46fps,如果直接对比的话提升135%,称为吊打也不过分。
画质提升:以前VAAPI转码的时候,如果大家仔细看画面,可以看到画面被切分为好几个矩形块,而相邻两个块交接线会看到轻微色差和亮度差。新的驱动和ffmpeg更新,已经消除了这个问题。
结论:Nyanmisaka/jellyfin真的是装完就用,玩硬解的小伙伴们可以愉快的过度到这个版本来,nyanmisaka大佬这几天也是火力全开,各大论坛都看到他在互动,docker也在频繁更新,什么,好像刚刚又更新了。。。。
番外,nyanmisaka带来的核心提升暂时测试结束,非常难得nyanmisaka大佬本人也来到zdm留言跟大家互动,所以下面附加一些jellyfin设置和使用方面的讨论,希望nyanmisaka大佬帮大家科普一下。
jellyfin alpha3 几个小问题
QSV模式TV客户端底部色条
在QSV转码烧录PGS字幕的时候,TV客户端默认exoPlayer播放画面底部出现明显的彩色横条,而且随着图像变换。肉眼看上去大概就是有几行。其实不烧录PGS字幕的时候也有。只是行数更少不容易发现而已。
看上去像是内存拷贝数据的时候错位了几行,底部几行没填满。而VAAPI转码就没有,或称为很轻微,仔细看好像有1、2行。
而同样模式在PC的web客户端、手机客户端web/exoPlayer方式都没发现问题。
低功率编码
新版本带来两个低功率编码器选项
新的选项
启动后并没有发现转码速度有提升,而且只能工作在VAAPI模式下,选QSV模式直接报错。
ASS字幕口口口口问题
敲黑板,10.8.0似乎已经支持Web端、exoplayer客户端显示ASS字幕和PGS字幕,无需服务器端转码烧录。在做web端测试的时候,默认为自动的方式下ASS字幕将不会转码烧录。这时候web客户端直接显示ASS字幕,中文字幕还是会因为缺字体而显示口口口口。解决的方法是,启用备用字体。
启用备用字体
我们要进入控制台播放转码设置里面去标注4位置指定字体路径,勾选标注5位置启用备用字体。当然,我们自己要先找好支持中日韩文的.woff2字体,如上图,我是放到config下woff2目录下的。
启用效果
标注1是默认交给客户端显示ASS字幕因为缺字库仍然出现口口口口,标注2是启用备用字库后,客户端ASS字幕显示正常。
ASS字幕也可以强制烧录,通过用户设置页面来启动。
启用ASS烧录
进入用户设置菜单(注意不是进入控制台),烧录字幕选 所有复杂格式字幕 或 全部 都可以启用ASS字幕服务器端烧录。这样nyanmisaka大佬内嵌的中文字库支持就能派上用场了。
这里敲黑板2次 我推荐把ASS文件转为PGS字幕除了所见即所得之外,也在jellyfin中遇到很棘手的问题。每次服务器端转码烧录ASS字幕,都会疯狂读取视频文件,好像是全部读取才能获取ASS文件一样,有的长达几十秒客户端才开始播放(想想一部4K高码电影可有几十个G),我一度以为jellyfin挂了。我测试了好多视频文件,都是如此。而PGS字幕就很正常。理解不了ASS和PGS转码预读差别为何这么巨大。如果说ASS文件需要全部读完才能获取所有特效,即使MKV封装将ASS文件封装到文件的最后,读取文件不是可以SEEK直接读取后段文件吗,一个ASS文件几百K而已。而一个PGS文件,一言不合就是几十M,虽然PGS是按时间顺序一段一段的不需要首尾适应。但是作为预读的话,PGS也可能在MKV封装的最后,读取量更大,为什么PGS不影响转码预读时间呢。。。唉,说得我都糊涂了。。。。。
总之,如果遇到ASS文件烧录播放不出画面的情况,jellyfin并没有挂掉,它正在忙着呢,请耐心等待几十秒,奇迹会出现的。有句歌词:我等到花儿都谢了~~~
也许是我遇到的个别情况,不知道nyanmisaka大佬遇到过没有。
新的色调映射算法
10.8.0版本带来了BT.2390色调映射算法,全新安装已经默认启用该算法。如果手上有同一部电影的SDR和HDR版本的小伙伴,欢迎加入一起来测试。这里我就先贴图为敬了。
选择映射算法
在控制台选择播放转码设置,标注1位置选中启动色调映射,这个是openCL模式,启用VPP模式是没有参数可调的。
openCL 默认算法是BT.2390,以前这里默认是Hable。
参数一览
除了算法选择,下面还有不少参数选项,以上参数有中文介绍,我们先保持建议值。上图最下面一个色调映射参数,默认是空着的,就是默认参数或不需要参数的意思,如果我们选不同的算法,如果有参数的话,在这里设置。先来一组默认参数效果贴图,第一张是作为参考的SDR视频画面。
SDR
必须承认,SDR色彩亮度看上去是很舒服的,这部电影有点典型,就是我找到的HDR版本转换SDR都比较暗(默认参数,如果想调整,看后面),以下效果只代表一部分类似HDR电影,有很多电影的HDR也做得很好,默认参数转出来效果就不错。对比猛烈一点,大家也能看到差距,主要就是大家研究研究,不要认真就好,不要扔我砖头就好。。。。。
HDR-VPP
这个是用VPP转出来的效果,没什么参数可调,就是这样,为什么黑,可能VPP就喜欢黑吧。。。。但是它的饱和度,说人话就是色彩看上去还是很丰富的,就是亮度不准,不知道如果HDR描述的亮度峰值不准的话,哪里可以强制100nits就好了,或许VPP算法默认400或1000没法改。。。。。以下openCL我也没找到这个设置,如果我们调整亮度,只有改该算法的参数来实现。如果有小伙伴找到可以设置VPP映射参数的地方,记得@我。
HDR-openCL-BT.2390
BT.2390 色调映射,nyanmisaka大佬推荐算法。ffmpeg官网我没查到具体说明,可能是最最最新支持,都没来得及写介绍。只知道是一种“基于直接映射的转换方法”。这是我网上抄的,具体什么意思,好像很神秘,不过该方法饱和度(颜色)不错,,,以下不再解释饱和度,亮度没有参数可调,默认里面算不错的。
HDR-openCL-Hable
算法Hable,是原版本默认的转换方法,官方介绍是比Reinhard更好地展现深色和高亮度细节,但代价是会稍微使所有内容变暗。真的有点暗,难怪刚开始用jellyfin的时候,发现我的HDR视频怎么这么黑,我还拿着电筒对着电视照了半天,也亮不起来,唉。。。对了,Hable算法没有参数可调,残念。。。。
HDR-openCL-None
算法None,这个简单粗暴,就是直接对高亮度区域做去饱和。大概就是不要颜色,白色一片。好歹看得清楚衣服上的扣子了,不过也不支持参数调整。
HDR-openCL-Clip
算法Clip,粗暴x2,对于超出的部分硬剪辑。可以支持参数,默认为1.0,调整1.5就是线性增加50%亮度的意思,反正你弄的太亮的地方,白就是了。不过,总算有个可以调整亮度的方法了。
HDR-openCL-Linear
算法Linear,将整个参考色域拉伸为显示终端支持的线性倍数。好像就是最大和最小,拉根直线的意思。于是,这种有很亮场景的画面,我们看到比上面两个方法更暴力的出现了,这完全是黑啊,大哥。线性参数默认也是1.0,要调到多少合适呢。
HDR-openCL-Gamma
算法Gamma,调过显示器Gamma的小伙伴应该熟悉,可调的对数曲线来进行转换。可以调整参数,默认值为 1.8。数学学得好的小伙伴们应该最爱了吧,来试两手?
HDR-openCL-Reinhard
算法Reinhard,使用非线性对比度,通过简单的曲线保留整体图像亮度,从而实现细节变平和色彩精度下降。这个官方定义有点拗口,就是尽量保证亮度但是牺牲了细小的轮廓和颜色的平滑度。可以调整参数,默认0.5,对应指色域内值的亮度大约是剪切时的一半同,如果调整到0.75或0.8,亮度感官明显提升,同比颜色恢复也算不错,但是比SDR还是差一些。
HDR-openCL-Mobius
算法Mobius,平滑地映射超出范围的值,同时尽可能保留范围内的对比度和颜色。如果你觉得色彩准确性比细节保留更重要时,推荐使用。默认参数0.3,是指线性到mobius变换过度点,数学小能手又能看看这组参数怎么调了。
总之,以上方法大部分都对应一个转换曲线,有的可以用参数调整曲线的形状,比如简单的有斜线型、两头平滑中间倾斜类似足型,等等。然后以这个曲线为基础进行转换。。。。算了,我们还是看图吧。
默认映射对比
我们对比一下,1.标准SDR,2.无参数可调的VPP映射,3.没找到参数可调的BT.2390映射,4.没参数可调的Hable映射。可以看到nyanmisaka大佬推荐的BT.2390方法确实不错。
再看看下面这组
全部方法对比
这组也全部采用默认参数,1.标准SDR,2.算法None,3.算法Clip,4.算法Linear,5.算法Gamma,6.算法Reinhard,7.算法Hable,8.算法Mobius,9.算法BT.2390。
可以看到,默认参数下,None,Clip,Reinhard,Mobius,BT.2390至少亮度上胜出。看了官方广告,我决定再试一组Reinhard和BT.2390的。其实也不是全看广告,我也看疗效的。能改参数的我都试了。Reinhard参数直观,亮度和色彩还原综合也算不错,所以。。。还是看图吧。
BT.2390映射对比
这组1 标准SDR,2 算法Reinhard 采用参数0.8,3 算法Reinhard 采用默认参数,4 标准SDR,5 算法Reinhard 参数0.8,6 算法Reinhard 默认参数,7 算法Reinhard 参数0.8, 8 算法Reinhard 默认参数,9 算法BT.2390无参数。
这组测试主要展示了方法Reinhard参数设置到0.8,见标注2,可以获取比SDR更好的亮度效果,缺点是对比度稍差,颜色略清淡,可以【色调映射范围】强制改为TV模式,可以稍微提升一点色泽。为什么能提升,因为TV模式有负信号,相当于拉升了颜色的饱和度和亮度的对比度。。不过这个属于作弊吧,算了。
算法Reinhard同样的参数,在另一部视频对比中,亮度就有点过了,见标注5。这说明不是所有HDR视频转换都需要提升亮度,如果有部分HDR转换偏暗无法忍受的话,建议小伙伴用算法Reinhard,参数使用0.75-0.8。
同时,在默认参数下,算法BT.2390直观感受比方法Reinhard转换效果还是好一点。见标注9和标注8。
我们再次对比一下BT.2390和Reinhard
推荐BT.2390
如上图,1 标准SDR,2 算法BT.2390无参数可调 3 算法Reinhard 参数0.8,4 算法Reinhard 默认参数。可以看到还是SDR效果最好。。。我们还是去找SDR吧。。。。。。。这样的,小伙伴们能不能放大图看呢,标注2算法BT.2390转换的亮度跟标注4算法Reinhard默认参数的亮度差别不大,但是色彩丰富度要好一些。
贴了这么多图,我也不知道怎么建议,数学好的小伙伴们早就自己开始计算参数了吧。我只能说我觉得亮度不够的话,我就用算法Reinhard设置参数0.8,免得我黑灯瞎火的找电筒。简单点,就跟着nyanmisaka大佬的用BT.2390吧,过几天说不定又有新算法。
不知道nyanmisaka大佬是不是在开发一种像相机HDR一样,高曝光一张,低曝光再一张,然后合成一张正常观感又能看到亮度细节的算法出来。这个不是HDR最先出来宣传的效果吗。HDR不是来支持我们老设备看高亮画面的吗,怎么现在就要我不停的买买买买HDR设备呢,我还要存钱买Dolby Vision呢,这里面一定有很大的误解。。
最后,很快会再见
nyanmisaka透露,元旦前后jellyfin 10.8.0正式版会推出。不过相对于官方的jellyfin/jellyfin,nyanmisaka/jellyfin是帮我们集成了最新驱动、字库和相关基础库的,官网因为遵循开源协议的问题,这方面是比较被动的。
作为半官方加强版的nyanmisaka/jellyfin,一起等待元旦节10.8.0正式版的发布吧。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~