我一直想构建一个影音库来着,毕竟自从整了NAS之后它就一直闲着,堪称大号路由器。最近经过摸索,终于是确定了一个比较满意的方案,算是为NAS“正名”了。所以也就又开了个新坑,希望更新进度没事。由于折腾的东西比较多,而且不同的模块之间关系也不大,所以我打算用2~3篇文章的篇幅来介绍下。
方案:Jellyfin+BGmi
最终的方案是使用Jellyfin构建媒体库、刮削(就是下载新番的剧集数据),BGmi管理新番。其实光论追番的话是没有必要使用Jellyfin的,直接使用BGmi就很完美了。不过由于我的目的是构建一个媒体库,能管理新番、旧番、演唱会等等媒体资源,所以才使用Jellyfin来观看、管理。
然后我想讨论下Jellyfin这个选择。目前主流的媒体库构建程序其实有三个:Emby、Plex、Jellyfin。那为什么我选择了Jellyfin呢?其实最开始,我就只有Jellyfin这一个选项。因为这三者之中,前两个都是闭源或半闭源、完整版收费的,只有Jellyfin是完全免费且全部开源的。所以出于支持开源与穷的原因,我肯定会选择Jellyfin。而且Jellyfin作为Emby的分支,功能和生态都不逊色于其他两者。
本文中的最终构建效果如下。可以看到番剧信息齐全、界面对我个人来说也很不错。最关键的是更新全部都是自动完成的,基本追平甚至超过了在线网站的追番体验(如果你不追求弹幕的话,不过话说回来,现在还有人追番开弹幕吗?)
BGmi配置与追番
安装与配置
正常的安装过程有点麻烦,所以我只提Docker的安装方式,如果有需要可以自行在Github查看手动安装方式。Docker安装方式使用这个镜像:codysk/bgmi-docker-all-in-one。这个镜像整合了BGmi、定时任务、Transmission下载,非常的合理。配置起来也很简单:
docker pull codysk/bgmi-all-in-one # 数据目录 /bgmi、网页端口 80、Transmission 端口 9091(别忘了这个端口) docker run -d -v ./data:/bgmi -p 80:80 -p 9091:9091 --name bgmi codysk/bgmi-all-in-one
之后就可以通过http://ip:80
进入BGmi的Web UI。
追番
简单的追番操作可以只在Web UI进行,在左侧的“Subscribe”中就可以选择需要的番剧追番。第一次点开可能要求输入Token,默认是bgmi_token
。如果还是登不进去,可能是还没有获取到新番,可以手动刷新一下。首先还是进入控制台,docker exec -it bgmi bash
。然后输入bgmi cal
获取一下番剧时间表,能打印出即可,然后就可以在网页上看到番剧了。
当然,BGmi也支持一些复杂的需求。比如订阅后刷新下页面,就可以指定下载特定字幕组的源。还有些情况下,一个组会同时发布多个资源,如1080p/720p、简体/繁体。此时就可以通过指定过滤器来匹配特定的资源。首先使用bgmi fetch [番剧名]
来查看具体情况,比如对于这种结果:
比如需要1080p、60FPS、简日,就可以把过滤器的“包含”设置为[1080p@60FPS][简日内嵌]
。再次检查可以看到:
这样基本就完成追番了。如果想要立刻开始下载就运行:bgmi update --download
。
*Transmission配置
BGmi的原理是从BT站点搜索种子进行下载,默认使用的是萌番组(可以用bgmi source
切换)。而BT下载就意味着,每一次番剧下载都是从无私的分享者中获益。所以我建议如果可能的话,就在下载完成后进行一段时间的保种,便于后来人的下载。
如果使用Docker方式安装,打开http://ip:9091
就可以进入Transmission的Web UI。在设置中有一个Stop seeding at ratio
,也就是分享率设置。建议至少设置为1.0
,这样在上传量=下载量时程序就会停止做种。如果可以的话,还可以在路由器上设置端口转发以增强连通性,此处就不再赘述。
如果你只需要追番,那看到这里就OK了。之后的内容都是关于媒体库构建的。
硬链接配置
首先还是说明为啥要硬链接,主要原因是:
- 保证BGmi本身功能正常
- 不影响BT保种。随便修改目录结构、文件名会让Transmission没法识别
- 方便自动刮削。关键,如果命名合理就完全不需要手动刮削
- 硬链接本身不占用额外存储空间(多少还是会有一点,不过可以忽略)
然后是实现方式,我写了个脚本来自动完成硬链接:https://github.com/kaaass/bgmi_hardlink_helper。对于Docker的情况,可以这么配置:
- 先在bgmi配置文件夹下创建脚本目录
bgmi/bgmi_hardlink_helper
、硬链接目标文件夹bgmi/hardlink
- 然后把脚本丢进
bgmi/bgmi_hardlink_helper
- 在
config.py
配置硬链接的目标文件夹,如果是bgmi/hardlink
可以跳过这步。注意要填写Docker内的路径
之后起个bash进Docker,运行下看看有没有问题
cd /bgmi/bgmi_hardlink_helper python3 bgmi_hardlink_helper.py preview
如果没有问题的话,直接python3 bgmi_hardlink_helper.py run
看看链接是否完成。如果都没问题,就运行python3 bgmi_hardlink_helper.py install_cron
创建定时任务。这样就实现了番剧文件的自动定时硬链接。
说句题外话,这个脚本其实还支持其他的命名格式,而且也可以修正一些刮削可能遇到的问题,感兴趣的话可以参阅README.md
文件。
Jellyfin的安装与配置
安装
还是用Docker来安装,使用的是linuxserver/docker-jellyfin镜像(也可以用官方的jellyfin/jellyfin,不过为了方便还是建议第一个)。
docker run -d \ --name=jellyfin \ -e PUID=1000 \ -e PGID=1000 \ -v [配置文件夹]:/config \ -v [媒体文件夹]:/media \ --net host \ --privileged \ linuxserver/jellyfin
有几个点需要注意下。首先是PUID
和PGID
的值需要填写id [用户]
指令输出的内容,并且要保证该用户有读写配置文件夹、媒体文件夹的权限,否则会看不到目录内容。使用host
模式网络的原因是便于DLNA等服务,也可以根据README
逐个配置端口映射。使用privilege
是为了便于之后配置硬解,也可以根据README
逐个挂载设备。
配置完成后,应该就可以通过http://ip:8096
打开Jellyfin的Web UI了。经过设置向导后,就可以看到一个空空的控制台。
配置
这一步很简单,只需要添加通过硬链新建的hardlink
文件夹为新的媒体库就行了。所以在控制台-媒体库
新建一个媒体库,路径就是hardlink
文件夹在Docker里的位置。不过为了和其他刮削器配合,建议勾选这几个:
- 语言、国家地区设置正确
- 勾选“优先使用内置的剧集信息而不是文件名”
- 勾选“启用实时监控”
- 在“媒体资料储存方式”勾选“NFO”
- 勾选“将媒体图像保存到媒体所在文件夹”
然后就成了,扫描过后应该就会生成新番媒体库。
一些情况的处理
1. 识别不了第二季
硬链脚本默认一切番剧都是第一季。但是考虑到不同数据库的情况不同,有可能出现需要调整的情况,这时候就要在config.py
设置特殊的番剧规则了。比如“小林家的龙女仆S”在TMDB中没有单独条目,而是被设置成“小林家的龙女仆”的第2季。因此如果要使用TMDB的数据刮削就需要重命名番剧,并且加上季号。可以在config.py
这样设置:
MAP_RULE = { # 键值为 BGmi 显示的番名 '小林家的龙女仆S': { # name 表示映射后的番名 'name': '小林家的龙女仆', # season 表示对应的季名,参照刮削数据库填写 'season': 2, }, }
2. 番剧识别错误
极少数情况下番剧可能会被错误刮削,比如“小林家的龙女仆”怎么又是你会被识别成“小林家的龙女仆 迷你龙”。此时点右下角-识别
,手动搜索一下就行。
3. 可以用EMBY、PLEX吗?
没试过,我猜可以。KODI我倒是试过,没啥问题。
4. 支持其他工具刮削吗?
可以,比如TMM就可以。
但是不能用重命名,不然硬链脚本就没办法跟踪文件了。真有这个需要可以参考这里修改脚本配置。
后记
自从搞完之后,我就一集番都没有追过了
> 自从搞完之后,我就一集番都没有追过了
艹,过于真实,之前搞了自动追剧自动追电影的 sonnar + raddar + jecket,自从搞好以后再也没看过
还真是(
大佬我bgmi在docker上部署后打开web界面只有一个Index of的空白页面该怎么解决
docker的话我没有遇到这个情况,可以在Github给作者发个issue。
受教了!一直用的qb的rss订阅来追番,反正原理也差不多,我也试试BGmi
大佬,硬链接工具用了一段时间很好用!但现在有个问题,就是硬链接一遍后第二次硬链接的话或多链接出一个S01E0-1.mp4文件出来,我查了一下发现硬链接后bgmi数据库里会多出来一个第一集,如下
{-1: {‘path’: ‘/在地下城寻求邂逅是否搞错了什么IV 新章 迷宫篇/S01E01.mp4’}, 1: {‘path’: ‘/在地下城寻求邂逅是否搞错了什么IV 新章 迷宫篇/1/[Lilith-Raws] Dungeon ni Deai wo Motomeru no wa Machigatteiru Darou ka S04 – 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4’}}
但也不是每部番剧都会有
但我查到这就不知道下一步该怎么改了,希望能抽空修复一下!
你的硬链目录是否和下载目录重复了?BGMi 的集数识别是每次请求的时候遍历下载目录实现的,所以如果添加在一起是可能会造成冲突。
是的,我以为那个目录是脚本获取bgmi文件保存位置呢,原来位置是直接从bgmi数据库获取文件地址的。。。。那我直接改硬链目录了,感谢!
大佬,我在使用硬链目录时发现目标目录只能选择在/bgmi下才能正常连接,如果我选择/cartoon目录,就不能正常链接,会报错
“`
共订阅 1 番剧,开始扫描…
Traceback (most recent call last):
File "/bgmi/bgmi_hardlink_helper/bgmi_hardlink_helper.py", line 87, in <module>
run_hardlink(False)
File "/bgmi/bgmi_hardlink_helper/bgmi_hardlink_helper.py", line 60, in run_hardlink
os.link(src_path, dst_path)
OSError: [Errno 18] Cross-device link: ‘/bgmi/bangumi/莉可丽丝/1/[ANi] Lycoris Recoil 莉可麗絲 – 01 [1080P][Baha][WEB-DL][AAC AVC][CHT].mp4’ -> ‘/test/test/莉可丽丝/S01E01.mp4’
“`
我想请教一下有没有解决办法
这个我在 Github README 中已经提到了 “必须和 BGmi 配置的番剧下载目录位于一个磁盘(对于 Docker 就是同一个数据卷)。”
由于这是操作系统限制,因此只要挂载点不同就无法互相硬链。所以只能要么修改 BGmi 的下载目录,要么就是不要使用 Docker 了。
那我可不可以这样修改
docker挂载目录/data
设置下载目录为/data/downloads
设置硬链目录为/data/cartoon
可以的
大佬,我还有一个问题,就是我的transmission做种完成后我想自动删除任务和本地的文件,毕竟已经把一份硬链接到plex播放的目录了,所以怎么才能实现这种效果
我自己很少删资源,所以没有看过自动化的方案,不过这个玩 PT 的应该有类似方案。
另外,在一季还没完结前删掉某一集的话会让 BGmi 识别不到完整的集数,可能也会有一些问题。
大佬问个问题。。。我现在是用transmission把新更新的新番下到一个文件夹里,然后在电视上看,自动啥的还没开始研究
但是jellyfin的文件名只显示几个字符,几集动画混一块的时候我甚至看不出是第几集,有办法让jellyfin的文件名显示全部吗?
Jellyfin 显示的是元数据中的名称,不是文件名。我猜测可能是因为 Jellyfin 自动从文件名里推测了一个动画的名称,不过因为我都是刮削了视频的所以不清楚怎么显示文件名,或许把对应媒体库的刮削关掉会有帮助。
我就觉得nastools自动得太彻底,比如说我电影就几部,用不着再单独分中国外语之类的
对了。。其实我是过来问问题的,“配置起来也很简单:”到后边那串命令之间到底发生了什么事。。
我用的是黑群,docker配置完后完全不知道在哪输这些命令
另外,这个是集成了transimission了?如果原来就装了咋办
群晖的话在控制面板里打开 SSH,然后连接终端输入这些指令就行了。也可以用 Docker GUI 下载 codysk/bgmi-all-in-one,然后映射 /bgmi 目录和 80、9091 两个端口。
Transmission 是自带的,这个镜像的话应该没有提供单独的 BGMi 版本。