
影片是从eMule下载的,srt是从射手网下载的。
开始字幕还好,到了剧情正式开始的位置,发现字幕严重地延迟了,反复测试发现从5分13秒的字幕开始延迟,约延迟13秒。
那么解决方法就是用Python来将此后的字幕时间统统减少13秒。
本来想用Python提供的时间函数来处理,但没有发现适合的,就打算自己来计算一下,就是要考虑借位的地方。折腾了1个多小时(好久没写Python了,所以写起来好慢哦

),最后实现了,贴在这里,供大家参考指正

:
# encoding:gb2312
import re,os
fo=file(r"F:\字幕\Supernatural.S01E09.HR.HDTV.AC3.5.1.XviD-CTU.gb-adjust.srt","r")
aContent=fo.readlines()
fo.close()
p=r'(\d\d:\d\d:\d\d)(,\d{3} --> )(\d\d:\d\d:\d\d)(,\d{3})'
aContentTgt=[]
def dbStr(_i):
if _i<10:
return '0'+str(_i)
else:
return str(_i)
def subTime(_t):
_h,_m,_s=_t.split(":")
_sTgt=''
if int(_s)-13<0:
if int(_m)>0:
_sTgt+=_h+":"+dbStr(int(_m)-1)+":"+dbStr(int(_s)-13+60)
else:
_sTgt+=dbStr(int(_h)-1)+":"+dbStr(int(_m)-1+60)+":"+dbStr(int(_s)-13+60)
else:
_sTgt+=_h+":"+_m+":"+dbStr(int(_s)-13)
return _sTgt
for ln in aContent:
m=re.search(p,ln)
if m:
t1,v1,t2,v2=m.group(1,2,3,4)
if t1<"00:05:13":
aContentTgt.extend(ln)
else:
aContentTgt.extend(subTime(t1)+v1+subTime(t2)+v2+"\n")
else:
aContentTgt.extend(ln)
ft=file(r"F:\字幕\Supernatural.S01E09-adjusted.srt",'w')
ft.writelines(aContentTgt)
ft.close()
#os.system("start "+r'"F:\字幕\Supernatural.S01E09-adjusted.srt"')