sincleg: sincronizador de legendas (srt)
Publicado por Marcos Paulo Ferreira (última atualização em 05/02/2010)
[ Hits: 9.826 ]
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
Counter Strike Dedicated Server
Menu de saída para i3 (versão em Zenity)
Script para desinstalação Gerix Wi-fi Cracker no Kali Linux
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Erro ao instalar programa, "você tem pacotes retidos quebrados&qu... (10)
VOL já não é mais como antes? (15)
Como personalizar o lxde? [RESOLVIDO] (5)
Flatpaks não funcionam após atualizar pelo Gerenciador de Atualizações... (3)









