Jellyfin + tMM 自建家庭媒体库

一直想要构建一个自己的媒体库,现在终于有机会了。开始的时候总是会很麻烦,但是弄起来之后确实很好用。

前言

原来一直有各种原因,各种理由不想弄,也有过直接在 macOS 上连接到移动硬盘安装 Jellyfin 的初次尝试。那次尝试可以说是非常失败,因为那块移动硬盘的硬件问题、笔记本解码时风扇狂转、元数据被 Jellyfin 的默认策略整的乱七八糟,一直搁置到今年 11 月。这里要感谢一下我的好兄弟,把他自己攒的一台 D1581 自助给我,这个计划才能如愿以偿,首先要感谢他!这台机器的详细介绍和玩法,之后再来写(咕咕咕)。

当然,真正促使我去整这么一套平台的主要原因,还是得感谢我支持了多年的 B 站,看到追番追剧列表渐少、关注的电视剧滚动直播 up 被封号,再看看自己 2025 年到期的带会员,我现在简直就是一个🤡。

顺带一提,那块倒霉催的移动硬盘在我把数据全部搬出来之后才发现 S.M.A.R.T. 自检已经是黄牌警告了,得亏发现及时,数据没有损失。

先展示一下网页端上的效果吧。

媒体库 web 预览

软件

在媒体平台上,我依然是选择了 Jellyfin 作为服务器,主要还是因为免费开源,而且界面我还算比较中意吧。当然更重要的是,这个是跨平台的工具,我可以把已经构建出来的数据带到另外一台机器上,非常惬意。

在这次构建之前,其实我是从来没听说过 tinyMediaManager(tMM,下同) 的,因为 Jellyfin 其实是自带元数据刮削的,你也可以通过安装插件来增加其他数据源,我以前也参与过豆瓣刮削插件的开发。但是,即便是有插件的借助,整个元数据的质量都是让我非常苦恼的,这也是我最早为什么在尝试后选择放弃的主要原因之一。作为半个强迫症,我无法忍受一部作品有着中文标题、英文封面、中文描述、日文集标题、中文演员名(当然演员名这个问题现在还有,不过我现在已经放弃了)。所以当我第一次接触到 tMM 的时候,就发现这个真的比自带的要好很多了。

整理的过程

我手头的所有资源,可以大致分为几种类别:

  • 电影
    • BDMV
    • BDRip
    • WEB-DL
  • 电视剧
    • BDRip
    • WEB-DL
    • TVRip
  • 动漫
    • BDMV
    • BDRip
    • WEB-DL(只存正在连载的新番,BDRip 发布后会进行换源)
  • 纪录片
    • BDRip
    • WEB-DL
  • 综艺
    • WEB-DL
    • TVRip

所有这些资源来自 PT 站、BT 站、网盘等方式,来源复杂,命名质量良莠不齐,所以使用 tMM 之前,最好是自己先粗略分类一下,放到各自的文件夹中。

特别的,对于电影而言,即便是只有单文件,依然建立一个独立的文件夹,用于承载所有的元数据归类存储,不然会比较杂乱。

目录结构

一般情况下,经过 tMM 完整整理过的一部作品,其目录结构如下:

  • 电影

(Movie 为电影文件名,下同)

 1┌ Movie
 2├──── Movie.mkv
 3├──── Movie.ass
 4├──── Movie.nfo
 5├──── Movie-banner.jpg
 6├──── Movie-clearart.jpg
 7├──── Movie-clearlogo.jpg
 8├──── Movie-fanart.jpg
 9├──── Movie-keyart.jpg
10├──── Movie-logo.jpg
11├──── Movie-poster.jpg
12├──── Movie-thumb.jpg
13├──── theme.mp3
14├───┬ trailers
15│   └──── Movie-trailer.mp4
  • 剧集(含上述其他种类)
 1┌ tvshow
 2├───┬ .actors
 3│   ├──── actor_a.jpg
 4│   ├──── actor_b.jpg
 5│   ├──── ......
 6│   └──── actor_z.jpg
 7├───┬ Season 1
 8│   ├──── season01.jpg
 9│   ├──── tvshow.S01E01.mkv
10│   ├──── tvshow.S01E01.ass
11│   ├──── tvshow.S01E01.nfo
12│   ├──── ......
13│   ├──── tvshow.S01E114.mkv
14│   ├──── tvshow.S01E114.ass
15│   └──── tvshow.S01E114.nfo
16├───┬ Season 2
17│   ├──── season02.jpg
18│   ├──── tvshow.S02E01.mkv
19│   ├──── tvshow.S02E01.ass
20│   ├──── tvshow.S02E01.nfo
21│   ├──── ......
22│   ├──── tvshow.S02E514.mkv
23│   ├──── tvshow.S02E514.ass
24│   └──── tvshow.S02E514.nfo
25├──── season03-poster.jpg
26├──── tvshow.nfo
27├──── banner.jpg
28├──── clearart.jpg
29├──── clearlogo.jpg
30├──── fanart.jpg
31├──── keyart.jpg
32├──── logo.jpg
33├──── poster.jpg
34├──── thumb.jpg
35├──── theme.mp3
36├───┬ trailers
37│   └──── tvshow-trailer.mp4

想要达到最好的效果,这些文件和文件结构都(可能)会出现在你整理好的资料库中。如果你选择使用 tMM 的整理功能,会将你现在的目录,整理为上面的样子。

警告

如果你仍需要继续进行 BT 做种/辅种,请在操作之前,确认文件夹中是否存在现有的同名文件,且不要使用文件夹整理功能,或者将文件夹复制一个副本,专用于媒体库的整理播放工作。

下载元数据后,现有文件被改写;文件夹整理后,原始的目录结构将会被破坏。该操作不可逆,且将影响正常的做种/辅种工作,造成不必要的麻烦。

你可以不提前对文件夹进行整理,但是对于有多个季度的剧集,建议还是分个文件夹,这样整理的时候会省事一点。

如何处理 BDRip 中其他文件

此问题尤其以番剧及其剧场版的 BDRip 居多,优秀的压制组会将盘中的 NCOP、NCED、PV、BD Menu 等文件压制后放入 SPs 目录中。作为一部作品完整的部分,必然不会直接删掉。但是这些视频可能是没有对应的元数据的,无法被 tMM 抓取对应的信息,不进行处理会让 Jellyfin 中该作品展示混乱。

我以 TMDB( https://themoviedb.org ) 作为核心的元数据刮削源,在操作之前,可以先去查一下对应的作品,在季度列表中,是否存在“特别篇”。(以《一周的朋友/一週間フレンズ。》为例, https://www.themoviedb.org/tv/60827-isshuukan-friends

存在特别篇的作品

对于此类有“特别篇”的作品,需要在目录中挑选出来,放到独立的 Specials 文件夹,并在 tMM 中标记为第 0 季(在 tMM 中,第 0 季会直接被认为是特别篇)。特别篇中同样需要遵循元数据中的顺序,进行集的编号。

特别篇在 tMM 中的元数据配置

对于没有元数据的文件,可以直接在该文件所在文件夹的根目录中放一个 .ignore,该文件的作用域是该文件夹及其子文件夹。Jellyfin 会在扫描媒体库时,自动忽略带该文件的文件夹。

设置忽略的文件夹

但是很遗憾,tMM 并不会根据这个规则,跳过扫描这些文件夹,所以每次重新扫描媒体库的时候,这些文件都会出现在“未分类”中。除了有碍观瞻之外,没有什么影响,所以直接忽略就好。即便是你有精力,每次扫描媒体库就要从头到尾删一次,下一次扫描,它们还会卷土重来的。(对我就是懒得改 tMM 的配置了)

除非你有强迫症,否则忘了它吧

tMM 的使用

对于影视作品,tMM 只认两类:电影和电视剧(也就是广义的剧集),至于电影集,你不需要自己过多注意,元数据完成配置后,会自动给你整理出电影集的。

你需要为每种影视类型,增加一个对应的媒体来源。

tMM 主界面

具体的操作因为有不少文章都介绍过,我这里就只简单介绍一下我的处理流程,和一些经验之谈吧。

我的处理流程如下:

  1. 点击“更新源”
  2. 对增加的影片,如为剧集,整理剧集的季信息、集信息
  3. 右击,选择“搜索并抓取电影“
  4. 对抓取到的图片进行重选(一般是因为语言问题)

特别的,对于批量从“未分类”设置季度信息,请选择需要修改的单集,右击,选择“高级编辑模式”-“批量编辑”,点选“集”选项卡,可以看到有一个“季”的信息,调整后点击右边的✅后再点击关闭,调整后的信息即可生效。

批量调整季信息

如无需要,无需解锁 Pro 版本。基础的版本只能从 tmdb 中抓取数据,一些数据(包括预告片、字幕等)无法抓取。Pro 版本为订阅制,一年 10EUR,Pro 版本支持下载预告片、字幕、更多的图片、增加多个刮削源等功能,对于进一步完善、丰富你的媒体库有一定的帮助。是否购买,取决于你自己的需求。我是在整个媒体库基本上定型后,选择去购买了一年 Pro 订阅,进一步丰富了媒体库元数据。

但是这个工具也存在不少问题,需要在使用中特别注意:

  1. tMM 中,很多操作的保存和关闭是分离的,所以请务必先保存再关闭,否则你的很多工作都会前功尽弃;
  2. 这个基于 Java 设计的程序,因为 UI 的不规范,并不能完全使用键盘操作,仍然需要鼠标辅助点击(比如直接按 Enter 很多时候并没有什么效果);
  3. 如果你的网络环境需要通过代理连接到互联网,请在“设置-系统”中,增加代理设置;
  4. 根据你的数据库大小,请务必调整 tMM 可用的内存大小,默认的 512MB 较为吃力。以我当前媒体库的体量,启动后即占用 300MB;启动扫描、抓取过程后,内存占用可能会超过 700MB。该项调整同样也是在“设置-系统”中,调整“内存设置”即可,最大可达 8GB。

Jellyfin 中的设置

在你完成上述的操作后,你已经拥有了一个几乎完美的媒体库。此时,Jellyfin 所需要做的,其实只是一个“前端”,直接读取现有元数据,不需要 Jellyfin 去“画蛇添足”,在互联网上继续抓取信息。

在 Jellyfin 中,我们需要对媒体库进行设置:

  • 勾选“优先使用内置的标题而不是文件名”
  • 勾选“启用实时监控”
  • 取消勾选所有的“元数据下载器”
  • 将“自动从互联网获取元数据并刷新”更改为“从不”
  • 在“媒体资料存储方式”中,勾选“NFO”
  • 取消勾选所有的“图片获取程序”

操作后,扫描媒体库,即可展示出你已经修改后的效果。

剧集效果

怎么看

众所周知,整理了就是看过了,再也不会翻出来了。

在正确设置过 Jellyfin 的解码方式之后,通过 Web 方式当然可以直接开始播放了。但是总归还是有不少限制,用起来不过舒服。至于 Jellyfin 官方的 app 呢,高情商说法是多端统一,低情商说法就是网页套皮,所以还是需要找一个好用的第三方应用的。

对于 iOS/iPadOS/macOS/tvOS 用户,我优先推荐的是 Infuse。其可以直接关联到 Jellyfin 服务器上,初次连接会在 Jellyfin 里面安装一个插件。Infuse 可以直接从 Jellyfin 中,获取对应的元数据,不需要过多的配置,所以我也愿意为 Infuse Pro 掏钱,毕竟确实好用!

Infuse for macOS 的效果

对于 Android 用户,本着不想引入更多平台的方法,我这里不会推荐将 Jellyfin 和 Kodi 等其他媒体服务器连接并使用对应服务的方法。你依然可以使用 Jellyfin 的官方应用,前提是你本地安装了其他播放器,如 MX Player、VLC 等,这里以 MX Player 为例。

打开 Jellyfin 的设置,点击“客户端设置”,调整“Video player type”为“External player”,选择对应的应用即可。

Android 上的设置

总结

在熟悉流程之后,之后继续增加影视作品的时候,就很容易了。万事开头难,第一次处理会浪费很多时间,之后简单的增补就不会浪费很多时间。自有媒体库最大的意义在于,不受平台下架的限制,在合适的网络环境下,我可以随时想看就看,且无需担心下架的风险。当然,自己维护一个媒体库也需要随时注意存储的健康,那就是另一回事了。