媒体库与扫描 - MiCat-S/Mi302 GitHub Wiki

繁體中文 | 简体中文 | English

这一页说明媒体库的文件夹怎么放、Mi302 怎么扫描,以及中文片名的排序搜索、演职人员中文名、类型中文化和媒体库封面。

媒体库和文件夹

媒体库在管理页面的“媒体库”标签页创建。标签页上每个媒体库一格,显示封面、名称、类型、项目数和文件夹。点最后一格的“新增媒体库”,在对话框里起个名字,类型选“电影”或“剧集”,点“加入资料夹”选服务器上的文件夹,最后点“储存并扫描”。一个媒体库可以有多个文件夹。

要改名称、类型、文件夹或封面,点那一格的封面、名称或“编辑”,打开同一个对话框。对话框左下角的“删除媒体库”删掉整个媒体库,文件夹里的文件不会被删;但这个媒体库的观看记录(看过、续播点、收藏)会一起删除,之后再加回同一个文件夹也找不回来,确认框会写出有几条。一次建好几个媒体库见批量新增媒体库。

Mi302 不自己刮削,只读取文件夹里已有的文件:

  • 视频:.strm 和普通视频文件(.mkv .mp4 .m4v .avi .ts .m2ts .mov .wmv .flv .webm .rmvb .mpg .mpeg .iso .3gp)。
  • 元数据:nfo 和图片(.jpg .jpeg .png .webp)。这些可以在 115 同步时一起下载,或交给 MoviePilot 刮削,见 MoviePilot 集成。

典型的结构:

movies/
  Inception (2010)/
    Inception (2010).strm
    Inception (2010).nfo        # 或 movie.nfo
    poster.jpg  fanart.jpg
tv/
  Dark (2017)/
    tvshow.nfo  poster.jpg  fanart.jpg
    Season 1/
      Dark.S01E01.strm
      Dark.S01E01.nfo
      Dark.S01E01-thumb.jpg

查找电影和剧集文件夹时,名称以 .、@、# 开头的文件夹会被跳过(例如 NAS 的 @eaDir、#recycle)。

电影

  • 每个视频文件是一部电影。
  • 文件夹里只有这一部视频(而且不是直接放在媒体库文件夹下)时,如果文件夹名称带年份、或文件名没有年份,就用文件夹名称作为片名,例如 Inception (2010)。这种文件夹也会读取 movie.nfo。
  • 其他情况用文件名:识别 片名 (年份),或去掉 1080p、BluRay、x265 这类字样后取片名和年份。
  • nfo 里有 <title> 时以 nfo 为准。

剧集

每个剧集文件夹是一部剧。剧集文件夹里任何一层的视频都算这部剧的集,可以放在季文件夹里,也可以直接放在剧集文件夹里。

季和集的命名

季文件夹的名称:

写法 例子 季
Season N、Series N(中间可以有空格、点、下划线、减号) Season 1、Season.02、Series 3 N
SN S01、s2 N
第N季、第N部(阿拉伯数字或中文数字) 第1季、第一季、第十二季 N
Specials、Special、SP、特別篇、特别篇 0(特别篇)

集号从文件名里找,按下面的顺序,第一个匹配上的为准:

写法 例子
SxxEyy(也识别 SxxEPyy,中间可以有空格、点、下划线、减号) Dark.S01E02.mkv、S01 EP02
NxNN 1x02
第N集、第N话、第N話(阿拉伯数字或中文数字) 第2集、第十二集
Eyy、EPyy(前面是开头、空格、点、下划线、减号或 [) EP02、[E05]
文件名开头就是集号,后面接点、减号、下划线或 、;只用空格隔开时要补零 10.潘玮柏战队…、03-比赛…、01 嘻哈首战、07

最后一种只在没有其他写法时才用。只用空格隔开又没补零的(21 Jump Street)不算集号。

有多个来源时的优先顺序:

  • 季:集的 nfo 里的 <season> → 所在的季文件夹 → 文件名里的 SxxEyy → 都没有就算第 1 季。
  • 集号:集的 nfo 里的 <episode> → 文件名。

nfo 里的 <season>、<episode> 是负数(例如刮削时没认出集号写的 -1)时当成没写,改用后面的来源。

  • 集名:集的 nfo 里的 <title> → “第 N 集”→ 文件名。

季的名称是“第 N 季”,第 0 季是“特別篇”。季文件夹里的 season.nfo 可以修改季的名称和简介。

分类文件夹

剧集媒体库里可以有分类文件夹,例如 MoviePilot 二级分类的 电视剧/国产剧/庆余年 (2019)/。媒体库路径直接选 电视剧 就行,不用每个分类各加一次。

满足下面任意一项的文件夹是一部剧:

  • 里面有 tvshow.nfo。
  • 名称是 剧名 (年份),括号也可以是全角 () 或 []。
  • 里面有季文件夹。
  • 里面直接放着视频或 strm。

其他文件夹当作分类,再往下一层找。媒体库文件夹下最多找三层分类文件夹。

注意两种会认错的情况:

  • 分类文件夹里直接放了视频,这个分类会被当成一部剧。
  • 剧集文件夹没有年份、没有 tvshow.nfo,视频又都放在不是季文件夹的子文件夹里(例如 Disc1),这部剧会被当成分类。给剧集文件夹加上年份最稳妥。

想让每个分类在播放器首页各占一行,就每个分类各建一个媒体库,用下一节的“从资料夹批量新增”可以一次建好。

批量新增媒体库

一个文件夹下面已经分好“电影”“国产剧”“日番”这类子文件夹,想让每个子文件夹各自成为一个媒体库时,点“媒体库”标签页最后一格的“从资料夹批量新增”:

  1. 选上层文件夹。对话框会先读第一个媒体库第一个文件夹的上一层,还没有媒体库时直接打开选文件夹的窗口。要换文件夹就点“选择…”,或输入路径后点“读取”。
  2. 每个子文件夹一行,附上视频数和建议的类型。
  3. 勾选要新增的,名称和类型都可以改。空文件夹和已经在某个媒体库里的文件夹默认不勾,后者会写出在哪个媒体库。
  4. 点“新增并扫描”。

建议的类型是看文件夹里的文件猜的:

  • 抽样的视频里有三成以上文件名带集数(S01E01、1x01、第1集、EP01 这类)、放在季文件夹里,或在有 tvshow.nfo 的文件夹里,就建议“剧集”,否则建议“电影”。
  • 视频少于 3 个时改看文件夹名称:带“电影”“剧场版”“movie”“film”的是电影,带“剧”“番”“动漫”“动画”“综艺”“电视”“tv”“series”“show”“anime”“drama”的是剧集,繁体字也认得。都看不出来就先当电影。

名称改成一样的几行会合成一个媒体库,类型要相同。名称和现有的媒体库相同,这个文件夹就加进那个媒体库,类型跟着那个媒体库。每一行下面会写出它会怎么处理,有问题的行(名称空白、同名但类型不同)要先改好才能提交。

文件夹可能在网络磁盘上,所以每个子文件夹最多往下看 5 层、1.5 秒,整次最多 12 秒。没看完的视频数显示“至少 N 部”,来不及看的显示“影片数不明”、类型改看名称,也不会默认勾选,对话框上方会提醒检查。

图片和 nfo 的文件名

表格里的 X 是视频文件名去掉扩展名。图片可以是 .jpg、.jpeg、.png、.webp。

项目 nfo 海报 背景图 横幅 Logo
电影 X.nfo X-poster、X X-fanart、X-backdrop X-thumb、X-landscape X-logo、X-clearlogo
电影(文件夹里只有这一部时另外识别) movie.nfo poster、folder、cover fanart、backdrop、background thumb、landscape logo、clearlogo
剧集(放在剧集文件夹) tvshow.nfo poster、folder、cover fanart、backdrop、background thumb、landscape logo、clearlogo
季 季文件夹里的 season.nfo 剧集文件夹里的 season01-poster、season01(特别篇是 seasonspecials-poster、seasonspecials);没有就用季文件夹里的 poster、folder、cover
集 X.nfo X-thumb、X
  • 集没有自己的图时,用剧的横幅(thumb/landscape),没有横幅就用剧的背景图。
  • 季和集没有自己的背景图、横幅、Logo 时用剧的。
  • nfo 读取的字段:title、originaltitle、sorttitle、plot(或 outline)、year、premiered(或 aired、releasedate)、rating、mpaa、genre、runtime(分钟)、uniqueid 和 tmdbid/imdbid/tvdbid、season、episode,以及演职人员(见下文)。

扫描

扫描就是把文件夹里的视频、nfo 和图片读进数据库,播放器看到的就是数据库里的内容。不一定要整个重新扫描。

在网页上扫描

“媒体库”标签页可以:

  • 点某个媒体库那一格的“扫描”,只扫这个媒体库。
  • 打开媒体库的“编辑”对话框,点某个文件夹那一行的“扫描”,只扫这个文件夹。文件夹不存在时会标出“资料夹不存在”,这一行没有“扫描”按钮,媒体库那一格也会写出几个文件夹不存在。刚加进去、还没保存的文件夹也没有“扫描”按钮。
  • 点上方的“扫描资料夹…”,选任意一个媒体库里的文件夹,例如一个分类 电视剧/国产剧 或一部剧 电视剧/国产剧/庆余年 (2019)。选到媒体库以外的位置会提示“这个位置不在任何媒体库的资料夹里”。
  • 点“全部重新扫描”,扫描全部媒体库。

扫描时页面上方会显示“扫描中”、百分比和正在处理的片名。第一次扫描还不知道总数,显示来回滑动的忙碌条。同一时间只运行一个扫描,其他的排队。

扫描中可以点“停止”:在两个项目之间停下,没扫到的不会从媒体库删除,下次扫描再补。排在后面等着的整库扫描(例如开机、改了设置之后的)也一起取消,停止之后再点的照常扫描;同步后、删除后只扫描变动地方的照常做(那些地方之后不会再有人扫描)。没在扫描时,进度条的位置显示上次扫了什么、处理了几个项目、是不是点了停止。

自动扫描

自动扫描也只扫有变动的地方:

时机 扫描范围
每次启动 Mi302 全部媒体库
115 同步完成(“同步完自动重新扫描媒体库”开着时,默认开) 新增、改名、移动或删除的文件所在的剧或电影
MoviePilot 刮削完成 刮削过的那些
MoviePilot 或其他工具调用 POST /Library/Media/Updated 通知里的路径(先按 MoviePilot 的路径映射换回 Mi302 的路径);通知里没有路径时扫描全部
播放器对单个项目“刷新”(POST /Items/{id}/Refresh,需要管理员账号) 那部电影或那部剧;对媒体库操作就是整个媒体库
POST /Library/Refresh 全部媒体库
在“媒体库”标签页保存(“储存并扫描”“新增并扫描”“删除媒体库”) 新增或改过的媒体库;删掉的媒体库连同里面的项目一起移除

扫描单位

部分扫描以一部剧或一部电影为单位:

  • 剧集媒体库:给一集或一季的路径,会重扫整部剧;给分类文件夹,会扫描里面所有剧;不在任何剧集文件夹里的文件跳过。
  • 电影媒体库:重扫变动所在的整个文件夹,因为同一个文件夹里有几部视频会影响片名怎么取;直接放在媒体库文件夹下的视频只处理那一部。
  • 已经删掉的路径:把数据库里那下面的项目移除。
  • 重复或互相包含的路径只扫一次。
  • 一次超过 300 个单位时(例如第一次全量同步),改为把这些单位所在的媒体库整个扫一次。

观看记录

项目按文件路径对应。重新扫描(不论部分还是全部)不会改变项目的 id,观看记录、收藏、片头片尾记录都会保留。文件改名或移动后是新的项目,旧项目和它的观看记录在下次扫描时移除。

网络磁盘还没挂载

NAS 的 NFS/SMB、Parallels 的 /media/psf/... 这类文件夹,开机时可能比 Mi302 晚挂载。媒体库文件夹不存在、读不到或完全是空的,Mi302 会当作还没挂载:

  • 整个媒体库的扫描(包括启动时那一次)保留这个文件夹原有的项目和观看记录,不会当成视频全被删了,日志记一条警告“媒体库路径不存在或是空的”。
  • 部分扫描跳过这个文件夹。

挂载好之后在“媒体库”标签页点“全部重新扫描”即可。

反过来说,真的把一个文件夹清空时,旧项目会一直留着。这时在媒体库的“编辑”对话框把这个文件夹移除,再点“储存并扫描”;或点“删除媒体库”删掉整个媒体库。

中文片名的排序和搜索

排序:

  • 电影和剧集的排序名用 nfo 的 <sorttitle>,没有就用片名。
  • 中文先转成简体再转拼音,一个字一个音节、用空格隔开:流浪地球2 → liu lang di qiu 2。其他文字转小写。所以播放器按字母跳转也有效。
  • 集的顺序按季、集号,不受影响。

搜索:

  • 片名、原名(nfo 的 <originaltitle>)都能搜到。
  • 中文片名还可以用全拼(qingyunian)、首字母(qyn)、简体、繁体(慶餘年)找到“庆余年”。拼音只从片名生成,不从原名生成。
  • 繁体转简体有时用字不同(慶餘年 会转成 庆馀年),所以两个字以上的中文搜索词会再用拼音比对一次。

排序名和搜索用的字段在扫描时生成。每次启动都会整个扫描一次,所以从旧版更新后,旧数据会自动补齐。

演职人员

Mi302 从 nfo 读取演职人员,给播放器显示:

  • <director>:导演。
  • <credits>、<writer>:编剧。
  • <actor>:演员,读取 name、role、thumb、tmdbid;type 是 GuestStar 时算客串。

显示顺序是导演、编剧、演员。点人物可以看他在 Mi302 里参与的作品,搜索也能找到人。集和季没有自己的演职人员时用剧的。

人物照片是 nfo 里 <thumb> 的地址(通常在 TMDB)。播放器请求照片时,Mi302 用 302 把它重定向到那个地址,所以播放器要能连上那台图片服务器。

中文名

TMDB 的人名常是拼音或英文(Chen He)。“设定”标签页的“中文化”卡片里,“演职人员显示中文名”(server.chinese_people,默认开)开着时,Mi302 在后台查询中文名:

  • 只查 nfo 里带数字 TMDB 人物 id 的人:每部作品的导演、编剧、客串,以及排在前面的演员(程序设定是前 20 位演员,另外留 10 个位置给排在前面的导演和编剧)。
  • 先问 MoviePilot 的人物接口(/api/v1/tmdb/person/{id}),从 TMDB 的别名里挑中文的(陈赫):去掉带日文假名的,优先本来就是简体的,都没有就把繁体转成简体。每秒最多问 2 次。
  • MoviePilot 没有的、或还没设置 MoviePilot、或连不上时,改问 Wikidata(按 TMDB 人物 id,每批 100 位),中文标签一律转成简体。
  • 查过没有的,30 天后再查。设置了 MoviePilot 但这次连不上时,只问了 Wikidata 的人不算查过,下次再问。
  • 每 30 分钟检查一次有没有新的人要查(启动 1 分钟后第一次),每次最多 500 位。也可以点“现在查中文名”立即查询。

查到之后播放器显示中文名,人物数据另外带上原名(OriginalTitle)。用原名、中文名都能搜到人。

“中文化”卡片显示演职人员、有中文名、还没查、查过没有的人数,两个来源各查到几位、上次查询时间和错误信息。还没设置 MoviePilot 时会提示只能问 Wikidata。

关掉“演职人员显示中文名”并点“储存设定”后,播放器马上改回显示原名,后台也不再查询;已经查到的中文名保留在数据库里。

类型中文化

“中文化”卡片里的“类型显示中文”(server.chinese_genres,默认开)开着时,扫描时会替换 nfo 的类型:

  • 英文的 TMDB、IMDb 类型按下表换成中文(不区分大小写),用的是 TMDB 简体中文的叫法。
  • 中文类型的繁体换成简体,所以类型一律显示简体。
  • 表里没有的英文类型保持原样。替换后重复的只留一个。

这是扫描时做的,改了开关要重新扫描才生效。关掉后重新扫描,就还原成 nfo 里原本的类型。

英文 中文 英文 中文 英文 中文
Action 动作 Adventure 冒险 Animation 动画
Comedy 喜剧 Crime 犯罪 Documentary 纪录
Drama 剧情 Family 家庭 Fantasy 奇幻
History 历史 Horror 恐怖 Music 音乐
Mystery 悬疑 Romance 爱情 Science Fiction 科幻
Sci-Fi 科幻 TV Movie 电视电影 Thriller 惊悚
War 战争 Western 西部 Action & Adventure 动作冒险
Kids 儿童 News 新闻 Reality 真人秀
Sci-Fi & Fantasy 科幻奇幻 Soap 肥皂剧 Talk 脱口秀
War & Politics 战争政治 Biography 传记 Sport 运动
Sports 运动 Musical 歌舞 Film-Noir 黑色电影
Short 短片 Game-Show 游戏节目 Reality-TV 真人秀
Talk-Show 脱口秀 Anime 动画

媒体库封面

播放器首页每个媒体库的封面,依次使用:

  1. 上传的封面。
  2. 媒体库文件夹里的 poster、folder 或 cover 图(媒体库有多个文件夹时,用第一个找得到的)。

“媒体库”标签页每一格都显示封面。打开那一格的“编辑”对话框,能看到封面的来源:

  • 点“上传封面”选一张图,可以是 jpg、png、gif 或 webp,最大 30 MB。
  • 有上传的封面时多一个“改回预设”,点了会删掉上传的封面,改回文件夹里的图。

MoviePilot 的媒体库封面插件用 Emby 的 POST /Items/{id}/Images/Primary 上传,效果和在网页上上传一样,设置方法见 MoviePilot 集成。

上传的图片:

  • 保存在数据文件夹的 images/(默认 data/images/,一键安装的在 config/data/images/)。封面的文件名是 {项目 id}-primary_image.{扩展名}。
  • 重新扫描不会被覆盖,也比文件夹里的图优先。
  • 同一个接口也能给电影、剧集等其他项目上传海报、背景图、横幅、Logo,规则相同。项目从媒体库移除时,它上传的图片也跟着删除。
⚠️ **GitHub.com Fallback** ⚠️