tinyMediaManager‐刮削视频文件识别逻辑解析 - nichuanfang/kodi-metadata-tmdb-cli GitHub Wiki

本文背景

影视、音乐刮削的核心是文件名识别,其次是元数据,常见的数据源有:豆瓣、themoviedb、imdb、tmdb。

tinyMediaManager经常被大家简称TMM,是使用的比较广泛的手动刮削工具。我在实现本项目之前尝试过,受限于只能手动,所以还是自己实现了。

目前这个项目已经接近全功能正常使用,但是在文件识别这块感觉还不是很满意,所以很好奇业界一般都是怎么识别的,最感兴趣的有:Kodi(我在索尼电视上使用)、infuse(iOS生态下的统治者)、Plex|Jellyfin|Emby(CS架构下最流行的3个服务器,其中Jellyfin免费)、tinyMediaManager。

个人简单估算了下,应该只有tinyMediaManager的代码量是最小的,其次是Java实现的,我也比较熟悉,所以先从tinyMediaManager入手。

tinyMediaManager 以下简称TMM,主要功能有:电影、电视剧刮削、字幕下载、Kodi远程控制,其中Kodi和字幕部分国内用户用的较少,后文直说电影、电视剧刮削功能。

文件扫描

文件扫描部分电影和电视剧很类似,但是多少还是有些差异,所以分开两个部分讲,先说电影的,再在电视剧部分补充下不同点。

电影

推荐的目录格式:

  • 电影名称 (年份)
  • 电影名称.年份

电视剧

单剧集推荐的目录格式:

  • 剧集名称.S[XX].年份
  • 剧集名称.第[X]季.年份

剧集合集推荐的目录格式:

  • 剧集名称.S[XX]-S[YY].年份
  • 剧集名称.第[X]季-第[Y]季.年份

集推荐的格式:

  • S[XX]E[YY]

文件识别

影视剧在计算机上存在的文件名有一套约定成俗的命名规范,说规范前先提醒常见的影片载体:

  • 蓝光,及其衍生的比如重编码、Diy,MiniBD等文件名或目录带BluRay字样,如果是目录,通常会包含BDMV、CERTIFICATE等子目录
  • DVD目录,通常包含VIDEO_TS和AUDIO_TS两种子目录
  • 单个或者多个文件封装的MKV、MPV、TS等

然后是文件或目录的命名规范,通常会使用影片的英文名、年份、载体、格式、视频编码、音频编码来组合命名,常见的组合方式有空格 、点号.、下划线_,横线-、成对的中括号[],偶尔也会有些不常见的比如反人类的逗号,,参考TMM的源码:[[](){} _,.-],看的出来视频的情形还是挺多的。

影片的刮削就基于这些常见的命名方式,如果你的影片不在这些规则的范围内就会导致识别错误,如果是TMM就需要手动介入,如果是使用的本项目,你可以发issue告诉我。

下面说TMM的名称识别提取逻辑,首先TMM只提取目录或文件的名称和年份两部分,以 Iron.Man.2.2010.Blu-ray.x264.DTS-HD.MA5.1.2Audios.MiniBD1080P 为例,只会提取 Iron Man 22010,这已经足够了。

未完待续

元数据获取

元数据获取其实没什么好讲的,以本项目使用的 TMDB(themoviedb) 来讲,官方直接提供了Api,提供title和year(可惜)就可以进行模糊搜索,只不过部分影片可能有多个结果,获取名字歧义大导致搜索不准确。

不直接提供接口的,可以模拟浏览器搜索,然后使用爬虫,比如豆瓣。