EMBY 媒体库搭建计划

准备:VPS(配置建议最小1C2g10g),115网盘

流程图 & 原理介绍

之前的原理图,可以看到直链播放的时候, web -> nginx -> alist ->115 是实际播放路径,webdav -> rclone -> file -> emby 是不走的,这条路径的起到的作用仅仅是给 emby 读取文件用的。

简单点来说,emby上面的所有视频文件的播放链接会被 nginx 动态修改为 alist 302 的 115 直链。

但是为了让 emby 中有「视频文件」,你得给 emby 添加影视库,但是 emby 添加影视库需要「文件」, alist 本身没办法把网盘文件挂载到本地硬盘,所以需要通过 rclone 将网盘文件挂载到本地硬盘。

也就是说,除了 rclone,只要能有工具将网盘文件挂载到本地,让 emby 顺利加载「影视库」,都是不影响最终的直链播放效果的。

理论上来讲,你搞一堆虚假的文件,重命名为视频文件,只要目录结构和名称和网盘一致,骗过 emby 能够顺利入库的方案都是可以的。

采用 cd2 的原因是因为,cd2 挂载的效果比 rclone 要好,能够显著的加速 emby 入库时间,新版本的入库流程如下。

之前写博文画图的时候有意识到可以换成 cd2, 但是感觉没啥意义,后来部分朋友采用 cd2 发现扫库很快

经验证 alist -> webdav -> cd2 -> file 依然很慢,所以具体的瓶颈是出在了 alist -> webdav,或者 webdav 协议本身的限制

如果是 rclone 原生支持的网盘,比如 google drive 个人感觉应该不会和 cd2 有扫库速度上的明显差异,除非 rclone 在设计上和 cd2 有明显的差距(个人倾向于不会,毕竟都是比较成熟的网盘挂载工具,感兴趣的朋友可以验证一下)

关于 alist -> webdav 慢的部分,究竟是 alist 的设计问题,还是 webdav 协议本身的限制,笔者也没有过多探究,如果有了解的朋友,还望不吝赐教一下,谢谢

安装

以下大部分流程与之前是一致的,但是为了照顾一些第一次看到本教程的玩友,还是照抄一遍吧。

测试服务器: RN

测试环境: 纯 docker

建议跟着我的步骤来,打开一个记事本,记录所有教程中要求记下的值(我会以亮绿色标记)

安装alist(如果是Nas,/home/alist替换成/volume/……之类的路址)

docker run -d --restart=always -v /home/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e LMASK=022 --name=alist xhofe/alist:latest

或者

docker run -d \
  --restart=always \
  -v /home/alist:/opt/alist/data \
  -p 5244:5244 \
  -e PUID=0 \
  -e PGID=0 \
  -e LMASK=022 \
  --name=alist \
  xhofe/alist:latest

设置密码

docker exec -it alist ./alist admin set password
记录 alist 帐号密码,示例: admin, password

访问 http://外网ip:5244, 登录管理后台,添加 115 网盘,按需配置,对配置项不太理解的朋友建议直接抄我的

记录: alist 外网地址,示例: http://119.119.119.119

记录 alist token 值,示例: alist-56aed914-dc75-4exxxxx

记录 alist 内网 IP 地址,示例: 172.17.0.2

NAS/群辉无法用shared方式挂载

运行一下代码,volume1改为对应的盘符

mount --make-shared /volume1

开启后是失效,可以建立【任务计划】
【控制面板】—【任务计划】—【新建-触发的任务】—【用户账号选择root】

安装Clouddrive2(unstable版)

安装前检查一下 是否安装了

fuse find /dev/fuse

显示/dev/fuse就是已安装,如果没有的话

apt install fuse3

安装cd2(自行修改路径)
建立路径

mkdir -p /mnt/alist && chmod -R 777 /mnt/alist
docker run -d \
      --name clouddrive \
      --restart=always \
      --env CLOUDDRIVE_HOME=/Config \
      -v /mnt/alist:/CloudNAS:shared \
      -v /home/cd2:/Config \
      --network host \
      --pid host \
     --privileged \
     --device /dev/fuse:/dev/fuse \
     cloudnas/clouddrive2-unstable

安装成功后,打开 http://119.119.119.119:19798 进入后台地址,登录 cd2,扫码添加Webdav硬盘。

添加完毕后,你的 cd2 根目录会出现一个网盘(名称随意),双击进入 网盘根路径,点击左上角挂载按钮

选择挂载路径(这里十分关键跟后面的 constant.js 中的路径直接相关,如果不一致会导致直链播放失败,建议按照我的配置来)

选择好 alist 文件夹,点击确定后,会显示如下路径,建议修改权限为 777。挂载后会如下图所示。


点击挂载后,查看挂载是否成功,若「失败原因」处显示空白,则证明一切正常。

安装embyserver

Nas或服务器不允许用shared方式,可以执行一下代码【volume1改成实际需要Nas或服务器路径或盘符】

mount --make-shared /volume1

自行修改路径(不允许写入刮削文件到网盘,新增媒体库时候,不勾选“将媒体图像保存到媒体文件夹中”):

# 如果你只想通过 nginx 反代后的访问可以不开端口
docker run -d --restart=always --name emby -p 8096:8096 -e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 -v /home/emby:/config --volume /mnt/alist:/mnt/alist:shared emby/embyserver:latest
记录 embyserver 的内网地址,示例: 172.17.0.3
docker inspect --format=<span class="hljs-string">"{{.NetworkSettings.Networks.bridge.IPAddress}}"</span> emby


创建 & 记录 embyserver 的 APIKEY,示例: a159ebxxxxxx
访问 http://外网ip:8096, 初始化 emby,生成并记录 embyserver 的 API KEY

其他配置

关于刮削文件建议

如果刮削文件放在网盘,反复通过网盘读取小文件,可能会影响速度,从而导致卡顿,建议重新用emby刮削(emby怎么实现刮削,后期专门出个教程),建立媒体库时候勾选刮削,并不勾选,具体可以自行研究测试

安装Nginx

Emby2Alist下载链接(点击下载)

上传到服务器/nas,解压emby2Alist

unzip emby2Alist.zip
cd emby2Alist/nginx/conf.d

或者修改好再上传按照下图修改constant.js

【重点,挂载路径:const embyMountPathArr = [“/mnt/alist”],需匹配alist的地址,例如alist显示的网盘路径是/115/电影/xx.mp4,这个地址需要保证跟alist一致,如下图出现2个/115,那个这个地址就改成

const embyMountPathArr = [“/media/115”] ““这个删除的意思””
/
随便找一部电影,看地址:
/
【emby 的地址】/media/115/115/Emby媒体库/电影/华语电影/97家有喜事 (1997)/97家有喜事 (1997) - 1080p.mkv
/
【alist 的地址】/115/Emby媒体库/电影/华语电影/97家有喜事(1997)/97家有喜事 (1997) - 1080p.mkv
/
需要把 emby 的地址,变成跟 alist 一样,这样就实现反代
/
按照上面的例子,就是只要“/media/115”删掉,就能保持跟 alist 一致,所以const embyMountPathArr = [“/media/115”] 就是删掉[“ “]的内容
/
以上只是一个例子,大家理解一下意思

emby

alist

,最终查看网盘的文件路径是/volume2/115emby/media/115,这里填的是/media

但是如果cd2挂载后文件夹是/volume2/115emby/media/115/115,这里填的是/media/115)

完成上方配置后输入

docker-compose up -d

或者(自行修改路径,建议这种,便于管理)

docker run -d \
   --name=emby-nginx \
   -e PUID=0 \
   -e PGID=0 \
   -e TZ=Etc/UTC \
   -v /home/emby2Alist/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /home/emby2Alist/nginx/conf.d:/etc/nginx/conf.d \
   -v /home/emby2Alist/nginx/embyCache:/var/cache/nginx/emby \
   -v /home/emby2Alist/nginx/log:/var/log/nginx \
   --restart=always  \
   --network=host \
   nginx:alpine

测试和使用

不能网页端播放,地址为:外网ip/域名:8091(放行端口);只能通过软件,如emby、infuse、Vidhub、fileball(会提示错误,点击播放可继续播放)等之类,请查看上传是否占用,如占用上传或出现错误,请仔细检查constant.js的路径(docker映射后的路径)。emby2Alist

刮削

Metatube(9KG刮削)

插件地址:Metatube-Community

Jellyfin是一个开源的影音库,Metatube是一个Jellyfin刮削插件,可以轻易刮削小姐姐影片,包括标题、简介、演员、标签、评分等内容。

本文面向的是Jellyfin新手,可能完全没有安装过插件、部署过服务。假设你已经安装好最新版本的Jellyfin,具体的安装不在本文讨论。

本文大概分为三个步骤:安装插件、部署后端服务、配置使用插件

插件安装

1.进入Jellyfin 控制台 > 插件 > 存储库,点击添加

2.输入存储库名称:MetaTube

3.输入存储库URL:https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json

4.在插件目录下找到 MetaTube,点击安装

5.重启Jellyfin

适用于中国的存储库URL:https://cdn.jsdelivr.net/gh/metatube-community/jellyfin-plugin-metatube@dist/manifest.json(可能有缓存)

注意:这一步在打开插件目录界面时有可能因为网络问题一直加载不出来,多等待一会儿或多打开几次,记得使用第二个储存库URL

后端服务安装

为什么需要安装后端服务?

因为该插件是通过后端来刮削数据,我理解的就是后端根据影片名称、代号去不同的网站获取数据,然后将数据存储到数据库中。所以必须要安装后端服务。

后端使用go语言编写,部署比较方便,有多种方式。有一定动手能力的可以选择自己部署,也可以选择部署免费的云服务。

二进制文件部署

二进制文件部署,二进制文件发布于: GitHub Releases

下载完成后使用命令部署:

# -dsn: 数据库文件路径
./metatube-server -dsn metatube.db

这种部署方式适合windows/linux系统快速部署启动后端服务,更新的话重新下载最新的二进制文件即可。

使用Docker部署

这种方式适合有Docker环境的用户。 对于Nas用户可能会自带有docker环境,比如我用的威联通自带Docker-Container-Station工作站。

对于Linux用户来说安装docker也非常容易,百度搜索《linux docker安装》教程非常多。

Windows用户安装Docker desktop可能需要配置一些WSL之类的,有一些门槛。

安装Docker环境后,直接在控制台输入以下命令即可部署。

docker run -d -p 8080:8080 -v $PWD/config:/config --name metatube metatube/metatube-server:latest -dsn /config/metatube.db

更新后端需要先运行以下命令再重新跑一遍上述命令,初次安装请跳过

docker stop metatube
docker rm metatube

使用Docker-Compose部署(推荐)

有Docker环境的话最推荐用这种方式部署,我个人也是用这种方式,部署/更新都比较方便,还可以自动重启。

新建一个文件夹,下载docker-compose文件,需要修改的话改一下,然后直接用命令启动服务即可。

注意有些最新的docker版本使用docker compose命令替代docker-compose

mkdir metatube-sdk-go && cd metatube-sdk-go
curl -sL https://raw.githubusercontent.com/metatube-community/metatube-sdk-go/main/docker-compose.yml -o docker-compose.yml
docker-compose up -d

使用免费的云服务部署(推荐)

之前插件提供一些免费的公共后端地址,但可能用的人太多了就关闭了。我个人最推荐普通玩家用这种方式部署,用邮箱注册一个账号就可以按照教程一步一步部署,最后获取到后端地址,就可以直接使用了。 没有什么门槛,也不收费,甚至因为是国外的服务刮削不容易失败。

参考教程地址:Metatube免费后端

数据库存储

该插件支持多种数据库存储方式,建议使用sqlite,不需要额外的依赖,相比内存数据库能够持久化保存,并且能够加快刮削速度。

以下是我的docker-compose.yaml配置:

version: '3.3'

services:
  api:
    image: metatube/metatube-server:latest
    restart: always
    container_name: metatube
    command: "-dsn /config/metatube.db"       #启动时加载数据库,使用sqlDB
    volumes:
    - /home/docker/metatube/config:/config    #映射配置文件
    network_mode: bridge
    ports:
      - 8080:8080

volumes: - /home/docker/metatube/config:/config 这行代码很重要,因为不映射配置文件的话,这个matetube.db是保存在docker容器内的,无法被外部访问/保存,映射后可以看到数据库文件,也可以做备份。 你只需要修改/home/docker/metatube/config为你要保存sqlite数据库文件的路径。

配置插件

安装好插件和后端服务后,进入插件设置界面,修改服务端地址。比如上一步配置的后端端口是8080,则修改服务端地址为:http://localhost:8080 即可,如果访问失败,可以考虑使用实际的内部ip地址。Token看有没有设置,如果部署的时候没有主动配置Token,那么这里的Token是不需要填写的。

注意如果你是用的别人的服务或者云服务,这里填写的是公网链接,一般是一个https://开头的链接,如果是自己部署的服务,如果在内网的话就是http://开头的内网链接。

其他的配置可以使用默认配置,包括开启预告片、真实名字、自定义标题等设置自行修改

常见问题

1.metatube状态不是active。有可能是jellyfin版本和metatube版本不匹配,更新jellyfin后重启即可

2.metatube无法刮削。有可能是后端服务没正确启动或者配置的后端url地址错误,检查ip,端口号,后端服务是否正常,可以直接在浏览器访问后端地址

3.metatube刮削失败。有可能是网络问题,必要时可以使用魔法。也有可能是影片命名规范的问题,尽可能保证只有影片名称,不要带那些网站的链接

4.可以查看jellyfin和metatube-server的日志,可以确认是在哪一步出现问题

如何使用

上述操作完成后,就可以来刮削影片了。

  • 创建媒体库,选择电影类型,选择影片所在文件夹。

  • 配置媒体库,勾选Metatube作为元数据下载器 (电影), 注意只勾选这一个即可。

  • 图片获取程序也只选择Metatube,然后勾选“将媒体图像保存到媒体所在文件夹”

  • 扫描媒体库-刷新元数据,即可开始刮削,不出意外,刮削完成后会自动显示封面和影片信息。

  • 可以设置成“启用实时监控”,不需要手动刷新,有的实在扫描不出来的可以手动选择识别,填写影片号码后查找。

插件更新

  • 插件是自动更新的,但是要注意有可能版本太新了,需要同步更新jellyfin版本

  • 后端服务需要手动更新,如果用docker-compose部署,可以用如下方式更新:

cd yourPath
docker-compose pull 
docker-compose up -d

注意事项

有一些行为可能导致刮削失败

  • 影片命名规范化,尽可能只有影片标题、代号,去掉那些奇奇怪怪的网站和广告。
  • 仅使用Metatube作为元数据下载器,一定要选择电影类型。
  • 网络不好,我自己正常使用是可以正常刮削的,有时候会慢一点,不需要操作网络。
  • 影片/演员太新了

    总结

经过安装插件、后端服务、配置插件。相信你已经搞定了小姐姐的刮削,包括图片、影片信息、演员信息等,这里就不做展示了,太爆了。

如果你还是安装/刮削失败,可以认真查看文档,也可以在评论区留言。

如果你需要更多的metatube后端部署的帮助,可以查看原作者的另一篇文章:Metatube免费后端

最后,此教程参考链接

Cane
Onii
Liu Houliang的博客