全过程小贴士-Docker搭建qBittorrent下载器和Jellyfin家庭媒体服务器


0.前言

最近几天忙着部署家庭媒体服务器,中间遇到了很多问题。考虑到个人时间有限,接下来高三并不会有太多时间打磨文章,因此暂时不提供详细的教程。这里只提供一些Tips,供部署遇到问题时排错参考用,基本涵盖了大多数个人部署的时候遇到的问题。详细的部署教程可以参阅网络,文末会推荐一些个人认为质量不错的教程。

I.推荐使用的东西

主程序部分

  • Jellyfin镜像:nyanmisaka/jellyfin (俗称中国特供版)
    该镜像作者对该镜像的描述:

考虑到手动安装或编译 Intel 核显驱动对于用户来说并不容易,本文在此提供了一个开箱即用的 Docker 镜像,包含最新的驱动、jellyfin-ffmpeg、补丁、CJK 系统字体等。后续硬件加速的第一手修复也会推送到此镜像中。Docker 配置文件和相关选项可以继续沿用 jellyfin/jellyfin 的相关教程。

个人主要负责 Jellyfin 硬件编解码和滤镜相关功能的开发,范畴之外的功能请求可能不会回应。

开发者提供的中国特供版镜像

qB 4.5.4/完成通知/自动分类/IYUU辅助/批量删改TK/TK出错标记/PT辅助脚本
本镜像非魔改版、非快验版、非Enhanced增强版,qBittorrent自身的行为/功能全部未做任何改动

附加功能部分

这个工具是一站式的媒体刮削,硬链接,自动重命名工具,并且带有PT站点自动签到功能,个人使用非常方便,识别也很准确。如果可以通过验证,建议使用这个工具,他可以替代下面的Hlink和Sonarr和Jackett。不过因为之前无止境的宣传,他已经停止更新了,且用且珍惜罢。

这个工具具有Web管理界面。能够很方便地兼顾对下载的种子进行做种和Jellyfin搜刮,且支持qBittorrent下载完成后触发自动硬链接。
工具提示:其生成的硬链接会自动检测,刮削改名后不会导致重复生成,非常方便。

  • 自动追番剧工具:AutoBangumi(Github)

这个工具具有Web管理界面,下载器目前仅适配qBittorrent,追番源目前仅有Mikan Project 蜜柑计划 (需代理访问)。
AutoBangumi下面简称AB。AB可以自动获取你在蜜柑计划中订阅的番剧并在番剧更新时自动添加下载任务到qBittorrent中。它甚至可以自动目录结构和文件名为修改可供Jellyfin刮削的样式,并且通过qBittorrent的自带API修改,可以在刮削的同时兼顾做种,可以说是很好用啦φ(゜▽゜*)♪

  • 自动追剧工具:Sonarr和Jackett

这两个工具我个人并未使用,鉴于网络上很多人推荐使用这个工具,这里仅作列出。关于他们的详情请见文末推荐文章。(哦对了,他俩拿来追番一点都不好用,因为他们无法根据英文很好地匹配想要的番剧,且程序相对复杂。)仅推荐追美剧等英文节目。

II.踩大坑-Jellyfin服务端

关于本地化适配

虽然前文推荐了nyanmisaka的Jellyfin,这里还要提一嘴。Jellyfin原版的客户端(包括linuxserver.io提供的)对中文的支持并不友好,生成的头图或者字幕,都经常会出现方格状,无法正常显示中文。推荐中的nyanmisaka制作的Jellyfin镜像补全了CJK中文字体,开箱即适配中文,无需额外加字体。

关于硬件解码

鉴于本人所使用的J4125小主机性能低下,并不适合服务器端解码,因此本人并未涉足这一块。不过,如果使用推荐的Docker镜像,并且Docker运行的宿主机能够访问到显卡,只要为docker配置如下设备映射:

    devices:
        - "/dev/dri:/dev/dri"

就可以直接在Jellyfin开启硬件解码了,英特尔显卡一般用Intel QSV
如果你跟我一样,Docker是在PVE主机中的LXC里运行的,那么你可能还需要额外配置一下。可以参考这篇教程,写的还是不错的。下面摘一些该教程中的片段,仅供参考,条件允许可以点原作者的链接支持一下哦qwq

关于刮削时代理

你可能会发现Jellyfin控制台东找西找找不到设置代理的地方,加上国内不好访问TMDB,难以刮削中文数据。没错,官方确实没在网页端设计这个功能。不过,你可以设置系统环境变量。如果使用Docker,你可以在Jellyfin容器的环境变量处添加HTTP代理,需要用到的环境变量如下:

http_proxy=
https_proxy=

注意:这里的大坑在于,大多数情况下,你的代理软件(例如小猫咪)只会告诉你HTTP代理端口,而不告诉你HTTPS端口。但配置代理的时候时http和https代理两个都要配置的,否则不能有效代理容器。http与https代理填写同一个地址即可。例如我的模板:

http_proxy=http://192.168.100.1:7890
https_proxy=http://192.168.100.1:7890

重点:该客户端与媒体不兼容,服务器未发送兼容的媒体格式

这是个比较笼统的报错形式。不过一般情况下,其实并不是“该客户端与媒体不兼容”的问题,一般问题在于服务端。

我在网上检索过一般的解决办法。大多是要求你更换ffmpeg,亦或者是硬件解码VPP色彩映射等问题。
上面提及的两个问题,只要你使用的是上文推荐的Jellyfin镜像,一般不会遇到。对于ffmpeg,nyanmisaka提供的镜像的ffmpeg已经保证了较高的可用性,更换ffmpeg几乎不可能有作用。对于后者硬解问题,nyanmisaka提供的镜像已经包含了对应的驱动等内容,只要你的容器能访问主机显卡硬件,硬解配置正确,一般不会出问题。因此,几乎可以忽略这两种情况。

在本人的部署过程中,遇到这个情况有以下两种可能:

  • Jellyfin媒体库扫描不完全

表现形式有以下几种:

  1. 能够显示新增加的媒体,但是媒体名字只显示文件夹名字,并未自动命名
  2. 显示出媒体文件夹,但没有匹配封面
  3. 显示的媒体文件夹点进去之后,未显示任何剧集,但是在媒体库对应文件夹中媒体文件确实存在
  4. 出问题的媒体,在首页可能可以看到,但打开就会提示这个

其实如果是因为媒体库原因出现这个情况,这个一般是因为用户操作存在问题。比如在你对媒体文件夹中增删或重命名了媒体文件之后,你试图只对对应媒体进行刷新元数据操作,并没有扫描媒体库。或者某些情况下,在控制台->媒体库中仅对其中一个媒体库进行扫描媒体库操作不一定完全生效。想要解决很简单,请使用扫描所有媒体库而不是对特定媒体库或媒体进行操作。

  • Jellyfin权限不够

这个时候请正确配置Docker容器的PID和UID,并确定宿主系统可以对指定目录进行操作。不知如何配置可以自行搜索。

III.踩小坑-Jellyfin客户端

TV 端

Jellyfin的Android TV端在配置音频输出的时候,一定要把电视支持的音频格式硬解模式勾上,不然播放会出现问题(包括但不限于没有声音,画面加载慢且卡顿,或者黑屏)。比如我家电视,支持各种DTS音频输出,但是默认的音频直出模式并没有勾选DTS兼容,这时需要手动勾上。

关于TV端播放卡顿问题。TV端Jellyfin有几种播放器可以选择,一种是ExoPlayer(系统内置),一种是VLCLib,还有外置播放器等等。最开始我以为使用ExoPlayer才能硬解并且让电视自带的那些功能(运动补偿)等工作。但是其实没必要,默认情况下,播放器的不同不会影响这些自带功能。我选了ExoPlayer反而导致一些片源播放异常卡顿。因此,这里建议直接选择自动,此时Jellyfin会选择最优播放器,避免卡顿。
(例如VLCLib无法正常显示杜比视界内容,但是ExoPlayer可以,那么Jellyfin会自动切换到ExoPlayer。总之自动是很方便的。)

我也尝试过配置Kodi+Jellyfin TV端,最终依然觉得Kodi过于复杂,且Kodi需要额外装皮肤,配置Jellyfin插件。还需要配置Kodi Sync Queue等插件让他能够及时同步媒体库。而且Kodi在我的小米电视ES PRO 86上使用依然出现性能不足问题,实在难以伺候。相比之下,官方的Jellyfin TV端其实已经做的不错了,因此我选择后者。

PC 端

其实PC端疑难杂症不太多。就是,如果不希望在服务端进行转码,建议是在设置->客户端选项->Video处将所有Force Transcode都去掉。其他的不怎么需要管。

另外,Windows端如果遇到界面卡死,但窗口并没有未响应,那可以尝试在页面中右键,然后选Reload,这样就能刷新了。当然直接重启客户端也可以。

Android 端

Android 端Jellyfin建议在设置->客户端设置中将视频播放器类型调整为综合播放器而非默认的网页播放器,这样可以减少服务器端转码。当然如果需要服务器端转码,那可以随意选择。

不过安卓端支持本地硬解的类型较少,你可以看文末的题外话了解我的困境((

需要提醒的是,在客户端设置中,如果没有勾选允许直接播放 SSA/ASS 字幕的话,无论片源是否支持客户端本地硬解,只要出现ASS字幕,就都会走服务端转码烧录字幕。如果你不希望服务器端转码,建议勾选上。但是勾选上会导致字幕特效消失并变为系统自带的丑不拉几的字幕样式。你可以在下方自定义字幕样式让它稍微好看点。虽然也好不到哪里去吧有能力最好还是服务器端转码。

题外话-绕不开的服务器端解码

前面几篇文章可以看出来,我目前正在使用J4125小主机作为All in one设备。但是他的性能本身不足以支持硬解我所需要的片源。如果强行在服务器端硬解,会导致J4125占用过高,直接变成All in BOOM。鉴于家里的小米电视自带的解码器已经足够丰富,杜比视界也好,杜比音效也好,HDR 10这些都是可以正常工作的,服务器端解码对于观影并非刚需。

我的想法是,在主机性能受限的情况下,不要执着于服务器端硬解串流。最好是把目光放在客户端上。无论是Jellyfin TV端也好,Android端也好,PC端客户端也好,最好使用客户端硬解。这样,既可以保证画质,又可以减轻服务器端压力。

但因为一些原因Android端Jellyfin难以解码这些非常规编码格式的片源,Jellyfin客户端会无脑Transcode(服务器端转码)。虽然我的一加手机系统支持杜比视界,但是在Jellyfin中如果不调用外部播放器,仍然会走服务器端编码,又会卡炸。系统自带的解码器齐全且客户端能调用的,估计也就只有TV端了。

考虑到一些比较高级的编码格式大都出现在电影大片上,从实际应用上来说,建议是用TV看电影,画面大而舒适。
然后追番这些,一般番剧的编码方式都是比较常规的H264 SDR,H265 SDR这些,大多终端都能够直接解码,因此Android端追追番还是不错的。如果实在需要用移动端并且本地解码,可以在Jellyfin设置中用第三方媒体播放器,选系统播放器之类的,就行了。

推荐文章

这篇文章风格我很喜欢,而且内容也相对详细丰富,想进一步了解自动追剧,推荐看一看。提醒一下,关于自动追番内容,推荐用文章中AutoBangumi内容而不是Sonarr内容(即用下面第二篇同作者的推荐文章)。

本文较为详备地介绍了AutoBangumi的使用方法。这里对文章中的几点进行提醒:

  1. qBittorrent版本可以为上述推荐的4.5.4,不会出现什么问题
  2. 文中提到,如果要用EMBY Auto Organize且需要保种,可以使用Copy选项。这里提到了BTRFS,但考虑到大多数用户创建存储文件夹可能使用EXT4,这里推荐使用上文推荐的Hlink先创建硬链接,然后再利用EMBY Auto Organize对硬链接的文件进行自动重命名,并且用Move模式。这样可以最小程度地减少对源文件的影响。

如题。可以着重看一下其中关于Hlink的内容,写的不错。
他写的反面教材不就是我嘛,不要太真实。

这篇文章挺认真的,也介绍了好几种追番的办法。个人认为,可以参考一下他配置Sonarr的方法,但是不建议用Sonarr追番,原因上面有提到。

声明:Youwen|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 全过程小贴士-Docker搭建qBittorrent下载器和Jellyfin家庭媒体服务器


挖坑不填浪三年