segunda-feira, 23 de fevereiro de 2015

Script Python para Corrigir Legendas SRT

Palavras-chave: Python, str, Legenda, Subtitle, Script.

Desenvolvido por Lucas Matheus Testa

INTRODUÇÃO

Você já se deparou com arquivos .srt (Legenda) que possuem outro padrão de divisão de tempo do que o usado no Brasil ? Por exemplo:

0:00:01.120,0:00:05.340

onde a virgula é a divisão e não o usual " --> ", pois bem, este script desenvolvido na linguagem Python 2.7 tem por objetivo substituir a " , " por " --> " em todos os arquivos .srt dentro de uma determinada pasta.

Para o script poder realizar tal tarefa é necessário que exista um padrão nas quebras de linha, por exemplo, a cada três linhas é onde deve ser feita a substituição.

1 0:00:01.120,0:00:05.340
2 lalala
3
4 0:00:01.120,0:00:05.340

O script exige a entrada de três parâmetros:

1 - O caminho da pasta contendo os arquivos .srt, sem conter espaços no caminho;
2 - Qual é o carácter de separação atual, ie: ",";
3 - Qual será o novo carácter, ie: " --> ";
4 - De quantas em quantas linha está a substituição, ie: "3".

CÓDIGO FONTE

Crie um arquivo com o nome "muda_legenda.py" e copie o código abaixo integralmente.
# -*- encoding: utf-8 -*-
import fnmatch
import os
import sys

"""
Desenvolvido por Lucas Matheus Testa
E-mail: lucasmatheus3492@gmail.com
"""


NOVA_PASTA = "/legendas_br/"


""" Função para listar e retornar arquivos do diretório"""
def listar(caminho, pattern):
    return fnmatch.filter(os.listdir(caminho), pattern)


""" Verifica se todos os parâmetros foram passados """
if not len(sys.argv) == 5:
    print """Parâmetros necessários: \n 1 - Caminho para a pasta das legendas .srt \n
        2 - Qual é a atual divisão \n 3 - Qual vai ser o substituto \n 4 - De quantas em quantas linha é a legenda \n\n OBS: o caminho da pasta
        não pode conter espaços """
else:
        # Atribuição dos parâmetros
    caminho, antigo, novo, pula_linhas  = sys.argv[1], sys.argv[2], sys.argv[3], int(sys.argv[4])
        # retorna um array com todos os arquivos .srt do caminho indicado
    arquivos = listar(caminho, "*.srt")
        # cria uma nova pasta para as legendas corrigidas
        os.mkdir(caminho + NOVA_PASTA)
        # contador para auxiliar a identificar a linha que será modificada
    contador = 0
        # para cada arquivo no array
    for a in arquivos:
            # cria um arquivo de leitura da legenda atual
            entrada = open(caminho + "/" + a, 'r')
            # cria um arquivo de saida para a legenda corrigida
            saida = open(caminho + NOVA_PASTA + a, 'w')
            # para cada linha na entrada
            for i, linha in enumerate(entrada):
                # verifica se a linha é igual ao contador, ou seja, se aquela linha possui o tempo da legenda
                if i == contador:
                    # modifica a linha
                    nova_linha = linha.replace(antigo, novo)
                    # incrementa o contador com o número de linhas informado
                    contador += pula_linhas
                else:
                    nova_linha = linha
                # escreve na saída
                saida.write(nova_linha)
            # fecha os arquivos
            entrada.close()
            saida.close()
            # zera os contadores
            contador = 0
EXEMPLO DE UTILIZAÇÃO
$ python muda_legendas.py "/home/lucas/legendas" "," " --> " "3" 

Nenhum comentário: