Source

mudo / parse_subtitles.py


import re
import sys

re_separador = re.compile("\r?\n\r?\n")
re_tempo = re.compile('(\d+):(\d+):(\d+),(\d+)')

def erro(mensagem):
    print mensagem
    sys.exit(1)

def parse_tempo(str):
    match = re_tempo.search(str.strip()) or erro("tempo errado "+str)
    (h,m,s,ms) = match.groups()
    return 3600 * int(h) + 60 * int(m) + int(s) + float(ms) / 1000

f = open(sys.argv[1], "r")
tudo = f.read()

partes = re_separador.split(tudo.strip())

last_id = -1
    
for parte in partes:

    linhas = parte.split("\n")
    len(linhas) < 3 and erro("erro na parte "+parte)

    id = int(linhas[0])

    if last_id != -1 and id != last_id + 1:
        erro("erro na sequencia de ids "+str(id))

    last_id = id

    linha = linhas[1]
    separador = "-->"
    p = linha.find(separador)
    if p == -1: 
        erro("erro na linha do tempo "+linha[1])
    
    inicio = parse_tempo(linha[0:p])
    fim = parse_tempo(linha[p+ len(separador) : ])

    texto = "\n".join(linhas[2 :])

    print id,inicio, fim, texto