¿Acaso no es molesto cuando bajas unos subtítulos y resulta que no están sincronizados con el video?, ésto pasa muy seguido cuando bajas películas de internet, ayer no podía ver el OVA 2 de Rurouni Kenshin por éste motivo, así que decidí hacer un script para hacer desplazamientos de tiempo en la pista de subtítulos.

¿Cómo usarlo?

  • Bájenselo de aqui
  • chmod 755 <filename>

Subfixer 0.1 by @Katzider
usage: subfixer <DIV> <AMMOUNT> <FILENAME>
DIV:
-h  -> hours
-m  -> minutes
-s  -> seconds
-ms -> milliseconds
AMMOUNT: Any
FILENAME: valid srt subtitle file

El code:

#!/bin/bash
#Katzider 2011
function input()
{
shopt -s nocasematch
if [ -f $3 ]
then
if [[ $3 =~ (.*)(\.)(ssa) ]]
then
transformSSA $1 $2 $3 0
else
if [[ $3 =~ (.*)(\.)(srt) ]]
then
transformSRT $1 $2 $3 1
else
printUsage
fi
fi
else
printUsage
fi
}

function printUsage()
{
echo “”
echo “Subfixer 0.1 by @Katzider”
echo “usage: subfixer


echo “DIV:”
echo “-h -> hours”
echo “-m -> minutes”
echo “-s -> seconds”
echo “-ms -> milliseconds”
echo “AMMOUNT: Any”
echo “FILENAME: valid srt subtitle file”
echo “”

function transformSRT()
{
grep “\->” $3 > .list1
cat .list1 | sed ‘s/\ \-\-\>\ /B/g’ > .list2
cat .list2 > .list1
echo “This may take few minutes…”
OFFSET=$2
if [[ $1 == "-h" ]]
then
let “OFFSET*=3600000″
else
if [[ $1 == "-m" ]]
then
let “OFFSET*=60000″
else
if [[ $1 == "-s" ]]
then
let “OFFSET*=1000″
else
printUsage
fi
fi
fi
cat $3 > $3″_2.srt”
for i in `cat .list1`
do
REPLACE=${i//$’\r’}
REPLACE=`echo $REPLACE|sed ‘s/B/\ –>\ /’`
TOTAL_MILLIS_S=0
TOTAL_MILLIS_E=0
START=`echo $i | awk ‘BEGIN {FS = “B”} ; {print $1}’`
END=`echo $i | awk ‘BEGIN {FS = “B”} ; {print $2}’`

TMP=`echo $START | awk ‘BEGIN {FS = “:”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=3600000″
let “TOTAL_MILLIS_S+=TMP”
TMP=`echo $START | awk ‘BEGIN {FS = “:”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=60000″
let “TOTAL_MILLIS_S+=TMP”

SECS_=`echo $START | awk ‘BEGIN {FS = “:”}; {print $3}’`
TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=1000″
let “TOTAL_MILLIS_S+=TMP”

TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TOTAL_MILLIS_S+=TMP”
TMP=`echo $END | awk ‘BEGIN {FS = “:”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`

let “TMP*=3600000″
let “TOTAL_MILLIS_E+=TMP”
TMP=`echo $END | awk ‘BEGIN {FS = “:”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=60000″
let “TOTAL_MILLIS_E+=TMP”
SECS_=`echo $END | awk ‘BEGIN {FS = “:”}; {print $3}’`
TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=1000″
let “TOTAL_MILLIS_E+=TMP”

TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
TMP=${TMP//$’\r’}
let “TOTAL_MILLIS_E+=TMP”

let “TOTAL_MILLIS_S+=OFFSET”
let “TOTAL_MILLIS_E+=OFFSET”

let “H_S=(TOTAL_MILLIS_S/3600000)”
let “M_S=(TOTAL_MILLIS_S%3600000)/(1000*60)”
let “S_S=((TOTAL_MILLIS_S%3600000)%(1000*60))/1000″
let “MS_S=((TOTAL_MILLIS_S%3600000)%(1000*60))%1000″

let “H_E=(TOTAL_MILLIS_E/3600000)”
let “M_E=(TOTAL_MILLIS_E%3600000)/(1000*60)”
let “S_E=((TOTAL_MILLIS_E%3600000)%(1000*60))/1000″
let “MS_E=((TOTAL_MILLIS_E%3600000)%(1000*60))%1000″

if [ $H_S -lt 0 ]; then H_S=00; fi
if [ $M_S -lt 0 ]; then M_S=00; fi
if [ $S_S -lt 0 ]; then S_S=00; fi
if [ $MS_S -lt 0 ]; then MS_S=000; fi
if [ $H_E -lt 0 ]; then H_E=00; fi
if [ $M_E -lt 0 ]; then M_E=00; fi
if [ $S_E -lt 0 ]; then S_E=00; fi
if [ $MS_E -lt 0 ]; then MS_E=000; fi

if [ $(echo $H_S | wc -c) -eq 2 ]; then H_S=0$H_S; fi
if [ $(echo $M_S | wc -c) -eq 2 ]; then M_S=0$M_S; fi
if [ $(echo $S_S | wc -c) -eq 2 ]; then S_S=0$S_S; fi
if [ $(echo $MS_S | wc -c) -eq 2 ]; then MS_S=0$MS_S; fi
if [ $(echo $MS_S | wc -c) -eq 3 ]; then MS_S=0$MS_S; fi
if [ $(echo $H_E | wc -c) -eq 2 ]; then H_E=0$H_E; fi
if [ $(echo $M_E | wc -c) -eq 2 ]; then M_E=0$M_E; fi
if [ $(echo $S_E | wc -c) -eq 2 ]; then S_E=0$S_E; fi
if [ $(echo $MS_E | wc -c) -eq 2 ]; then MS_E=0$MS_E; fi
if [ $(echo $MS_E | wc -c) -eq 3 ]; then MS_E=0$MS_E; fi

REPLACEMENT=$(echo $H_S:$M_S:$S_S,$MS_S” –> “$H_E:$M_E:$S_E,$MS_E)
cat $3″_2.srt” | sed “s/$REPLACE/$REPLACEMENT/g” > .list3
cat .list3 > $3″_2.srt”
done

rm .list1 .list2 .list3
echo “Done, saved in $3_2.srt, enjoy!”
}

function transformSSA()
{
echo “SSA will be delivered in version v2.0″
}

input $1 $2 $3

Advertisement