抛弃Jellyfin羸弱的刮削系统,实现自动刮削&增量扫库

alioth 发布于 2025-08-07 92 次阅读


前言

我们知道,Jellyfin原生并不支持TMDB的剧集组刮削,遇到部分动漫或电视剧在TMDB多季度合并的情况往往会获取不到正确的数据,而 TinyMediaManager 可以解决这一痛点。本文介绍了利用 Ani-RSS + qBittorent + TinyMediaManager + Jellyfin 实现新番自动下载和重命名、定时匹配刮削和增量扫库的方案,夸克网盘利用 Openlist + Rclone 挂载。

本方案中,除Rclone外所有配置均在Docker Compose下运行,环境为AMD64的Openmediavault(基于Debian 12)。

环境部署

首先确认设备具备Docker环境,注意本节中贴出Compose文件中的/configall目录为个人自定义的所有配置文件持久化存放位置,请自行修改。

Ani-RSS以及qBittorent的Compose文件可以从这里获取,记得自行挂载持久化配置文件目录和媒体目录。

Jellyfin这里采用的是nyanmisaka大佬发布的国内优化版本,从这里获取,贴出Compose文件:

services:
  jellyfin:
    image: nyanmisaka/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    environment:
      - PUID=0
      - PGID=0
      - TZ=Asia/Shanghai
    volumes:
      - /configall/jellyfin/config:/config
      - /configall/jellyfin/cache:/cache
      - </path/to/movies>:/media/movies
    devices:
      - /dev/dri:/dev/dri
    network_mode: host

TinyMediaManager的Compose文件可以从这里获取,同样记得挂载配置目录及媒体目录,要注意的是,要想利用Crontab定时运行curl命令实现及时匹配刮削,还需要额外开放一个端口(或采用host模式),这里以7878为例,如下标红,若有文件权限问题,可以在environment中添加- PGID=0和- PUID=0。

version: "2.1"
services:
  tinymediamanager:
    image: tinymediamanager/tinymediamanager:latest
    container_name: tinymediamanager
    environment:
      - USER_ID=1000
      - GROUP_ID=100
      - ALLOW_DIRECT_VNC=true
      - LC_ALL=en_US.UTF-8 # force UTF8
      - LANG=en_US.UTF-8   # force UTF8
      - PASSWORD=<password>
    volumes:
      - /configall/tmm/data:/data
      - </path/to/movies>:/media/movies
      - </path/to/addons/>:/media/tv_shows
    ports:
      - 5900:5900 # VNC port
      - 4000:4000 # Webinterface
      - 7878:7878 # http api port
    restart: unless-stopped

Openlist的Compose文件可以从这里获取。

Rclone的安装脚本从这里获取,这里贴出:

sudo -v ; curl https://rclone.org/install.sh | sudo bash

刮削及API配置

关于Ani-RSS以及其配套qBittorent的设置和使用可以参考官方文档,或官方文档首页下方“相关文章”栏目中提供的详细教程,这里主要介绍禁用Jellyfin自带刮削器以及TMM的使用方法。

Jellyfin配置

部署完成后访问 <IP>:8096 进入Jellyfin页面,配置完成后添加媒体库,勾选启用媒体库启用实时监控,若完全依赖curl定时任务,可取消勾选启用实时监控

随后下滑,将元数据存储方式中的Nfo勾选,元数据下载器(节目、季、剧集)以及图片获取器(同上)全部取消勾选,保存。

此外,在Jellyfin控制台选择高级 - API 密钥,点击加号添加密钥,记录下Key,如图:

TinyMediaManager配置

访问 <IP>:4000 进入TMM页面,首次进入会弹出设置,按照步骤设置即可,最终配置类似如下:

电影-NFO设置:

电影-元数据刮削设置:

电视节目的设置与之类似,注意在元数据刮削艺术图刮削中均要填入TMDB Api,TMDB Api的获取方式见官方文档,即访问API 设置,选择仅个人使用并填写申请理由直接通过。设置完成后可自行测试是否能正常刮削,若有网络连接问题,可以在TMM设置中设置Http代理或修改系统host使用,这里不展开。

重点是设置TMM的Api,在下方页面(设置 - 通用选项 - 系统 - HTTP API)中勾选启用,设置端口为7878,记录下Key。

这里注意TMM Docker的VNC系统的复制粘贴需要选中,在左侧剪贴板中才能复制到VNC外部,如下图:

API调用及自动化

根据TMM的官方API指导文档,可以看到

所有配置到TMM的movie调用目录为:http://<IP>:7878/api/movie

所有配置到TMM的series调用目录为:http://<IP>:7878/api/tvshow

基于本文目的,需要利用参数 {"action":"update", "scope":{"name":"all"}} 对所有作用域进行 update,并利用参数 {"action":"scrape", "scope":{"name":"unscraped"}} 对所有未刮削的视频文件进行刮削。

另外,还需要在TMM刮削后,对Jellyfin的库进行增量扫描(即扫描新的和修改过的文件),最终产生如下命令,注意替换<tmm api key>以及<jellyfin api key>,若脚本不在localhost运行,还需将localhost修改为容器宿主机IP:

#!/bin/bash

# --- 更新所有数据源 ---
# 更新电视剧数据源
curl -d '{"action":"update", "scope":{"name":"all"}}' -H "Content-Type: application/json" -H "api-key: 35242720-8782-41a9-be45-c9cb9147abae" -X POST http://localhost:7878/api/tvshows

# 更新电影数据源
curl -d '{"action":"update", "scope":{"name":"all"}}' -H "Content-Type: application/json" -H "api-key: 35242720-8782-41a9-be45-c9cb9147abae" -X POST http://localhost:7878/api/movies

sleep 30

# --- 刮削所有未刮削项目 ---
# 刮削未刮削的电视剧
curl -d '{"action":"scrape", "scope":{"name":"unscraped"}}' -H "Content-Type: application/json" -H "api-key: <tmm api key>" -X POST http://localhost:7878/api/tvshows

# 刮削未刮削的电影
curl -d '{"action":"scrape", "scope":{"name":"unscraped"}}' -H "Content-Type: application/json" -H "api-key: <tmm api key>" -X POST http://localhost:7878/api/movies

sleep 30

# Jellyfin增量扫库
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "Authorization: MediaBrowser Token=\"<jellyfin api key>\""

可以对上述任意单条Curl在SSH客户端进行测试,TMM的运行状态将在VNC界面的右下角显示。测试通过后,在任意文件夹内新建名为tmm.sh的文件,这里举例/configall/tmm/tmm.sh,将以上内容写入并保存。

SSH控制台输入crontab -e打开定时任务配置文件,在下方添加

0 * * * * /configall/tmm/tmm.sh >/dev/null 2>&1

意为每小时的0分自动运行tmm.sh脚本,实现 TMM扫描新资源 → 等待30s → TMM刮削新资源 → 等待30s → Jellyfin入库新资源 的自动化流程。