다운받은 유튜브 자막을 smi 자막파일로 만들어 보겠습니다.
이전 포스팅과 연관성이 있습니다.
다운로드 받은 유튜브 자막을 일단 텍스트 파일로 저장합니다.
그리고 새로 파이썬 프로젝트를 하나 만들고, 그 안에 넣습니다.
프로젝트명은 YouTubeScriptToSmi 로 정했습니다.
아래 내용은 아래 사이트를 참고해서 작성되었습니다.
http://docs.python.org/2/tutorial/inputoutput.html
파일 읽기
파일 읽기는 아주 간단합니다. 아래 한 줄이 전부입니다.
scriptFile = open('script.txt', 'r')
한 줄은 시간, 한 줄은 자막
유튜브에서 받은 자막은 아래와 같은 형식입니다.
0:01 Ladies and gentleman, would you please welcome Chet Haase and Romain Guy. |
한 줄씩 읽어들여야 시간정보와 자막정보를 구분할 수 있습니다.
그래서 아래와 같이 readline을 이용해서 한 줄씩 번갈아가며 파일을 읽어 들입니다.
time = scriptFile.readline()
caption = scriptFile.readline()
그런데...... 어떤 파일은 자막 부분이 없어서 에러가 나는군요. 그래서 해당 라인이 시간정보인지 판단해서 해당 처리를 해주는 부분을 구현합니다.
시간을 smi 초로 변환
smi는 millisec로 시간을 표시합니다. 그래서 분단위와 초단위를 구분한 뒤 millisec로 만들어줍니다.
trimedString = timeString.strip() timeArray = trimedString.split(':') timeMinString = timeArray[0] timeSecString = timeArray[1] timeMin = int(timeMinString) * 60 * 1000 timeSec = int(timeSecString) * 1000 }
파일 쓰기
역시 아주 간단합니다. 열기 한 줄, 쓰기 한줄, 플러쉬 한 줄로 끝입니다.
convertedFile = open('converted.smi', 'w')
convertedFile.write("Hello world!\n");
convertedFile.flush();
전체 코드를 한 번 보겠습니다.
테스트 용으로 들어간 주석 처리된 코드는 무시하고 보시면 됩니다.
# -*- coding: utf-8 -*- # determine is time or not def isTime(strToTest): trimedString = strToTest.strip() stringArray = trimedString.split(':') try: timeMin = int(stringArray[0]) except ValueError: return False try: timeSec = int(stringArray[1]) except ValueError: return False if len(stringArray) == 2: return True else : return False return # get time converted for smi def getConvertedTime(timeString): trimedString = timeString.strip() timeArray = trimedString.split(':') timeMinString = timeArray[0] timeSecString = timeArray[1] timeMin = int(timeMinString) * 60 * 1000 timeSec = int(timeSecString) * 1000 return str(timeMin + timeSec); # common header def getHeader(): return "#이 부분은 태그 때문에 에러가 나는군요...... 부득이하게 캡쳐 파일로 대신합니다. 줄은 잘 맞춰서 쓰시기 바랍니다." print "Start" # Read whole file and print # scriptFile = open('script.txt', 'r') # print scriptFile.read() # Read and print whole text file line by line # scriptFile = open('script.txt', 'r') # for line in scriptFile : # print "read :" + line # Read and convert, write to file scriptFile = open('script.txt', 'r') convertedFile = open('converted.smi', 'w') convertedFile.write(getHeader() + "\n"); while True: stringToTest = scriptFile.readline() if (isTime(stringToTest)): # time time = stringToTest if not time: break SMI " # common footer def geFooter(): return "
else : # caption caption = stringToTest if not caption: convertedFile.write("\n"); break; convertedFile.write(caption + ""); convertedFile.write(geFooter()); convertedFile.flush(); print "End" }
이렇게 파이썬을 이용하여 간편하게 파일을 수정할 수 있습니다.
최종 파일입니다.
끝!
'Python' 카테고리의 다른 글
다운받은 유튜브 자막을 smi로 만들기 (2) (0) | 2014.04.04 |
---|---|
COM 객체를 Python에서 이용하기 + Python Eclipse 에서 Hello World (0) | 2014.02.28 |