sincleg: sincronizador de legendas (srt)
Publicado por Marcos Paulo Ferreira (última atualização em 05/02/2010)
[ Hits: 9.631 ]
Homepage: http://daemoniolabs.wordpress.com
Esse script sincroniza aquela legenda chata que fica fora de sincronia com o áudio do vídeo.
O script é simples: atrasa ou adianta todas as legendas do filme de acordo com o tempo, em milisegundos, passado
como parâmetro.
O script não tem opções, apenas espera o arquivo que contém as legendas como entrada e retorna
as legendas modificados na saída padrão.
[ Uso ]
Adiantando 1 segundo em todas as legendas:
$ ./sincleg '+1000' < legenda.srt > nova_legenda.srt
Atrasando as legendas em um minuto:
$ ./sincleg '-60000' < legenda.srt > nova_legenda.srt
Atrasando as legendas em 5,123 segundos:
$ ./sincleg '-5123' < legenda.srt > nova_legenda.srt
Para facilitar:
1000 milisegundos = 1 segundo
60000 milisegundos = 1 minuto
t+
#!/bin/bash # sincleg - Sincronizador de Legenda # Autor: Daemonio ( undefinido at gmail com ) # Wed Jan 13 11:46:56 BRST 2010 # Mon Jan 18 19:14:05 BRST 2010 # Thu Jan 28 19:57:43 BRST 2010 # # == Uso == # $ cat legenda.srt | ./sincleg '+1000' > nova_legenda.srt # ou # $ ./sincleg '+1000' < legenda.srt > nova_legenda.srt # # O segundo parametro e' o ajuste em milisegundos. # Nos exemplos acima, as legendas foram adiantadas em 1 segundo. # Para atrasar use o sinal '-', como em: # $ ./sincleg '-3123' < legenda.srt > nova_legenda.srt # Nesse caso as legendas foram atrasadas em 3,123 segundos. # # = Observacao = # Se o arquivo de legenda estiver no formato de texto windows (com o ^M # no final), entao uma conversao para o formato unix tera que ser # feita. Para isso, basta voce utilizar o programa fromdos. # $ fromdos < legenda.srt > lengenda2.srt # $ ./sincleg '+1000' < lengeda2.srt > nova_lengenda.srt # ou # $ fromdos < legenda.srt | ./sincleg '+1000' > nova_legenda.srt # # == Geral == # O trabalho todo e' feito pelo bc. Entao ele reporta a maioria # dos erros que ocorre durante a execucao do script. # O script em geral nao faz verificacao do parametro passado e muito # menos verifica se o tempo total retornado e' valido (tempo negativo, # por exemplo). Entao cabe ao usuario passar os parametros corretos # (somente numeros e subtrair um tempo inferior que o tempo da legenda) # # A variavel FORMAT contem a regexp para casar a linha que # contem o tempo das legendas. # FORMAT='[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}' FORMAT="^${FORMAT} --> ${FORMAT}" LINE= TIME= NEW_TIME= MILI= get_new_time() { local S= # # NEW_TIME ira conter o tempo total (tempo da legenda + # parametro do usuario) em segundos. Essa variavel e' do tipo # float com tres casas apos o ponto (scale=3). # Veja que antes do ponto e' a quantidade inteira em segundos e # apos o ponto e' a quantidade em milisegundos. # ${NEW_TIME%.*} --> segundos (a parte inteira) # ${NEW_TIME#*.} --> milisegundos # NEW_TIME=`echo $TIME | sed -e 's@\([0-9]*\):\([0-9]*\):\([0-9]*\),\(.*\)@scale=3; \1*3600+\2*60+\3+\4/1000@'\ -e "s,$, + $MILI/1000," | bc` # # Conversao do tempo total em segundos para o # formato da legenda. # S=${NEW_TIME%.*} echo "print h=$S/3600,\":\",($S-last)/60,\":\",$S-(h*3600)-(last*60)" | bc | sed -e "s/$/,${NEW_TIME#*.}/" -e 's/\b[0-9]\b/0&/g' } MILI=${1:-0} MILI=${MILI#*+} while read LINE do #if echo $LINE | grep -qE "$FORMAT" if [[ $LINE =~ $FORMAT ]] then for TIME in ${LINE/ -->/} do get_new_time echo done | sed 'N;s/\n/ --> /' else echo $LINE fi done
Script para rotacionar logs dos sites no Apache
Testando RAID na incialização e exibindo log no issue
pdfck - gerenciador de PDF para o console
Script pra instalar / atualizar o Postfix no Slackware
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Não consigo baixar e usar temas no KDE [RESOLVIDO] (5)
Wifi parou de funcionar no Inspirion N4050 com Debian 12 (2)
Como faço boot direto na área de trabalho pelo sddm? [RESOLVIDO] (2)
Mint/Ubuntu desligam ao fechar a tampa (3)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (22)