SRT2SMI
Programming... 2009/11/27 08:45
가끔 다운 받는 자막이 SRT포맷일 때 바꿀려고 만들었다...
왠지 다른 곳 어딘가에서도 필요할 것 같다는 근거 없는 믿음으로 블로그에도 남긴다.
겨우 이 스크립트 하나 짜는 데, 2시간이 넘게 걸린 듯.--;;
파이썬이다...
#srt2smi.py
import re
import sys
def translate(src, dst, delay):
f = file(src)
out = ''
st = 0
ed = 0
picked = 0
while (f):
line = f.readline()
if (len(line) == 0):
break
line = re.subn('\n', '', line)[0]
line = re.subn('\r', '', line)[0]
line = re.subn('^\s+', '', line)[0]
line = re.subn('\s+$', '', line)[0]
if (len(line) == 0):
continue
if (re.match('^\d+$', line)):
print line
if (picked):
out = out + '\n<SYNC Start=' + str(ed) + '><P Class=KRCC>\n '
picked = 0
continue
if (re.match('^.+-->.+$', line)):
L = line[:12].split(':')
st = int(L[0]) * 3600000 + int(L[1]) * 60000 + int(re.subn(',', '', L[2])[0]) + delay
if (st <= ed):
st = ed + 1
L = line[-12:].split(':')
ed = int(L[0]) * 3600000 + int(L[1]) * 60000 + int(re.subn(',', '', L[2])[0]) + delay
picked = 1
continue
if (picked):
if (picked == 1):
out = out + '\n<SYNC Start=' + str(st) + '><P Class=KRCC>\n'
picked = picked + 1
else:
out = out + '<BR>'
out = out + line
f.close()
f = file (dst, 'w')
f.write('''<SAMI>\n<HEAD>\n<TITLE></TITLE>\n<STYLE TYPE=\"text/css\">
<!--
P { margin-left:16pt; margin-right:16pt; margin-bottom:16pt;
margin-top:16pt; font-size:18pt; text-align:center;
font-family:arial; font-weight:bold; color:#f0f0f0;
}
.KRCC { Name:KR; lang:ko-KR; SAMIType:CC; }
.ENCC { Name:EN; lang:en-US; SAMIType:CC; }
#STDPrn { Name:Standard Print; }
#LargePrn { Name:Large Print; font-size:20pt; }
#SmallPrn { Name:Small Print; font-size:10pt; }
-->
</STYLE>
</HEAD>
<BODY>\n''')
f.write(out)
f.write('</BODY>\n</SAMI>\n')
f.close()
if __name__ == "__main__":
delay = 0
if len(sys.argv) > 3:
delay = sys.argv[3]
translate(sys.argv[1], sys.argv[2], delay)




