下了个钢铁苍穹,结果发现字幕的延时有问题,而在宿舍没法上网,好吧,用python写个脚本“自己动手,丰衣足食”
脚本仅限于修改srt类型的字幕,srt型的字幕格式相当简单,我从复仇者联盟截下来一段:
1
00:00:28,211 --> 00:00:32,173
宇宙魔方已经觉醒了
2
00:00:33,008 --> 00:00:37,971
它在一个小小的空间里,人类的世界里
3
00:00:38,679 --> 00:00:42,017
人类试图控制它运用它
用一个很简单的正则表达式就可以匹配时间信息了
r"([0-6]\d)\:([0-6]\d)\:([0-6]\d)\,(\d\d\d)"
贴代码了,这个脚本太简单了,没什么好说的
1
import re
2 import os.path
3 from optparse import OptionParser
4 import cStringIO
5
6 parser = OptionParser()
7 parser.add_option( " -d ", " --delay ",
8 type = " float ")
9 parser.add_option( " -f ", " --sub-file ")
10 (options, args) = parser.parse_args()
11
12 file_bf = open(os.path.abspath(options.sub_file), " r ")
13 delay = options.delay
14
15 buf = cStringIO.StringIO()
16
17 def trans(time):
18 base = float(time[0])*3600 + float(time[1])*60 + float(time[2]) + float( ' 0.%s '% time[3])
19 base += delay
20 int_part = int(base)
21 float_part = int((base - float(int_part)) * 1000)
22 hour_part = int_part/3600
23 min_part = (int_part - hour_part*3600)/60
24 sec_part = (int_part - hour_part*3600)%60
25
26 return " %.2d:%.2d:%.2d,%.3d "% (hour_part, min_part, sec_part, float_part)
27
28 pattern = r " ([0-6]\d)\:([0-6]\d)\:([0-6]\d)\,(\d\d\d) "
29 ro = re.compile(pattern)
30 for line in file_bf:
31 list_bf = ro.findall(line)
32 if list_bf:
33 list_af = [trans(list_bf_elm) for list_bf_elm in list_bf]
34 buf.write( " %s --> %s\n "% tuple(list_af))
35 else:
36 buf.write(line)
37
38 file_bf.close()
39 buf.seek(0)
40 file_af = open(os.path.abspath(options.sub_file), " w ")
41 for line in buf:
42 file_af.write(line)
43 file_af.close()
2 import os.path
3 from optparse import OptionParser
4 import cStringIO
5
6 parser = OptionParser()
7 parser.add_option( " -d ", " --delay ",
8 type = " float ")
9 parser.add_option( " -f ", " --sub-file ")
10 (options, args) = parser.parse_args()
11
12 file_bf = open(os.path.abspath(options.sub_file), " r ")
13 delay = options.delay
14
15 buf = cStringIO.StringIO()
16
17 def trans(time):
18 base = float(time[0])*3600 + float(time[1])*60 + float(time[2]) + float( ' 0.%s '% time[3])
19 base += delay
20 int_part = int(base)
21 float_part = int((base - float(int_part)) * 1000)
22 hour_part = int_part/3600
23 min_part = (int_part - hour_part*3600)/60
24 sec_part = (int_part - hour_part*3600)%60
25
26 return " %.2d:%.2d:%.2d,%.3d "% (hour_part, min_part, sec_part, float_part)
27
28 pattern = r " ([0-6]\d)\:([0-6]\d)\:([0-6]\d)\,(\d\d\d) "
29 ro = re.compile(pattern)
30 for line in file_bf:
31 list_bf = ro.findall(line)
32 if list_bf:
33 list_af = [trans(list_bf_elm) for list_bf_elm in list_bf]
34 buf.write( " %s --> %s\n "% tuple(list_af))
35 else:
36 buf.write(line)
37
38 file_bf.close()
39 buf.seek(0)
40 file_af = open(os.path.abspath(options.sub_file), " w ")
41 for line in buf:
42 file_af.write(line)
43 file_af.close()