全自动观影&追剧搭建指北
本文最后更新于 121 天前,其中的信息可能已经有所发展或是发生改变。

之前我都是用 RSS 配合 qBittorrent 来自动下载的,其实可以说算得上半自动了,但是电影仍然需要手动下载然后创建文件夹复制进去,追剧也是需要在第一集的时候写好我需要的规则,后续才能自动下载;

显然,这不够优雅;但因为我本人的懒癌,也就一直拖下去了,不过在上一篇 文章 中我买了电视和 NAS 后,这显然已经不能忍受了,于是花了些时间,搭建好了全自动的观影/追剧流程,其中有许多细节值得分享的,所以有了这篇文章

方案选择

主流的方案其实就两套:

  • NasTool
  • Radarr+Sonarr

NasTool是国人开发的,所以更适合中文用户使用;而 Radarr+Sonarr 则是国外开发了许多年的老牌软件,适合英语用户

权衡之下我还是使用了 Radarr+Sonarr ,NasTool 虽然适合中文用户,但是发生过很多次删库等等事件,给人一种很不稳定的感觉,所以还是弃用了;Radarr+Sonarr 虽然稳定些,但是配置很繁琐,要安装的软件也很多:

另外就是我用的流媒体软件是 Jellyfin ,如果你用的是 Emby 或 Plex ,文章的某些地方估计不能通用(我没用过不知道),但其中的一些思路和处理都是很有参考价值的

我的系统为标准 Ubuntu 22.04.3 ,具体硬件可以参考上一篇 文章

强烈建议先配置好代理再安装后续软件,没有代理后面安装的软件几乎不可用,我个人使用:ShellCrash,另外建议默认走直连,需要走代理的域名再配置规则,可以避免 BT 下载走代理而白白浪费流量

权限&用户组设置方面后文都会省略,中心思想就是保证所有软件都能访问你的电影&剧集的存储目录,如果嫌麻烦可以全部设置成 root 用户运行(如果你没有公开到公网或者没有重要数据)

强烈建议将本文先看一遍再进行实际操作

qBttorrent

下载器首选,后续的设置我也是基于它去进行设置,我用的是这个 仓库

下载后到任意目录并授予权限

chmod +x x86_64-qbittorrent-nox

创建 Service 文件并写入

nano /etc/systemd/system/qb.service
[Unit]
Description=qbittorrent
After=network.target

[Service]
Type=simple

User=root
ExecStart=/root/x86_64-qbittorrent-nox --webui-port=22345 --profile=/root/qb/config

[Install]
WantedBy=multi-user.target

端口和配置文件的保存目录就自行设置了,保存完启动即可

#开机自启
systemctl enable qb.service
#启动
systemctl start qb.service

#默认用户名和密码
username: admin
password: adminadmin

设置没什么好说的,基本可以保持默认,下载目录自行设置,推荐添加下 Tracker ,我用的是这个:TrackersListCollection;只能手动复制进去,不过一般也没更新,无伤大雅

其实我更推荐 qBittorrent-Enhanced-Edition ,这个版本的 qBttorrent 屏蔽了迅雷等吸血客户端,而且 tracker 可以直接添加上面仓库的 List URL ,自动更新

因为大部分 PT 站点都不支持这个版本的 qBttorrent,所以我还是安装的原版,如果你想精细化一点,可以两个都安装,后面再设置哪个站点用哪个版本的

此处 qBttorrent 是安装在本地使用的,这套方案也推荐使用本地进行下载,我个人没有公网 ipv4 但是有 ipv6 ,所以下载基本没有问题,如果你的家庭宽带对 BT 下载支持并不好,后文 也提供了一种解决方案

Jellyfin

服务端安装 官网 很详细,在此就不赘述了

配置方面解码设置因设备而异所以只能自行配置,刮削个人建议使用内置刮削器,已经足够使用了

客户端我主要使用 Windows 进行观看,方案推荐:jellyfin-media-player+jellyfin-mpv-shim+MPV_lazy

Jellyfin 自带播放器解码并不好,也不支持音频直通,HDR 等等功能,因为是本地播放,等于是播放源文件,不需要转码,所以可以直接交给 MPV 进行播放

原版的 MPV 使用比较复杂,对比了几个比较出名的整合包,最后选择了这个版本,界面简洁,也有 anime4k 可以将番剧画质提升,增加观看体验

MPV_lazy

MPV_lazy 提供了多个版本,我使用的是标准版本,下载完解压到任意目录,配置文件在 portable_config 文件夹中,下面分享些我个人的配置

音频直通配置 mpv.conf

ao = wasapi
audio-spdif=ac3,dts,dts-hd,eac3
audio-channels = 7.1,5.1,stereo

HDR 不转换 SDR 参考 官方文档,在我这里是可以自动激活电视的 HDR 模式的

按键配置 input_uosc.conf

MBTN_LEFT         cycle pause ; 鼠标左键单击 暂停/播放
MBTN_LEFT_DBL     cycle fullscreen ; 鼠标左键双击全屏

WHEEL_DOWN        add volume -1 ; 鼠标滚轮向下 降低 1% 音量
WHEEL_UP          add volume  1 ; 鼠标滚轮向上 增加 1% 音量

UP                add volume  5 ; 键盘上键 增加 5% 音量
DOWN              add volume  -5 ; 键盘下键 降低 5% 音量
LEFT              seek -5 ; 键盘左键 回退 5 秒
RIGHT             seek  5 ; 键盘右键 快进 5 秒

jellyfin-mpv-shim

jellyfin-mpv-shim 就是起到一个桥梁的作用,在 Jellyfin 客户端播放时调用 mpv 进行播放,安装完后在任务栏会有个小图标,先右键配置服务端

服务端配置好后再右键打开配置文件夹,打开 conf.json 进行配置

#调用外部 MPV 客户端,也就是前面下载好的 MPV_lazy,路径根据自己的配置
"mpv_ext": true,
"mpv_ext_ipc": "D:\\mpv-lazy\\mpv.exe",
"mpv_ext_no_ovr": true,
"mpv_ext_path": "D:\\mpv-lazy\\mpv.exe",
"mpv_ext_start": true,

#关闭osc,MPV_lazy中已经有了
"enable_osc": false,

#部分按键配置会和 MPV_lazy 的配置冲突,设置为其它无关按键
"kb_menu_down": "-",
"kb_menu_up": "=",
"seek_down": false,
"seek_up": false,

#设置为最大带宽防止转码
"local_kbps": 2147483,

#MPV_lazy 已经有 thumbnail,这里关闭
"thumbnail_enable": false,
"thumbnail_jellyscrub": false,
"thumbnail_osc_builtin": false,

#转码相关关闭
"transcode_dolby_vision": false,
"transcode_hdr": false,
"transcode_hi10p": false,
"transcode_warning": false,

播放时 Jellyfin 右上角选择 Jellyfin MPV Shim 即可

Jackett

Jackett 可以将多个无论公开还是私有的站点转化为一个统一的 API ,方便将站点添加到 Radarr&Sonarr 里面进行使用。

我选择 Docker 方式安装,

#创建目录存放配置
mkdir /root/jackett
mkdir /root/jackett/config
mkdir /root/jackett/downloads

docker run -d --name=jackett -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -e AUTO_UPDATE=false -p 9117:9117 -v /root/jackett/config:/config -v /root/jackett/downloads:/downloads --restart unless-stopped linuxserver/jackett:latest

启动后就可以添加你的站点了,界面很直观,就不赘述了

为了更好的使用体验,推荐把 FlareSolverrOMDB API 都配置好

#Docker 安装 FlareSolverr
docker run -d --name=flaresolverr -p 8191:8191 -e LOG_LEVEL=info --restart unless-stopped ghcr.io/flaresolverr/flaresolverr:latest

如果启动成功,浏览器访问 127.0.0.1:8191 应该是这样的

然后在 Jackett 中配置即可

Radarr

Radarr 是用来自动下载电影的,如何安装 官网 都写了,此处不赘述。本文的 Radarr 版本为 5.1.3.8246

下面我会将每条设置中的重点部分过一遍,并给出我个人的设置,可以用作参考;设置时请打开高级设置

媒体设置

影片命名

#标准影片格式,如果无特殊需求请和我一致,后文的一些细节问题处理脚本是基于这个命名写的
{Movie.Title:ZH}.{Movie.Title:EN}.{Release.Year} - {Custom.Formats.}{Quality.Full}{.MediaInfo.Simple}{.Edition.Tags}{-Release.Group}

#影片文件夹格式
{Movie.Title:ZH}.{Movie.Title:EN}.{Release.Year}

个人推荐关闭 使用硬链接代替复制,Radarr 的下载逻辑是,当添加下载任务,会先下载到 qBttorrent 的默认下载目录,当下载完成,会将下载好的文件复制到你设置的存放电影的目录

当 qBttorrent 的种子做种完成后,会自动删除(需要设置,后文会讲);所以考虑到硬链接可能带来的风险,复制基本不会有什么问题,也不会存在空间占用的问题。

开启 回收站 ,后文需要用到

根目录 指你存放电影的目录,添加即可;

设置好 根目录 后在添加下载时 Radarr 会显示你存放电影的目录,不用担心,Radarr 仍然会先下载到 qBttorrent 的默认下载目录,下载完成后会自动复制过去

配置&媒体质量&自定义命名格式

这几个设置都是相互联动的,所以合在一起讲;

先设置 媒体质量,按图中所示将 WEBDL-1080p 之后的全部拉到无限制,这么做是因为文件大小并不是严格按照 Radarr 的默认设置来的,我们也不需要这里的质量设置来挑选我们需要的电影,精细化的配置都交给 自定义命名格式 处理会更好

配置

这里就是配置当 Radarr 下载电影时,可以下载哪些质量的电影;我个人是下载 1080p 然后升级直至 Remux 2160p

自定义命名格式

这个功能我更愿意称之为 自定义个人偏好,当你在这里配置好之后,在 质量档案 中就会出现如图功能

简而言之就是 Radarr 在搜索一部电影时,除了会按照影片质量排序,还会根据你设定的 自定义命名格式 进行评分,会优先下载分数更高的影片,确保下载的电影符合个人偏好,下面给出一个例子:

例如我更偏好带有 HDR 的电影,首先,在 自定义命名格式 中添加一个新的 自定义格式 ,命名为 HDR;

增加一个条件,选择 Release Title ,意思是根据种子标题进行匹配,匹配内容为 HDR

保存,然后再回到媒体质量配置,给 HDR 设定一个分数,我这里设置10

这样设置后,当 Radarr 搜索电影时,同等质量下,标题包含 HDR 的资源分数为 10 分,不包含的分数为 0 分,Radarr 就会优先下载这个分数更高的资源,这样我们设置多个 自定义格式 就能更精确的下载符合我们个人偏好的文件

我个人的偏好,是下载体积尽可能大(大多数情况下,体积越大质量越好,而 Radarr 默认情况下不会根据文件体积排序),偏好 HDR ,种子命名规范,下图为我的 自定义格式 配置以及评分:

上图中的数字为文件体积的 自定义格式 ,例如 10 就是 10G~15G ;下图为我手动搜索一部电影时的排序:

Radarr 默认会根据媒体质量排序,因为我的媒体质量文件没有勾选 BR-DISK ,所以不会下载(左侧的红色感叹号代表不会下载)

右侧的蓝色标签就代表了匹配到的 自定义格式+110 则是根据匹配到的 自定义格式 得出的分数, 相同媒体质量下根据分数排序,就这样,通过设置 自定义格式 ,我获得了最符合我个人偏好的资源

值得注意的细节

Radarr 在搜索资源时,是根据资源的标题进行 自定义格式 的匹配的,在匹配到可能的升级资源时,在已有本地文件的情况下会根据本地文件的实际信息而不是标题进行匹配计算出分数,然后再跟可能的升级资源的分数进行比较判断是否升级

所以在设置 自定义格式 时,请根据自己的匹配情况决定是否勾选 重命名时包含自定义格式

在我的设置情况下,流媒体标题,HDR 都是需要勾选的,我的重命名设置在重命名后并不会包含这些标题,如果没有勾选,在重新计算分数时就会导致分数比之前匹配到的小,从而导致资源重复下载

下载客户端

此处按照自己实际情况配置即可,注意一定要勾选 移除已完成 ,勾选后在种子做种完成后,就会被自动删除,减少空间占用

索引器

这里用来添加资源站点,按照前文安装的 Jackett 的指示添加即可

分类这里记得点开来选择一下,Radarr 的默认设置并不能符合所有站点

PT 站点通常都有 H&R 规则,所以推荐配置好相关做种设置,下载器会在做种完成后自动删除

通用

配置好代理保证使用

通知连接

这个部分用来管理 Radarr 的通知,支持的通知方式很多,我个人选择 Telegram 通知,如果你也使用 Telegram ,可以使用我的 脚本 ,优化了通知样式,更加美观,如图左边为默认通知,右边为脚本优化后

额外处理

Radarr 的质量升级还有另一个问题,在下载完一个质量更好的资源后,它先会把老资源删除,不仅是视频文件,还有刮削的图片,NFO,字幕等等也一并删除

这样就会导致 Jellyfin 会自动重新刮削,字幕也需要手动恢复,非常不优雅

我的脚本就针对这个进行了额外处理,会把删除的文件(前文设置的回收站)移动回去,然后把文件名中的老资源名字替换为新资源的名字。

Sonarr

Sonarr 是用来自动下载剧集的,推荐安装 V4 Beta 版本,只有这个版本开始才有上面的 自定义命名格式 ,没有这个功能,后文的很多细节优化都无法实现,本文使用的版本为:4.0.0.738

官网没有提供安装教程,可以参考 Radarr 给出的 手动安装教程 ,步骤都是一样的,注意将 Radarr 的部分替换为 Sonarr 即可

设置方面和 Radarr 都是一样的,下面就挑重点讲了,其余部分可以参考 Radarr

命名格式

#标准单集格式
S{season:00}E{episode:00} - {Custom.Formats.}{Episode.Title}{.Quality.Full}{.MediaInfo.Simple}{.Edition.Tags}-{Release.Group}

#每日单集格式
{Air-Date} - {Custom.Formats.}{Episode.Title}{.Quality.Full}{.MediaInfo.Simple}{.Edition.Tags}-{Release.Group}

#动漫单集格式
S{season:00}E{episode:00} - {Custom.Formats.}{Episode.Title}{.Quality.Full}{.MediaInfo.Simple}{.Edition.Tags}-{Release.Group}

索引器

Sonarr 分类部分多了一个 动画分类 ,建议把它和默认分类设置为一样的,并不是所有站点都能做好分类,而且就中国用户而言 Sonarr 并不能很好的处理番剧,后文会详细讲解追番设置

媒体质量配置

推荐设置两个配置文件,一个用来追番,一个用来给非番剧使用(默认),如图所示,具体下文会详细说明

追番

国内追番主要依靠两个站点就足够了:

通常看番剧以外的剧集如美剧,一般都是下载生肉然后外挂字幕,这一套已经很成熟了,更何况现在各大流媒体几乎都已经有官方内嵌中文(虽然质量稀烂)

而番剧则一般是各大字幕组翻译完后压制在文件中发出,当然也有网站能获取外挂字幕,但也是从字幕组的压制文件中提取出来的,速度并不快

这个其实也不是什么重要的问题,真正影响到自动追番的问题是:命名不规范

可以看到同一部番剧不同的字幕组命名方式根本不一样,最重要的是名称内根本不包含英文名,而 Sonarr 搜索剧集时是以英文名来进行匹配的,所以默认情况下 Sonarr 根本匹配不到国内字幕组的资源,只能匹配到生肉资源

这时候就需要 Jproxy 了,Github 中的简介和安装教程都很详细,我就不赘述了,当然装好 Jproxy 还不够,下面分享下我的设置

我的需求是,在剧集更新时,会先下载最先更新的 ANi 发布组的资源(Baha 源,第一手资源,官方繁体),然后在字幕组更新后,下载字幕组版本替换

我的 自定义格式 配置,这些都需要钩选 重命名时包含自定义格式 ,原因前文讲了

注意我这里 最小自定义格式分数 设置为了 100 ,这是为了避免下载到生肉

索引器建议使用标签功能,因为追番仅仅需要 mikan 和 nyaa 两个站点,默认情况下搜索时 Sonarr 会搜索所有站点,既不高效也浪费资源;同时其它站点也需要设置标签,我就设置了 not_bangumi

这样设置后追番的时候就选择追番的媒体质量配置文件,标签也设置为 bangumi,下载的时候就只会下载设置好的字幕组,保证第一时间追番

在追番结束后想要洗版的时候,就可以把标签改为 not_bangumi ,质量配置文件改为另一个通用的,这样就会搜索所有站点寻找质量最好的资源

通知连接

这里同样写了 脚本 来优化,下面为前后对比

额外的细节处理

和上面 Radarr 的情况一样,Sonarr 在已有资源的情况下也是会根据文件信息而非标题去计算分数的,这在剧集搜索时会比 Radarr 多出一个问题:整季资源种子的体积计算问题

如图,为了符合我的下载最大体积文件的个人偏好,我也设置了文件体积的 自定义格式

Sonarr 无论是匹配单集还是整季合集的种子,都是会使用 自定义格式 去匹配的;但是在已经有本地文件的情况下,当搜索到新的可能的整季资源时,它在对比评分的时候只会和本地文件的第一集评分进行对比来决定是否下载,这就会导致非常多的重复下载,下面是一个例子:

在本地有文件的情况下只会使用第一集而不是整个季文件夹进行分数计算,就会导致相同的资源重复下载

你可能会想使用 重命名时包含自定义格式 来规避这个问题,但是 Sonarr 下载完资源后重命名时是根据单集来重新匹配的,所以并不行

我的解决方案时在 自定义格式 中添加和文件大小相同分数的标题关键词,在 Sonarr 导入完成后执行脚本的变量中包含了种子名称,脚本再根据种子名称来判断是否为多集种子文件,如果是,就把对应大小的标题关键词添加到文件名称中,这样计算分数的时候虽然文件体积的分数低了,但是标题关键词把分数补了回去,就不会导致重复下载

例如 40~50 G 的 自定义格式,我再创建一个 自定义格式 为匹配标题的关键词:SP_40,然后这两个 自定义格式 的分数相同,如下图所示:

实际运行情况如下:

可以看到,Sonarr 获取到的资源是两集一起的,匹配到了 10 G 的 自定义格式 ,评分 20,但因为导入的时候是根据单集重新计算的,所以评分变成了 10

其实你可以看到图片中的文件名已经添加了 SP_10 ,在这一步脚本就已经完成了重命名,然后脚本就会调用 Sonarr 的 Api 去刷新剧集信息,正常情况下,Sonarr 每 12H 会扫描一次磁盘查看文件变更,所以重命名完后得马上扫一次更新 Sonarr 数据库避免重复下载,因为前面是脚本进行的重命名 Sonarr 并不知道,Sonarr 存储的还是重命名前的文件名,如果在 Sonarr 的下一次定时扫描前有新的资源,就还会使用这个老的名字进行分数计算,导致重复下载

在扫描时因为存储在 Sonarr 的文件名不存在了,Sonarr 会认为文件被删除,这里脚本也做了处理:

Jellyseerr

这是个可选安装项,Sonarr 虽然 UI 支持了中文,但是搜索仍然是基于英文的,带来的体验并不好

Jellyseerr 就是用来把 Radarr 和 Sonarr 整合到一起,可以直接在里面搜索添加订阅,中文支持友好,UI也很好看

安装的话 Github 写的很明白我也就不赘述了,值得提的就是 Sonarr 的配置要注意番剧和其它剧集的区别(如果你是按照我的建议配置的话)

就是和前面介绍的一样,站点设置好标签,这里设置对应的标签和媒体质量配置文件。

其它问题

远端服务器下载 BT 然后下载到本地

这里主要是解决家庭宽带无法下载 BT 或者下载速度低至不可用的情况

再次强调,如果可以的话,还是建议本地,远端服务器与本地的连接波动都可能导致自动化流程的不稳定

解决这个问题主要是靠 远程路径映射这个功能

正常情况下如果 qBittorrent 的默认存储目录为 A,下载完成后 Radarr&Sonarr 就会从 A 文件夹将文件复制到你的媒体目录

通过这个功能,就可以把 A 映射到 B,这样完成下载后 Radarr&Sonarr 就会从 B 文件夹获取文件

具体到这里的问题,我们就可以把远端服务器挂载到本地目录,然后通过这个功能将远端服务器的 qBittorrent 的默认下载目录如 /root/downloads ,挂载到本地的目录如 /mnt/bt_server ,这样文件下载完后,Radarr&Sonarr 就会从挂载的目录获取文件,就等于从远端服务器下载到本地了

至于方案选什么都可以,我的一个方案是在远端服务器安装 alist ,然后在本地服务器通过 rclone 使用 alist 的 webdav 挂载到本地,当然这个方案我没有长时间使用过,并不能保证稳定

不过思路就是这个思路,市面上的挂载工具很多,可以多多测试选择最稳定的那个

评论

  1. Stephen
    1 月前
    2024-3-25 3:09:00

    感谢分享~ 悄悄地说,我是搜你写飞机杯评测进来的,不知不觉就刷到技术博文去了。看来对于技术男来说,搞技术还是比打飞机更有吸引力🤭

  2. 3 周前
    2024-4-08 19:55:33

    感谢分享!自定义格式那一段太有用了

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇