Me ha pasado que quiero ver Películas/Series con subtitulos y que no encuentras el subtitulo exacto para tu archivo de vídeo, pero en cambio encuentras otro subtitulo de la misma serie pero no coinciden los tiempos del video con los subtitulos.
Para solucionar este problema podemos usar un script desarrollado en PERL, que encontré en el blog Matt's Musings con el cual podemos adelantar ó atrasar los tiempos de los subtitulos muy fácilmente.
Ejemplo de uso:
cat The.Bridge.US.S01E05.srt | /home/villatux/sync_subtitles.pl -t +12s > newsubs3.srt
donde "+12s" significa que se vá a adelantar 12 segundos, si quieres atrasar tus subtitulos debes poner el tiempo que desees con signo negativo.
Les paso el código del script:
#!/usr/bin/perl
use strict;
use Getopt::Long;
my %scales = ( 'h' => 3600000,
'm' => 60000,
's' => 1000,
'u' => 0,
);
my ($opt_t);
GetOptions ( "t=s" => \$opt_t, "time" => \$opt_t,
);
if ( $opt_t )
{
my $sign = substr($opt_t,0,1);
my $scale = substr($opt_t,length($opt_t)-1, 1);
my $time = int(substr($opt_t,1,length($opt_t)-2));
if ( $sign !~ /[+-]/ || $scale !~ /[hmsu]/ )
{
die "Time should be [+-]";
}
if ( $scales{$scale} )
{
$time = $time * $scales{$scale};
}
if ( $sign =~ /-/ )
{
$time *= -1;
}
while ()
{
# 00:01:09,040 --> 00:01:11,713
if ( /(\d\d):(\d\d):(\d\d),(\d+)\s+-->\s+(\d\d):(\d\d):(\d\d),(\d+)/ )
{
my ($sh,$sm,$ss,$su,$eh,$em,$es,$eu) = ($1,$2,$3,$4,$5,$6,$7,$8,$9);
my $s = ($su + ($ss * $scales{'s'}) + ($sm * $scales{'m'}) + ($sh * $scales{'h'})) + $time;
my $e = ($eu + ($es * $scales{'s'}) + ($em * $scales{'m'}) + ($eh * $scales{'h'})) + $time;
my $rt = 0;
$sh = int($s/$scales{'h'});
$rt += ($sh * $scales{'h'});
$sm = int(($s - $rt) / $scales{'m'});
$rt += ($sm * $scales{'m'});
$ss = int(($s - $rt) / $scales{'s'});
$rt += ($ss * $scales{'s'});
$su = ($s - $rt);
$rt = 0;
$eh = int($e/$scales{'h'});
$rt += ($eh * $scales{'h'});
$em = int(($e - $rt) / $scales{'m'});
$rt += ($em * $scales{'m'});
$es = int(($e - $rt) / $scales{'s'});
$rt += ($es * $scales{'s'});
$eu = ($e - $rt);
printf "%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n", $sh,$sm,$ss,$su,$eh,$em,$es,$eu;
}
else
{
print $_;
}
}
}
else
{
print "You need to specify time offset\n";
}
#FIN DEL SCRIPT
Espero les sirva de algo :p
Para solucionar este problema podemos usar un script desarrollado en PERL, que encontré en el blog Matt's Musings con el cual podemos adelantar ó atrasar los tiempos de los subtitulos muy fácilmente.
Ejemplo de uso:
cat The.Bridge.US.S01E05.srt | /home/villatux/sync_subtitles.pl -t +12s > newsubs3.srt
donde "+12s" significa que se vá a adelantar 12 segundos, si quieres atrasar tus subtitulos debes poner el tiempo que desees con signo negativo.
Les paso el código del script:
#!/usr/bin/perl
use strict;
use Getopt::Long;
my %scales = ( 'h' => 3600000,
'm' => 60000,
's' => 1000,
'u' => 0,
);
my ($opt_t);
GetOptions ( "t=s" => \$opt_t, "time" => \$opt_t,
);
if ( $opt_t )
{
my $sign = substr($opt_t,0,1);
my $scale = substr($opt_t,length($opt_t)-1, 1);
my $time = int(substr($opt_t,1,length($opt_t)-2));
if ( $sign !~ /[+-]/ || $scale !~ /[hmsu]/ )
{
die "Time should be [+-]
}
if ( $scales{$scale} )
{
$time = $time * $scales{$scale};
}
if ( $sign =~ /-/ )
{
$time *= -1;
}
while (
{
# 00:01:09,040 --> 00:01:11,713
if ( /(\d\d):(\d\d):(\d\d),(\d+)\s+-->\s+(\d\d):(\d\d):(\d\d),(\d+)/ )
{
my ($sh,$sm,$ss,$su,$eh,$em,$es,$eu) = ($1,$2,$3,$4,$5,$6,$7,$8,$9);
my $s = ($su + ($ss * $scales{'s'}) + ($sm * $scales{'m'}) + ($sh * $scales{'h'})) + $time;
my $e = ($eu + ($es * $scales{'s'}) + ($em * $scales{'m'}) + ($eh * $scales{'h'})) + $time;
my $rt = 0;
$sh = int($s/$scales{'h'});
$rt += ($sh * $scales{'h'});
$sm = int(($s - $rt) / $scales{'m'});
$rt += ($sm * $scales{'m'});
$ss = int(($s - $rt) / $scales{'s'});
$rt += ($ss * $scales{'s'});
$su = ($s - $rt);
$rt = 0;
$eh = int($e/$scales{'h'});
$rt += ($eh * $scales{'h'});
$em = int(($e - $rt) / $scales{'m'});
$rt += ($em * $scales{'m'});
$es = int(($e - $rt) / $scales{'s'});
$rt += ($es * $scales{'s'});
$eu = ($e - $rt);
printf "%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n", $sh,$sm,$ss,$su,$eh,$em,$es,$eu;
}
else
{
print $_;
}
}
}
else
{
print "You need to specify time offset\n";
}
#FIN DEL SCRIPT
Espero les sirva de algo :p
2 comentarios:
g o h en VLC :-P
Nice nice, si esta mucho muy util, saudos mi tux.
Lukaz
Publicar un comentario