技术贴,tMM自动刮削电影,打造NAS完美电影墙

超高校级的囧小平 . 2020-03-20 15:41 .

前言

很多NAS用户都喜欢在硬盘上存储许多电影,然后使用Jellyfin、PLEX、Emby、Kodi等进行播放。为了让这些电影呈现完美的展示形态,刮削电影信息、下载海报图片就很关键了。为了完成这个目的,对墙内用户来说,tinyMediaManager绝对是一款电影信息刮削神器。通常的做法是,在电脑上安装tinyMediaManager并运行,然后手动刮削NAS上存储的电影资源。对于完美党来说,这样做虽然可以基本实现好看的电影墙,但是软件是装在PC端总觉得不舒服,每次下载了新的电影还要主动去手动刮削。那么,有没有一种方法可以把tinyMediaManager直接运行在群晖或者QNAP系统上,并实现电影信息自动刮削呢?我研究了一个晚上,发现实现这个目标并没有想象中那么困难。下面,我就来详细描述一下我的解决思路。另外需要提前说明的是,我的设备是QNAP TS-453B mini,其他X86平台NAS理论上也适用。

劝退警告!!!我担心大家看不懂或者懒得看,可以直接看后面的小白教程。

劝退警告!!!本文核心步骤不涉及代码修改,全是简单的命令。

但是还是再发一次:劝退警告!!!

直接安装

tinyMediaManager作为一款电影信息刮削神器,目前支持Linux、Windows、Mac三个平台。而tinyMediaManager是基于Java开发的,需要Java 1.8以上版本的运行时环境支持。我们常见的家用NAS几乎都是基于Linux的,在上面安装Java运行时也不是什么难事,在QNAP和群晖系统的应用商店里面,都是直接可以安装Java 8的。所以,我们所要做的第一步,就是去NAS系统的应用商店里面安装Java 8。对于QNAP系统,在应用商店的开发者工具里面找到JRE并安装。

对于群晖DSM系统,在套件中心搜索Java,找到Java 8安装。

安装了Java 8的NAS系统,就具备了运行tinyMediaManager的最基本条件。但是,平时我们使用tinyMediaManager时,是通过GUI界面进行操作的,而QNAP或者群晖等NAS系统,都是通过web方式进行操作,并不能提供桌面运行环境。

其实,和大多数开源软件一样,tinyMediaManager除了GUI界面操作,也可以支持Command Line,也就是命令行操作。这样,就可以通过在命令行中输入命令加上合适的参数,实现电影信息的刮削。

理论上是可行的,Java 8的环境也具备,所以去tinyMediaManager的官网中http://release.tinymediamanager.org/,下载最新的Linux版本tinyMediaManager试试吧。当前最新的是Linux平台tinyMediaManager是这个文件:tmm_3.1.3_linux.tar.gz。下面的操作默认X86平台的都是64位系统。

下载完成后,把软件解压到NAS的共享目录中去。这样,tinyMediaManager的安装工作就完成了一大半了。

现在还有最后一个问题需要解决。通过阅读tinyMediaManager的官方文档可以知道,在Linux上运行tinyMediaManager除了Java运行环境,还需要libmediainfo这个第三方native库。但是NAS系统一般没有像是apt这样的软件包管理软件,如何下载这个libmediainfo呢。我去谷歌上搜索了一下,很偶然的机会,我发现了qnapclub里面有一个名为Media Info CLI (Shared)的软件包。地址在这里:https://qnapclub.eu/en/qpkg/712。qnapclub是QNAP的第三方软件源,上面下载的qpkg包可以直接安装在QNAP系统上。主流X86平台对应的就是TS-NASX86_64这个版本。

在QNAP里面离线安装这个qpkg包,然后通过ssh连接到NAS终端,把我需要的so找到。

QNAP系统中,软件包的安装位置在硬盘的.qpkg隐藏目录中。比如我把Media Info CLI 安装到了第一个硬盘,其安装位置就是/share/CACHEDEV1_DATA/.qpkg。继续寻找,在/share/CACHEDEV1_DATA/.qpkg/MediaInfoShared/lib中可以找到许多so文件,我们需要的是以下两个:libmediainfo.so.0.0.0*、libzen.so.0.0.0*。

命令行中把他们拷贝出来,修改名字为libmediainfo.so和libzen.so,然后放到tinyMediaManager安装目录的native/linux-x64文件夹下面。为了方便大家使用我将这两个so放到了百度盘上,大家直接下载并放到指定位置就行了。链接: https://pan.baidu.com/s/1Sf3pK58IhZo5kkpbtYrmsA 提取码: 228u。

命令行回到tinyMediaManager安装目录,我发现我拷贝到NAS共享目录里面的可执行文件没有执行权限,所以还要运行下面的命令修复一下权限。

chmod +x tinyMediaManagerCMD.sh

现在,所有安装工作就算完成了。

Docker安装

上面的安装方式实现了tinyMediaManager在NAS系统上本地运行,但其实还可以通过docker的方式运行tinyMediaManager。群晖和QNAP都提供了在界面上运行docker的方法,但是习惯了命令行感觉不是很方便。即使在命令行下运行docker,NAS系统的Dcoker套件上还是可以看到运行状态的。

具体Docker的使用方法可以参考下面的链接:https://github.com/romancin/tinymediamanager-docker

或者

https://github.com/dzhuang/tinymediamanager-docker (加了中文字体,解决GUI上中文字符显示问题)

基本的使用方法如下,部分路径需要根据自己的实际情况修改:

docker run -d --name=tinymediamanager \

-v /share/Container/tinymediamanager/config:/config \

-v /share/Container/tinymediamanager/media:/media \

-e GROUP_ID=0 -e USER_ID=0 -e TZ=Europe/Madrid \

-p 5800:5800 \

-p 5900:5900 \

romancin/tinymediamanager:latest

docker起来后,可以通过web页面进行GUI操作。

当然命令行操作也是可以实现的:

docker run --rm --name=tinymediamanagerscript \

-v /share/Container/tinymediamanager/config:/config \

-v /share/media:/media \

-e GROUP_ID=0 -e USER_ID=0 -e TZ=Europe/Madrid \

romancin/tinymediamanager:develop /config/tinyMediaManagerCMD.sh -updateMovies -scrapeNew

这条命令会启动一个容器,以命令行的方式进行电影信息刮削,完成后再把容器删除。自动化电影信息刮削也可以利用docker实现,不过我更喜欢原生的。

配置

我们在PC端通过GUI方式运行tinyMediaManager的时候,启动阶段会有向导,帮助我们进行一些基本配置。但是命令行下可没有向导,配置文件如何生成呢。我的办法很简单,先在Windows上装好tinyMediaManager,运行向导,生成配置文件,然后直接拷贝过来用。

tinyMediaManager配置向导运行的时候,主要是为电影和电视剧选择正确的刮削器。媒体库那边不用配置。语言就使用默认的英文,不要用中文,很多电影会刮削不到。下面的图是错的。

生成的配置文件在tinyMediaManager安装目录的data文件夹下,我们只需要拷贝movies.json、tmm.json、tvShows.json这三个文件即可。NAS上的tinyMediaManager安装目录没有data文件夹,需要自己创建一个。

当然,这样拷贝过来的文件是不能直接使用的,还需要打开文本编辑器,手动再加入几个配置。首先是打开movies.json,找到movieDataSource,添加NAS电影路径。

这个路径不是你从PC上看到的NAS电影目录的路径,是NAS系统自身的绝对路径,在NAS终端上可查。比如QNAP的路径如下图所示。

然后还有一个重要的配置,movies.json中找到artworkScrapers,设置为tmdb。我最开始的时候漏掉了这个设置,导致刮削出来只有movie.info,没有海报图片,最后看了一个多小时tinyMediaManager的源代码才发现是这个问题。本质上也说明我对tinyMediaManager的用法不够精通。

movies.json配置好后,tvShows.json同理,不再赘述。如果你是使用tinyMediaManager的老手,还可以进行更多配置。目前按照我的做法配置后,可以生成movie.info,可以生成电影海报。

另外,众所周知,最近大家使用tinyMediaManager经常遇到刮削不出信息来的情况,主要是相关网站受到DNS污染,需要手动设置hosts。在QNAP中或者说任意Linux系统中,需要修改/etc/hosts文件,添加13.224.161.90 api.themoviedb.org即可。

运行

好了,折腾了半天,终于可以正常在命令行下运行tinyMediaManager。先看下官方文档,里面有命令行下运行tinyMediaManager参数的详细说明。或者直接在命令行下输入./tinyMediaManagerCMD.sh不加参数,也能显示help文档。

官方文档链接在此:https://www.tinymediamanager.org/docs/commandline,参数说明如下:

这点英文说明没什么难的。updateXXX命令是用来将电影资源加入tinyMediaManager的数据库,scrapeXXX命令是用来进行电影信息刮削的。具体含义自己理解吧,可以根据自己的需求组合。比如:./tinyMediaManagerCMD.exe -updateMovies -scrapeNew,就是添加新电影,并刮削电影信息。

定时任务

那么,tinyMediaManager的运行环境已经搭建好了,相关配置也完成了,下面就是如何实现自动运行了。理想的自动运行应该是每当媒体库里添加了新的文件,就开启命令行tinyMediaManager进行刮削。这个并不是不能实现,但是有点麻烦,我暂时懒得弄。所以,先介绍一种相对简单粗暴的自动刮削方法。那就是借助于Linux的crontab工具开启周期性定时任务。举例来说,就是我可以利用crontab,定时在每天凌晨1点的时候开启tinyMediaManager的刮削任务。一旦设定好定时任务,全程不需要人工操作,这样就算我们每天下载新的电影资源,第二天醒来后,信息刮削就已经完成了。QNAP和群晖都是Linux系统,也都支持crontab。我这里以QNAP为例,相关操作可以参考https://wiki.qnap.com/wiki/Add_items_to_crontab 。群晖的话要在root下进行。

在tinyMediaManager的安装目录下创建一个shell脚本文件,用于封装命令和参数,命名为tinyMediaManager_daily.sh。脚本的内容为:

#!/usr/bin/env bash

/share/CACHEDEV1_DATA/Multimedia/tmm_3.1.3_linux/tinyMediaManagerCMD.sh -update -scrapeAll

脚本路径最好写绝对路径,后面的参数根据自己的情况调整,上面的参数为全扫描、全刮削。

保存好脚本之后,用下面的命令加上可执行权限:

chmod +x tinyMediaManager_daily.sh

为了将上面的脚本定时周期启动,需要在下面的文件中写入相关内容

/etc/config/crontab

写入内容的格式为:

minute hour day month week command

具体如何写大家自行百度吧。每天凌晨1点启动任务的写法为:

0 1 * * * /share/CACHEDEV1_DATA/Multimedia/tmm_3.1.3_linux/tinyMediaManager_daily.sh

将上面的内容写入/etc/config/crontab,注意/etc/config/crontab中本来就有QNAP系统自己设定的计划任务,千万不要弄乱了,不放心就备份一个。

echo "0 1 * * * /share/CACHEDEV1_DATA/Multimedia/tmm_3.1.3_linux/tinyMediaManager_daily.sh" >> /etc/config/crontab

执行下面命令让计划任务生效。

crontab /etc/config/crontab && /etc/init.d/crond.sh restart

以上,就可以完成tinyMediaManager定时自动刮削电影信息了。鉴于墙内网络问题,刮削任务可能会因为网络超时而意外终止。为了保证刮削的完整性,可以在计划任务中设置利用凌晨的时间段多次进行刮削。

小白教程

上面的内容除了包含实现自动刮削的具体步骤,还包含我解决问题的思路,混在一起对于很多人来说可能不太容易搞明白。为此,我将核心步骤抽离出来,重新复述一下。但是我仍然觉得对于没有任何Linux使用经验的人来说,实际操作起来还是会有很多问题。但是,我只能做到这些了。核心步骤如下:

1.NAS系统中安装Java 8运行环境

2.tinyMediaManager官网下载Linux安装包,并解压到NAS共享目录。修复tinyMediaManagerCMD.sh的可执行权限

3.下载我上传到百度盘的libmediainfo.so和libzen.so文件,并放到tinyMediaManager安装目录的native/linux-x64文件夹下面。

4.在Windows上安装tinyMediaManager文件,并运行向导,生成必要的配置文件movies.json、tmm.json、tvShows.json,拷贝到NAS的antinyMediaManager安装目录的data文件夹下。

5.修改movies.json和tvShows.json,添加媒体库路径,设置artworkScrapers为tmdb。

6.新建shell脚本,内容为你要定时执行的tinyMediaManager命令和参数。赋予脚本可执行权限。

7.将定时任务写入/etc/config/crontab,并重启crond让定时任务生效。建议每天设置多次刮削。

上面是核心步骤,理解好了之后,具体内容都可以到相应章节里面寻找。如果有问题,就请教搜索引擎吧。

总结

对于执着于追求完美电影墙的NAS用户来说,自动刮削应该是比较迫切的需求吧。本文所述的实现方式其实并没有太多难点,我也只是主要解决了tinyMediaManager在QNAP或者群晖上运行的问题。在解决问题的过程中,我也阅读了tinyMediaManager的源代码,代码风格不错,流程也很清晰,算是比较优秀的值得学习的Java开源项目。但是,在我实际使用中,遇到的最大的问题就是网络超时。这回让每次刮削任务都不能完整地完成,我也只能多次开启任务尝试。若不是网络问题,这个方案将会很完美。祝大家玩的愉快。 (声明: 本文著作权归作者本人和新浪众测共同所有,未经许可不得转载。本文仅代表作者观点,不代表新浪众测立场。)

一直申请不到试用资格?

投稿优质的原创内容会增加试用机会哦~去投稿0条评论|0人参与我有话说.

枭乙29921退出表情发布.

发表评论

邮箱地址不会被公开。 必填项已用*标注