最近在人人影视下载了一些美剧,手动下载字幕太麻烦,突然想到射手播放器可以在播放视频的时候自动匹配字幕,后来在射手网找到了匹配字幕的 API 地址, https://www.shooter.cn/api/subapi.php 。
该 API 可以根据给定的视频信息返回匹配的字幕信息,包括下载地址。
API 使用说明: https://docs.google.com/document/d/1ufdzy6jbornkXxsD-OGl3kgWa4P9WO5NZb6_QYZiGI0/preview 。
github 地址: https://github.com/L-xm/python-shooter.org
1
faketemp 2015-12-17 22:14:35 +08:00
NAS 中 BT 下载高清电影多无字幕,每次都得去搜索下载然后改名视频一多就烦, LZ 这个很方便!
提两个小建议: 1.能否修改一下 py 文件编码?使用 UTF-8 应该更利于 Linux 或 MAC 用户使用 2.考虑添加选项支持递归查询子目录文件( BT 下载视频大多都是独立目录,无法递归实在不便) |
2
lxy42 OP @faketemp 好的,编码的问题到不大,自己改改也行。关于第二点,你指的是一个目录包含若干子目录,每个子目录只包含一个视频吗?
|
3
GPU 2015-12-18 08:23:08 +08:00
@lxy42
1 楼的意思是 , PT 、 BT 下载回来的电影都是哪些标准的目录的, 类似于 `The.Walk.2015.1080p.BluRay.x264-SPARKS` 这样子 , 而且都是以文件夹形式,一个电影或电视剧下载下来的。 如果楼主的脚本只能去匹配影视文件本身 哪么就不能识别文件夹里面的影视文件了,然而在国外 BT 站与国内 PT 站都是以这种文件夹的形式 BT 下载的 , 如果是单独一个影视文件的 一般是国内的会这样子。 |
4
xiaket 2015-12-18 09:32:47 +08:00
|
5
lxy42 OP @xiaket 看了一下,他的脚本是匹配单个视频并下载字幕的。我写的因为要匹配整个目录下的所有视频然后下载中英文字幕,所以用了多线程,有几个全局变量用来记录发现的字幕数量,成功下载的数量,失败的数量,没有找到字幕的视频文件名,所以用到锁来保证数据一致性。
|
6
faketemp 2015-12-18 10:03:57 +08:00
@lxy42 BT 下载大概目录结构如下:
./西游记之大圣归来.mp4 ./Hotel.Transylvania.2.2015.720p.WEBRip.x264.AAC2.0-FGT/English.srt ./Hotel.Transylvania.2.2015.720p.WEBRip.x264.AAC2.0-FGT/Hotel.Transylvania.2.2015.720p.WEBRip.x264.AAC2.0-FGT.mp4 ./Shaun.the.Sheep.Movie.2015.1080p.BluRay.H264.AAC-RARBG/Shaun.the.Sheep.Movie.2015.1080p.BluRay.H264.AAC-RARBG.mp4 ./The.Little.Prince.2015.BluRay.720p.DTS.x264-MTeam/The.Little.Prince.2015.BluRay.720p.DTS.x264-MTeam.mkv ./玩具总动员:迷失时空.原盘中英字幕.Toy.Story.That.Time.Forgot.2014.BD1080P.X264.AAC.English&Mandarin&Cantonese.CHS-ENG.Mp4Ba/玩具总动员:迷失时空.原盘中英字幕.Toy.Story.That.Time.Forgot.2014.BD1080P.X264.AAC.English&Mandarin&Cantonese.CHS-ENG.Mp4Ba.mp4 ...... @GPU 解释的对 |
7
ketle 2015-12-18 10:07:32 +08:00
@lxy42 电脑上使用场景不多 ,有射手播放器就够了;
多的是各种安卓手机 /平板 /安卓盒子+移动硬盘 /nas 等; 然而 安卓手机 /平板上的各种播放器有几个虽然有在线匹配功能,但弱的要死,所以建议楼主修改下适合手机的版本,手机上的 python 环境 有 http://www.qpython.com/ 类似这个; 然后手机 /平板看本地 /局域网片子就爽了 |
8
faketemp 2015-12-18 10:09:27 +08:00
@lxy42 可以考虑用 os.walk 递归查找所有层级目录中视频文件,并用列表或字典来保存所有视频文件对应的完整路径,然后逐个算出 hash 等查找并下载字幕,如果成功下载则对应重命名字幕文件即可
|
10
faketemp 2015-12-18 10:21:50 +08:00
@lxy42
In [1]: filepath = '/Users/test/test.mp4' In [2]: import os In [3]: os.path.split(filepath) Out[3]: ('/Users/test', 'test.mp4') In [4]: os.path.split(filepath)[0] Out[4]: '/Users/test' 比如某视频路径 filepath = '/Users/test/test.mp4',则算出 hash 下载对应字幕并改名为“ test.srt ”保存到 os.path.split(filepath)[0]即可 这样就保证了每个字幕都恰好与对应视频文件存放在同一目录 |
14
yoa1q7y 2015-12-18 12:39:53 +08:00
|
15
lxy42 OP @yoa1q7y 没有吧, seek_positions 的意思是将文件指针移动到文件中相对于文件开头的位置,, FileObj.seek(offset, 0)。
|
16
lxy42 OP 修改了一下脚本,现在可以递归匹配视频并下载字幕了,还可以打包字幕(保持目录结构不变)。
|
18
yoa1q7y 2015-12-18 18:29:41 +08:00
额。。我原来指的是 `getVedioFileFromDir `这个名字的拼写
|
20
kknd22 2015-12-19 12:43:34 +08:00
能否搞一个自动匹配番号下载字幕的脚本?比如 ABP-356 、 SDDE-412 、 IBW-518Z 这样子的?
|
22
cruisehu 2015-12-19 23:43:34 +08:00
L219 Video 拼错了
|
23
atnoot 2015-12-20 04:03:53 +08:00
学以致用 才是我们学习的目标, mark 一下 买了网件的路由器 配上 1t 的 nas 加楼主的脚本 以后看片爽歪歪
|
25
cutoutsy 2015-12-20 23:49:56 +08:00
最新的视频都找不到字幕,,😂😂
|
27
evilic 2015-12-21 08:58:52 +08:00
射手网不是关闭了么?为什么会有最新的字幕?
|
28
lxy42 OP @evilic 只是把前台网站关了而已,又没有把整个服务器都查封, API 还可以用,[API 使用说明]( https://docs.google.com/document/d/1ufdzy6jbornkXxsD-OGl3kgWa4P9WO5NZb6_QYZiGI0/preview)
|