群晖NAS搭建Jellyfin影音库:基于tinyMediaManager的本地NFO元数据自动化管理

📅 2026/8/16 3:25:20
群晖NAS搭建Jellyfin影音库:基于tinyMediaManager的本地NFO元数据自动化管理
1. 项目概述从零到一构建你的私人影院海报墙折腾过家庭影音库的朋友十有八九都经历过“海报墙”的执念。看着网上别人家那琳琅满目、信息完整的影视海报墙再瞅瞅自己NAS里那一堆以“S01E01.mkv”命名的文件那种感觉就像住毛坯房和精装房的区别。今天要聊的就是如何利用你手头的群晖NAS结合Jellyfin这个强大的媒体服务器再通过刮削工具比如我们重点会用的tinyMediaManager的精细打磨把那一堆冰冷的视频文件变成一个有温度、有颜值的私人数字影院。简单来说这个项目的核心目标就一个自动化、精准化地为你NAS里的每一部电影、每一集剧集匹配上正确的海报、背景图、剧情简介、演员表、评分等元数据并在Jellyfin中完美呈现。这不仅仅是“好看”更是为了“好用”。想象一下你想找一部十年前看过的科幻片不用再回忆那拗口的文件名只需在海报墙上扫一眼封面或者直接搜索主演的名字影片瞬间就被定位出来。这背后是一套从文件命名规范、刮削器配置到媒体库管理的完整工作流。为什么是群晖JellyfintinyMediaManager这个组合群晖提供了稳定、低功耗的硬件基础和便捷的Docker环境Jellyfin作为开源媒体服务器的后起之秀完全免费、无任何功能限制且对海报墙的展示效果和客户端支持都非常出色而tinyMediaManagertMM则是一个功能强大到有些“极客”的本地刮削与管理工具它能提供远超Jellyfin内置刮削器的精准度和控制力尤其是在处理非标准命名、冷门影片或需要批量修改时优势巨大。这个组合兼顾了自动化与手动精修适合那些既想“一劳永逸”又对细节有要求的影音爱好者。2. 核心思路与工具选型解析2.1 为什么需要独立的刮削工具很多新手会问Jellyfin不是自带刮削器吗为什么还要额外用tinyMediaManager这是一个非常好的问题也直接关系到整个项目的设计思路。Jellyfin内置的刮削器如TheMovieDB TheTVDB是“在线实时刮削”。它的工作模式是当你扫描媒体库时Jellyfin会读取文件名然后实时向这些在线数据库发起查询请求匹配成功后将元数据和图片下载到它自己的缓存目录中。这种方式优点是全自动集成度高。但缺点也很明显依赖网络与API稳定性刮削速度和质量受制于你的网络环境和对端API的响应。有时会因网络波动或API限制导致刮削失败或缓慢。灵活性不足对于匹配错误的影片你只能在Jellyfin的Web界面里进行有限的重新匹配或手动修改批量操作不便。元数据本地化程度低虽然可以切换语言但一旦在线源没有对应的中文信息海报墙就可能出现英文简介体验不统一。无法处理复杂情况对于文件名不规范、系列剧集特殊命名、或非常冷门的资源内置刮削器常常“束手无策”。而tinyMediaManager这类本地刮削工具采用的是“先刮削后使用”的离线模式。它的核心思想是在视频文件所在的同一目录下生成一套标准化的元数据文件如NFO文件和图片文件poster.jpg, fanart.jpg等。Jellyfin在扫描时会优先读取这些本地文件完全不再依赖在线查询。这就带来了几个决定性优势完全离线可用一次刮削终身受用。即使断网你的海报墙也完整无缺。精准控制你可以在tMM的图形界面里手动搜索、确认、甚至编辑每一条元数据确保100%准确。批量操作可以一次性对成百上千部影片进行重命名、刮削、清理等操作效率极高。格式统一可以强制所有元数据为中文并统一海报、背景图的风格和分辨率。所以我们的核心思路就明确了使用tinyMediaManager作为“元数据工匠”在本地完成所有影片信息的精细打磨和封装然后让Jellyfin扮演“展厅设计师”直接读取这些打磨好的本地元数据构建出美观且准确的海报墙。两者分工协作扬长避短。2.2 工具链详解群晖、Docker、tMM与Jellyfin在这个工作流中每个工具扮演着不同的角色群晖NAS是整个系统的基石。它提供7x24小时运行的硬件、存储空间你的影片仓库、以及通过Docker运行服务的能力。建议DSM7.0及以上系统以便获得更好的Docker体验。Docker是核心的部署方式。无论是Jellyfin还是我们将要使用的tinyMediaManager都强烈建议通过Docker部署。Docker提供了隔离、便携且易于管理的环境避免了直接在群晖系统上安装Java等依赖的繁琐和潜在冲突。tinyMediaManager (tMM)我们的“刮削主力”。我们将通过Docker运行其无头headless版本或桌面版本。对于自动化需求高的用户无头版本可以通过命令行脚本调用对于追求精细操作的用户可以通过VNC远程连接桌面版进行操作。它需要配置访问你的影片目录和刮削数据输出目录。Jellyfin最终的“展示终端”。同样通过Docker部署配置时最关键的一步就是将其媒体库的“元数据下载器”顺序设置为优先读取本地NFO文件从而屏蔽在线刮削。这个工具链的协同关系是影片文件存储在群晖的某个共享文件夹如/volume1/video/Movies。tMM的Docker容器被授权访问这个文件夹并对其进行扫描、重命名、刮削生成NFO和图片文件。Jellyfin的Docker容器也被授权访问同一文件夹在添加媒体库时它会发现这些本地元数据并用以构建界面。3. 前期准备文件命名规范与目录结构在动刀刮削之前整理好你的“原材料”——视频文件是成功的一半。混乱的命名会让再强大的刮削器也无从下手。3.1 电影与剧集的命名公约刮削器无论是tMM还是在线数据库都是通过文件名来识别内容的。遵循一个广泛认可的命名规则至关重要。电影命名规范推荐格式电影名 (发行年份).扩展名示例阿甘正传 (1994).mkvInception (2010).mp4为什么这么写括号内的年份是关键的识别符能有效区分同名电影或系列电影的不同版本。复杂情况处理多版本电影电影名 (年份) - 版本.扩展名 如蝙蝠侠黑暗骑士 (2008) - IMAX版.mkv合集电影建议每个电影单独文件放在以合集命名的文件夹下。或者使用电影名 (年份) - CD1.mkv的格式但后者识别成功率可能降低。剧集命名规范推荐格式剧集名 - SxxExx - 集标题.扩展名示例Breaking Bad - S01E01 - Pilot.mkv权力的游戏 - S08E06 - 铁王座.mkv解释S01表示第一季E01表示第一集。这是TheTVDB等数据库的标准季集标识识别率最高。季与集的规范特殊剧集如特别篇可以使用S00E01第0季来表示。多集在一个文件S01E01-E02.mkv或S01E01E02.mkv但部分刮削器可能不支持最稳妥的方式是分开。目录结构/TV Shows/ ├── Breaking Bad/ │ ├── Season 01/ │ │ ├── Breaking Bad - S01E01 - Pilot.mkv │ │ └── ... │ └── Season 02/ │ └── ... └── Game of Thrones/ └── ...即剧集根目录 - 剧名文件夹 - 季文件夹 - 剧集文件。这是Jellyfin、Plex等所有媒体服务器最推荐的结构。3.2 使用工具进行批量重命名手动给成百上千个文件改名是噩梦。我们需要借助工具。群晖自带工具对于简单的添加前缀、后缀或替换可以使用File Station的重命名功能但功能较弱。专业重命名软件在PC上操作如Advanced Renamer、Bulk Rename Utility。你可以将NAS的共享文件夹映射为网络驱动器如Z盘然后在PC上通过这些软件直接对网络驱动器中的文件进行重命名。它们支持强大的正则表达式可以轻松实现从[电影名].mkv到电影名 (年份).mkv的转换。tinyMediaManager自带的重命名功能tMM在刮削后可以根据元数据自动重命名文件并移动到指定目录结构这是最“一站式”的解决方案。但前提是tMM能正确识别出你的文件。对于完全无法识别的文件可能需要先用方法2进行初步整理。实操心得在开始刮削前我强烈建议先用Advanced Renamer这类工具结合豆瓣或TMDB的片单花一两个小时把主要影片的命名规范化。尤其是年份信息务必加上。这步基础工作做好后续刮削成功率能从50%提升到95%以上事半功倍。4. 部署与配置核心工具4.1 在群晖Docker中部署Jellyfin我们首先部署最终展示端以便在刮削过程中可以实时检查效果。打开群晖套件中心安装Docker。如果已安装请确保更新到最新版本。在File Station中创建相关目录。我通常的规划如下/volume1/docker/ ├── jellyfin/ │ ├── config/ # 用于存放Jellyfin的配置、缓存、元数据数据库 │ └── data/ # 可选如果你不想用符号链接可以单独挂载媒体目录 └── tmm/ # 留给tinyMediaManager用实际上/volume1/docker/jellyfin/data我们不一定需要因为媒体文件通常在其他共享文件夹如/volume1/video。我们通过Docker的“绑定挂载”功能将宿主机的真实目录映射到容器内。在Docker注册表中搜索jellyfin/jellyfin 选择最新版本通常是latest标签下载。映像下载完成后启动容器。点击“高级设置”进行关键配置卷存储空间这是核心设置。添加文件夹/volume1/docker/jellyfin/config- 容器路径/config添加文件夹你的电影目录如/volume1/video/Movies- 容器路径/data/movies添加文件夹你的剧集目录如/volume1/video/TV Shows- 容器路径/data/tvshows可选如果需要硬件转码需要添加设备/dev/dri仅适用于Intel核显的群晖并需开启SSH修改权限此部分略复杂本文不展开。端口本地端口可以自定义如8096容器端口保持8096不变。环境变量可以添加PUID1026PGID100这里的UID/GID需要替换为你群晖上管理员的ID可通过SSH输入id 用户名查看。这能保证容器内生成的文件拥有正确的权限。完成创建并启动容器。在浏览器中访问http://你的群晖IP:8096即可进入Jellyfin初始化向导。注意事项首次进入Jellyfin语言选择中文后在设置媒体库的步骤可以先跳过。因为我们后续要优先配置本地NFO如果此时让它扫描它会开始在线刮削造成干扰。最好等tMM刮削完成后再来添加媒体库。4.2 在群晖Docker中部署tinyMediaManagertMM的Docker部署稍显特殊因为它是一个桌面应用。我们这里采用一种兼顾易用性和功能性的方法部署带有VNC的桌面版这样我们可以通过浏览器远程操作其图形界面。在Docker注册表中搜索romancin/tinymediamanager。这个镜像集成了tMM和VNC服务比较方便。下载并启动容器进行高级设置卷存储空间/volume1/docker/tmm/config-/config存放tMM程序配置/volume1/video-/media将你的整个媒体根目录映射进去tMM可以访问所有子目录可选/volume1/docker/tmm/data-/data可用于存放备份等端口需要映射两个端口。5800用于Web界面的VNC客户端访问。5900标准的VNC端口可用VNC Viewer等客户端连接响应更快。环境变量非常重要VNC_PASSWORD设置一个VNC连接密码。DISPLAY_WIDTH和DISPLAY_HEIGHT设置远程桌面的分辨率如1920和1080。PUID和PGID同上设置为你的群晖用户ID和组ID确保文件权限正确。启动容器。访问http://你的群晖IP:5800输入密码即可进入tMM的桌面环境。首次运行tMM会有一个设置向导。关键步骤是选择语言界面和刮削语言都选择中文。设置电影和剧集目录点击“添加电影源”路径选择/media/Movies即我们映射的/volume1/video/Movies。剧集同理。配置刮削器在“设置”-“通用”中确保“电影”和“剧集”的刮削器都包含了“TheMovieDB”和“TheTVDB”并将中文源优先级调高。配置重命名和文件处理在“设置”-“电影”/“剧集”的“数据源”选项卡中勾选“将电影存储在每个电影单独的文件夹中”和“将剧集存储在以季命名的文件夹中”这会让tMM自动帮你整理出标准的目录结构。在“重命名”选项卡中设置你喜欢的命名格式例如${movieName} (${year})。5. 核心刮削流程与精细化管理5.1 电影刮削全流程实操假设你的电影文件已经按照电影名 (年份).mkv的格式散落在/media/Movies目录下。扫描新电影在tMM主界面进入“电影”模块点击顶部工具栏的“更新数据源”。tMM会扫描/media/Movies目录将所有视频文件列出。自动识别批量选中所有未识别的电影状态为“”右键选择“搜索并刮削所选电影”。tMM会基于文件名向TMDB等网站发起搜索。匹配结果对于大部分标准命名的电影会自动匹配成功并显示匹配度。通常高于90%的匹配都是正确的可以直接点击“接受”。多重选择如果一部电影有多个搜索结果如不同年份的版本会弹出列表让你手动选择正确的那个。这里务必仔细核对年份、海报和简介。手动搜索纠错对于自动识别失败或识别错误的电影右键选择“搜索并刮削”会弹出搜索框。你可以输入更准确的中文名、英文名甚至IMDb编号如tt1375666进行精确搜索。刮削内容配置在刮削设置中你可以勾选需要下载的内容标题、原标题、剧情简介、评分、演职员表、海报、背景图、横幅、Logo等。对于海报和背景图建议选择“原始”质量以获取最高分辨率。重命名与整理刮削完成后先不要着急点“重命名与清理”。我建议先进行下一步。元数据与图片预览双击任意一部已刮削的电影进入详情页。在这里你可以检查所有信息确认简介、演员、评分是否正确特别是中文信息是否齐全。替换图片如果对自动下载的海报不满意可以点击海报区域从TMDB提供的多张备选图中选择甚至从本地上传自定义图片。手动编辑任何文本信息都可以直接双击修改这对于修正错误的翻译或补充本地化信息非常有用。执行重命名与清理确认所有电影信息无误后回到电影列表选中所有电影右键执行“重命名与清理”。这是最关键的一步tMM会根据你的设置将电影文件移动到以“电影名 (年份)”命名的单独文件夹中。将电影文件重命名为你设定的格式如电影名 (年份).mkv。在文件夹内生成movie.nfo元数据文件以及poster.jpg海报、fanart.jpg背景图等。可选清理掉不需要的无关文件如样本文件、txt文档。至此你的电影库已经完成了本地元数据封装。目录结构会变得非常整洁/Movies/ ├── 阿甘正传 (1994)/ │ ├── 阿甘正传 (1994).mkv │ ├── movie.nfo │ ├── poster.jpg │ └── fanart.jpg └── 盗梦空间 (2010)/ └── ...5.2 剧集刮削的特殊处理剧集刮削逻辑与电影类似但更复杂因为涉及季和集的多层关系。源目录结构确保你的剧集文件已经放在类似/media/TV Shows/剧集名/Season XX/的结构下即使文件命名不规范也没关系。扫描与识别在tMM的“剧集”模块更新数据源。tMM会尝试根据文件夹名剧集名和文件名SxxExx进行匹配。季的识别有时tMM可能无法自动识别某季。此时需要右键该季文件夹手动“搜索并刮削该季”输入剧集名进行搜索匹配。集的识别与锁定这是剧集刮削最容易出错的地方。对于文件名不规范的剧集如EP01.mp4tMM可能无法识别。你需要进入该季的详情页在“剧集”列表里手动将右侧的文件拖拽到左侧对应的剧集条目上进行“锁定”。这告诉tMM“这个文件就是这一集”。锁定后再对该季执行刮削操作tMM就会为锁定的文件生成正确的元数据。批量操作对于标准命名的剧集可以像电影一样批量刮削和重命名。tMM会生成tvshow.nfo在剧集根目录和每集对应的S01E01.nfo等文件。实操心得剧集刮削最考验耐心。对于老剧、文件名混乱的剧集手动“锁定”是唯一可靠的方法。建议一次处理一个剧集确认一季无误后再进行下一季。刮削完成后务必去文件系统里检查一下生成的NFO和图片文件是否齐全特别是tvshow.nfo和poster.jpg是否在剧集根目录下这是Jellyfin识别整个剧集的关键。6. 配置Jellyfin使用本地NFO元数据当tMM的工作完成后你的媒体文件夹里已经充满了.nfo,.jpg,.png等文件。现在需要让Jellyfin“看见”并优先使用它们。登录Jellyfin后台进入“控制台”。添加媒体库内容类型选择“电影”。显示名称自定义如“我的电影”。文件夹点击“”号添加我们映射给Jellyfin的电影目录路径例如/data/movies 对应宿主机的/volume1/video/Movies。最关键的一步配置元数据下载器。在添加媒体库的页面找到“元数据下载器”区域。取消勾选所有在线的刮削器如TheMovieDb, The Open Movie Database等。只保留一个“NFO”。在“元数据保存器”中确保“将元数据保存到媒体文件中”是启用的但因为我们已有NFO这个主要是为了兼容。图片获取器同样只保留“NFO”和“本地图片文件”如“Primary image from local files”。这样Jellyfin就会从poster.jpg等本地文件读取图片而不是去网上下载。保存并扫描。添加剧集库的流程完全一致内容类型选“剧集”文件夹指向剧集目录同样在元数据下载器中只保留“NFO”和“本地图片文件”。完成这些设置后Jellyfin会开始扫描媒体库。由于禁用了在线刮削器它的扫描速度会非常快因为它只是在读取本地现成的NFO文件。扫描完成后一个信息完整、图片精美的海报墙就立刻呈现在你面前了。7. 高级技巧与疑难问题排查7.1 使用tMM命令行实现自动化刮削对于已经整理好命名规范的新增影片我们可以通过tMM的命令行模式实现自动化无需打开图形界面。这需要用到tMM的“无头模式”Docker镜像如romancin/tinymediamanager:latest-v4。核心思路是编写一个Shell脚本通过群晖的计划任务定期执行。脚本内容大致如下#!/bin/bash # 进入tMM容器执行刮削命令 docker exec your_tmm_container_name /bin/bash -c # 更新电影数据源并刮削新电影 /app/tinyMediaManager movie updateNew /app/tinyMediaManager movie scrape /app/tinyMediaManager movie rename # 更新剧集数据源并刮削新剧集 /app/tinyMediaManager tvshow updateNew /app/tinyMediaManager tvshow scrape /app/tinyMediaManager tvshow rename 你需要将your_tmm_container_name替换为你的tMM容器实际名称。然后在群晖控制面板的“计划任务”中新增一个“用户定义的脚本”任务将上述脚本内容粘贴进去并设置每天凌晨执行。这样每天新增到指定目录的影片就会被自动刮削并整理好。7.2 常见问题与解决方案速查表问题现象可能原因解决方案Jellyfin中影片信息为英文Jellyfin优先使用了在线刮削器或者本地NFO里就是英文信息。1. 检查媒体库设置确保元数据下载器只勾选了NFO。2. 在tMM中刮削时确认已设置首选语言为中文并重新刮削生成NFO。剧集海报墙显示为单集海报没有季海报和剧集总海报缺少tvshow.nfo文件或剧集根目录下的poster.jpg。1. 在tMM中确保对剧集而不仅仅是某一季执行了刮削操作。2. 检查剧集根目录下是否有tvshow.nfo和poster.jpg文件。部分影片在tMM中无法识别文件名不规范或影片太冷门。1. 使用PC端重命名工具先规范化文件名务必包含年份。2. 在tMM中手动搜索尝试使用影片的原始外文名或IMDb编号tt开头。刮削后Jellyfin扫描不到新内容Jellyfin媒体库扫描未触发或NFO文件格式有误。1. 在Jellyfin该媒体库的“管理媒体库”中点击“扫描媒体库文件”。2. 检查NFO文件是否为空或格式错误可用文本编辑器打开查看。tMM刮削速度非常慢网络连接TMDB等网站不畅或同时刮削的任务太多。1. 在tMM设置中尝试更换刮削源如从TMDB换到OMDb。2. 分批刮削不要一次性选中上千部影片。通过Docker部署的tMM无法写入文件Docker容器内用户PUID/PGID权限不足无法向映射的宿主机文件夹写文件。1. 通过SSH登录群晖使用id 你的用户名命令查看正确的UID和GID。2. 在创建tMM Docker容器时环境变量PUID和PGID设置为上述值。3. 检查宿主机文件夹如/volume1/video是否对该用户有读写权限。Jellyfin海报墙图片模糊tMM下载的图片分辨率不够高或者Jellyfin客户端进行了缩放。1. 在tMM刮削设置中将图片质量设置为“原始”或“高”。2. 在Jellyfin的Web客户端设置中检查“显示”选项确保未开启“节省带宽”等降低画质的选项。7.3 元数据备份与迁移你的所有心血精心调整的海报、编辑的简介都保存在那些NFO和图片文件里。因此这些文件本身就是最好的备份。只需定期备份你的媒体文件夹如/volume1/video元数据就得到了保全。当你需要迁移或重装系统时确保新的媒体服务器无论是Jellyfin还是Plex、Emby支持NFO标准。将整个媒体文件夹包含视频文件和旁边的NFO、图片拷贝到新位置。在新的媒体服务器中添加媒体库并同样设置为优先读取NFO元数据。执行扫描你的完整海报墙就会原封不动地重现无需重新刮削。这个过程让我深刻体会到本地NFO方案的巨大优势数据主权完全掌握在自己手中不依赖于任何在线服务的持续可用性。无论平台如何变迁只要文件在你的影音库的“灵魂”——那些精心整理的元数据就永远在。