有一块硬盘专门存放电影,每次下载了新的电影都要手动进行整理归档很不方便,遂考虑写一个脚本进行自动归档。

GitHub 项目地址:Movie_Arch_Tool

该脚本希望实现以下功能:

  1. 自动识别当前目录下所有未归档的电影文件
  2. 新建以 $中文译名-$电影原名 的文件夹存放电影
  3. 将该文件夹图标替换为对应电影封面
  4. 自动下载对应字幕文件

2019-10-29 22-52-18.gif
photo_2019-08-26_22-11-59.jpg

信息匹配及封面下载

首先要解决的问题,是通过电影文件找到对应的电影信息,尝试发现直接通过豆瓣搜索文件名可以得到对应电影的搜索结果,决定写一个豆瓣的爬虫来获取需要的内容。

截屏2019-10-08下午11.51.34.png

观察豆瓣电影搜索结果的链接,在 https://movie.douban.com/subject_search?search_text= 后拼接电影文件名,使用 BeautifulSoup 解析获取到的页面,结果遇到一些问题,得到的结果中并没有我们需要的内容,分析后发现,豆瓣对搜索结果进行了加密,全部在这个 window._data_ 中。去网上搜索了一些解密方法也没有成功。

photo_2019-10-07_23-41-13.jpg

本来实在没办法了,准备用 Selenium 写,结果突然在豆瓣的搜索框中发现一些端倪。
可以看到在输入内容后,搜索框下方会给出部分搜索建议,Chrome 打开控制台切换到 Network 标签,发现其直接返回了一个 json,其中的 titlesub_title (中文译名和原名)和 id 正是我们需要的东西。

截屏2019-10-08下午11.50.48.png

得到了豆瓣的电影 id,就可以很轻松的找到该电影在豆瓣上的电影海报,使用 BeautifulSoup 配合 requests 得到海报文件,再通过上面获取到的电影名创建文件夹对文件进行归档,我们的目标便初步完成了。

图标转换

修改文件夹封面,首先要将下载的封面转换为 ico 格式的图标文件。

使用 PIllow 处理图片,不能直接将下载的 jpg 转格式压缩保存,因为 ico 为正方形,会导致图片变形。所以这里采用的方法是先将图片等比缩放,因为电影封面都为纵向,所以将高缩小至 256,宽按比例缩小。
再新建一张空白图片,内容设置为透明,将上面缩小的图片通过 paste() 方法居中粘贴至空白图片上,保存格式为 ico 即可。
还有一个问题是直接保存会发现画面压缩较严重,添加一个 ANTIALIAS 参数采用抗锯齿压缩。

图标文件制作完成,接下来的问题就是如何修改文件夹图标。

Windows 端首先想到的是自行创建一个 desktop.ini 文件,并附加系统属性,结果由于 Windows 资源管理器不能实时刷新,修改是否成功完全随缘。

后来找到了 Windows 一个 SHGetSetFolderCustomSettings 函数,具体使用方法来自 Stack Overflow - How to change folder icons with Python on windows?

macOS 端还没有找到合适的方法修改文件夹图标。

字幕下载

下载字幕因为有 射手网(伪) 现成的 API,所以相对还是比较容易的。不过在 API 的使用过程中还是遇到一些问题。

最开始采用 is_file=1 文件名搜索方法,发现搜不到任何结果,原因不明,换成搜索电影名,结果匹配的准确性又很低,比如搜索《你的名字》就会搜索到《请以你的名字呼唤我》...没有好的办法,就在搜索时加上电影的原名和中文名一起搜索,稍微提高了结果匹配的精确度。
还有想通过 subtype 字幕类型筛选掉无关结果,但是发现其 API 返回的有些结果中就没有这一项...

Last modification:May 14th, 2020 at 11:48 am
If you think my article is useful to you, please feel free to appreciate