Mac下自动获取字幕的Python脚本
这法子已经不灵了,因为射手网直接从服务器端拒绝了sscl取字幕的请求。于是我从MacAppStore买了一个射手播放器,希望它至少给我一个新版本的sscl。结果是:1,sscl从新版的射手播放器里面消失了;2,试着用射手播放器播放了一个电影结果还是没有字幕(我已经打开了取字幕的选项);3,试着用AppleScript控制射手播放器取字幕,发现射手播放器不支持AppleScript。事情到这里就没有意思了,所以希望享受射手播放器的“自动下载字幕”这条功能的人别去买了,别浪费那两刀了;另外准备跑去MacAppStore留个取不了字幕的Comment。
只剩下手动下载字幕的老办法了。如果射手网能够在MacAppStore上丢一个自动取字幕的App卖,我愿意出三刀。
看了某人写的文章《Mac字幕自动下载器》。
照着他的方法想依葫芦画瓢,奈何自己的Linux的命令实在不熟悉,而大侠贴的Shell脚本无法直接运行。
改了半天他的脚本,find命令我改好了:find -E ~/Downloads/BT/ -iregex ‘.*\.(mkv|avi)’|grep -iv sample,但是只要后面一加上 > `mktemp` 就报错,提示:-bash: `mktemp`: ambiguous redirect,上网一查,发现Linux真TMD太高深鸟,完全没能力自己搞定。
最后干脆自己写了一个Python脚本搞定,Python,每个Mac都自带的,我写的这个也不需要第三方的库,就算你是python小白,也一样用。
方法是:
- 按照大侠文中所述,下载sscl,http://hg.splayer.org/splayerx/raw/0b9e84441210/binaries/x86_64/sscl
- 移到一个空目录里面,假设移到用户目录下的/Develop/sscl/目录中
- 把下面的代码保存为sscl.py,放到和sscl同一个目录中。记得改动三个参数:
首先是你自己的用户名:USER_NAME=’yichen1976′
然后是你的SSCL的目录:SSCL=’/Users/’ + USER_NAME + ‘/Develop/sscl/sscl’
最后是你的影片目录:MOVIE_DIR=’/Volumes/Public/WWW/TR-Downloads/’ - 进入终端,输入
cd Develop/sscl
chmod +x sscl
python sscl.py
搞定(更新了一下,修复了一些bug):
import os
import shutil
import tempfile
USER_NAME='yichen1976'
SSCL='/Users/' + USER_NAME + '/Develop/sscl/sscl'
#MOVIE_DIR='/Volumes/Public/WWW/TR-Downloads/'
MOVIE_DIR='/Users/yichen1976/Downloads/BT/DayBreakers'
SVPSub='/Users/' + USER_NAME + '/Library/Application Support/SPlayerX/SVPSub/'
#os.system("rm -rf '" + SVPSub + "'*")
tmpFile = tempfile.mktemp()
print 'temp file: ' + tmpFile
os.system("find -E '" + MOVIE_DIR + "' -iregex '.*\.(mkv|avi)'|grep -iv sample>" + tmpFile)
f = open(tmpFile)
for line in f:
print 'line' + line
line = line.replace('\n', '')
filenameList = os.path.split(line)
if len(filenameList) == 2:
movieFilePath = filenameList[0]
movieFileName = filenameList[1]
print 'movieFilePath: ' + movieFilePath
print 'movieFileName : ' + movieFileName
movieName = os.path.splitext(movieFileName)[0]
print 'movieName:' + movieName
ssclCmd=SSCL + ' --video-file "' + line + '" --pull '
print 'ssclCmd=' + ssclCmd
sscl_result = os.system(ssclCmd)
print 'result of ssl get srt: ' + str(sscl_result)
if sscl_result == 0:
fileList = os.listdir(SVPSub)
for file in fileList:
try:
shutil.move(SVPSub+file, movieFilePath)
print 'move ' + file +' successful'
except:
try:
os.remove(SVPSub+file)
except:
print 'fail to delete srt'
print 'failed to move'
os.remove(tmpFile)
文章的脚注信息由WordPress的wp-posturl插件自动生成





















最新评论