sincleg: sincronizador de legendas (srt)
Publicado por Marcos Paulo Ferreira (última atualização em 05/02/2010)
[ Hits: 9.848 ]
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
Backup Base de Dados PostgreSQL [pg_dump]
Coleta de utilização de rede utilizando SAR (systat package)
Carrega o VNC em uma tela do X11 separada e com mouse para canhotos
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Podem me chamar de 1mbecil :) (1)
Como ler fonte de um projeto? [RESOLVIDO] (5)
Perfil criado no samba ad dc não loga no Windows 10 e 11 [RESOLVIDO] (14)
diferença entre o Tor baixado pelo Gerenciador de Aplicativos e o Tor ... (0)
Debian Stable travado em atualizações: dist-upgrade não resolve [RESOL... (10)









