话说10月10日斯坦福开始的machine learning很有意思,网站在这,而且视频可以下载,观看起来非常方便,但是有个问题就是下载下来的视频没有字幕,而从网上的视频有字幕,于是可以写个程序将字幕搞下来。
感谢scturtle提供的最初的脚本程序
下面是我经过修改的精简版,只要输入视频的文件名(名字中不要有后缀名)就可以下载字幕了
-
# coding: utf-8
-
import urllib2,os
-
import sys,re,codecs
-
-
limit=[60,60,60,1000]
-
def xml2srt(fi,fo):
-
data=''.join((fi.split('\n')[9:-4])).strip().split('</p>')
-
for i in range(0,len(data)-1):
-
if data[i]:
-
st_st=data[i].index('"')
-
st_ed=data[i].index('"',st_st+1)
-
if i+1<len(data)-1:
-
nx_st=data[i+1].index('"')
-
nx_ed=data[i+1].index('"',nx_st+1)
-
fo.write(str(i+1)+' \n')
-
stamps=[data[i][st_st+1:st_ed],
-
data[i+1][nx_st+1:nx_ed] if i+1<len(data)-1 else "99:59:59.999"]
-
word=data[i][data[i].index('>')+1:].replace('\n',' ')+' \n\n\n'
-
for i,stamp in enumerate(stamps):
-
stamp=stamp.split('.')
-
stamps[i]=map(int,stamp[0].split(':'))
-
stamps[i].append(int(stamp[1]))
-
stamps=map(lambda s:"%02d:%02d:%02d,%03d" % tuple(s),stamps)
-
fo.write("%s --> %s \n" % tuple(stamps))
-
fo.write(word)
-
print 'OK!'
-
-
baseurl='http://s3.amazonaws.com/stanford_videos/cs229/subtitles/%s-subtitles.xml'
-
fn=raw_input('file name:')
-
if os.path.exists(fn+'.srt'):
-
print 'file exit!'
-
exit(0)
-
fi=urllib2.urlopen(baseurl % fn).read()
-
fo=file(fn+'.srt','w')
-
xml2srt(fi,fo)
-
fo.close()
-
print 'Done'
为了方便使用,我还制作了windows下可执行的exe的程序,直接运行run.exe输入视频名就可以了,这里下载
请问文件名是指什么,machine learning?
@sth: 指的是下载下来的视频的名字
thanks a lot!!!
使用说明能不能提供下?我输入了 但是机器没有反应,下载下来的位置是哪里?
@Dean: 直接输入视频名就好了比如“01.1-V3-Introduction-Welcome”,输的时候没有引号,下载下来的字幕文件就在程序运行所在的目录下
但是现在视频文件的名字好像改了,原来视频文件的名字你知道吗?
@Yatao Bian: 不好意思呢,原来的记不得了。。。