我一直想构建一个影音库来着,毕竟自从整了NAS之后它就一直闲着,堪称大号路由器。最近经过摸索,终于是确定了一个比较满意的方案,算是为NAS“正名”了。所以也就又开了个新坑,希望更新进度没事。由于折腾的东西比较多,而且不同的模块之间关系也不大,所以我打算用2~3篇文章的篇幅来介绍下。
最终的方案是使用Jellyfin构建媒体库、刮削(就是下载新番的剧集数据),BGmi管理新番。其实光论追番的话是没有必要使用Jellyfin的,直接使用BGmi就很完美了。不过由于我的目的是构建一个媒体库,能管理新番、旧番、演唱会等等媒体资源,所以才使用Jellyfin来观看、管理。
然后我想讨论下Jellyfin这个选择。目前主流的媒体库构建程序其实有三个:Emby、Plex、Jellyfin。那为什么我选择了Jellyfin呢?其实最开始,我就只有Jellyfin这一个选项。因为这三者之中,前两个都是闭源或半闭源、完整版收费的,只有Jellyfin是完全免费且全部开源的。所以出于支持开源与穷的原因,我肯定会选择Jellyfin。而且Jellyfin作为Emby的分支,功能和生态都不逊色于其他两者。
本文中的最终构建效果如下。可以看到番剧信息齐全、界面对我个人来说也很不错。最关键的是更新全部都是自动完成的,基本追平甚至超过了在线网站的追番体验(如果你不追求弹幕的话,不过话说回来,现在还有人追番开弹幕吗?)
正常的安装过程有点麻烦,所以我只提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
。
BGmi的原理是从BT站点搜索种子进行下载,默认使用的是萌番组(可以用bgmi source
切换)。而BT下载就意味着,每一次番剧下载都是从无私的分享者中获益。所以我建议如果可能的话,就在下载完成后进行一段时间的保种,便于后来人的下载。
如果使用Docker方式安装,打开http://ip:9091
就可以进入Transmission的Web UI。在设置中有一个Stop seeding at ratio
,也就是分享率设置。建议至少设置为1.0
,这样在上传量=下载量时程序就会停止做种。如果可以的话,还可以在路由器上设置端口转发以增强连通性,此处就不再赘述。
如果你只需要追番,那看到这里就OK了。之后的内容都是关于媒体库构建的。
首先还是说明为啥要硬链接,主要原因是:
然后是实现方式,我写了个脚本来自动完成硬链接:https://github.com/kaaass/bgmi_hardlink_helper。对于Docker的情况,可以这么配置:
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
文件。
还是用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里的位置。不过为了和其他刮削器配合,建议勾选这几个:
然后就成了,扫描过后应该就会生成新番媒体库。
硬链脚本默认一切番剧都是第一季。但是考虑到不同数据库的情况不同,有可能出现需要调整的情况,这时候就要在config.py
设置特殊的番剧规则了。比如“小林家的龙女仆S”在TMDB中没有单独条目,而是被设置成“小林家的龙女仆”的第2季。因此如果要使用TMDB的数据刮削就需要重命名番剧,并且加上季号。可以在config.py
这样设置:
MAP_RULE = {
# 键值为 BGmi 显示的番名
'小林家的龙女仆S': {
# name 表示映射后的番名
'name': '小林家的龙女仆',
# season 表示对应的季名,参照刮削数据库填写
'season': 2,
},
}
极少数情况下番剧可能会被错误刮削,比如“小林家的龙女仆”怎么又是你会被识别成“小林家的龙女仆 迷你龙”。此时点右下角-识别
,手动搜索一下就行。
没试过,我猜可以。KODI我倒是试过,没啥问题。
可以,比如TMM就可以。
但是不能用重命名,不然硬链脚本就没办法跟踪文件了。真有这个需要可以参考这里修改脚本配置。
自从搞完之后,我就一集番都没有追过了