python版的srt2ass,可以将srt字幕文件转换为ass字幕文件,srt2assass,#!user/bin/e
#!user/bin/env python#-*- coding:utf-8 -*-import sysdef coded(str): try: try: try: try: try: ans=str.decode('gb2312') except: ans=str.decode('gbk') except: ans=str.decode('cp936') except: ans=str.decode('utf-8') except: ans=str.decode('big5') except: ans=None return ansdef main(name): import re extract=re.compile('\\d+\\s+([0-9:,]+)\\s--?>\\s([0-9:,]+)\\s+(.*?)\\r?\\n') gettime=re.compile('(\\d+):(\\d+):(\\d+),(\\d+)') def trs(tim): i,j,k,t=[int(x) for x in gettime.match(tim).groups()] t=t/10+1 if t%10>=5 else t/10 if t>99: k,t=k+1,0 if k>59: j,k=j+1,0 if j>59: i,j=i+1,0 return (i,j,k,t) with open(name,'rb') as file: data=coded(file.read()) if not data:return sub=extract.findall(data) n1,n2,n3=sub.pop(0) merge=[(trs(n1),trs(n2),n3)] for n1,n2,n3 in sub: p1,p2,p3=merge[-1] n1,n2=trs(n1),trs(n2) if p3==n3: if p2[0]==n1[0] and p2[1]==n1[1] and p2[2]==n1[2]: if n1[3]-p2[3]<=5: merge[-1]=(p1,n2,p3) continue merge.append((n1,n2,n3)) lst=name.split('.') lst[-1]='ass' name='.'.join(lst) with open(name,'w') as file: file.write('''[Script Info];;Title:Original Script:Synch Point:0ScriptType:v4.00+Collisions:NormalPlayResX:704PlayResY:396Timer:100.0000[V4+ Styles]Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, EncodingStyle: Default,黑体,25,&H00FFFFFF,&HF0000000,&H00000000,&HF0000000,-1,0,0,0,100,100,0,0.00,1,2,0,2,30,30,10,134[Events]Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text''' ) for n1,n2,n3 in merge: n1='%02d:%02d:%02d.%02d'%n1 n2='%02d:%02d:%02d.%02d'%n2 line='Dialogue: 0,%s,%s,*Default,NTP,0000,0000,0000,,%s\\n'%(n1,n2,n3) file.write(line.encode('utf-8'))if __name__=='__main__': if len(sys.argv)>1: for name in sys.argv[1:]: main(name)#该片段来自于http://byrx.net
评论关闭