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 2
和 2010
,这已经足够了。
未完待续
元数据获取
元数据获取其实没什么好讲的,以本项目使用的 TMDB(themoviedb) 来讲,官方直接提供了Api,提供title和year(可惜)就可以进行模糊搜索,只不过部分影片可能有多个结果,获取名字歧义大导致搜索不准确。
不直接提供接口的,可以模拟浏览器搜索,然后使用爬虫,比如豆瓣。