miércoles, 27 de noviembre de 2013

Sincronizar subtitulos .srt (script en perl)

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

sábado, 9 de noviembre de 2013

Generar archivos de tamaño especifico en BASH

Me he visto en la necesidad de crear archivos de diferentes tamaños para comprobar el envió de los mismos por correo electrónico y verificar la correcta transferencia en cada peso de archivo.

Para esto hice este pequeño script que al ejecutarlo se le manda como argumento el peso que queremos que tenga nuestro archivo , también como segundo argumento, el nombre del archivo que nos generará en el mismo directorio del script:


#!/bin/bash
#USO:     ./script.sh peso_deseado nombre_del_archivo
#EJEMPLOS: 

#EN Kb ./script.sh 300K archivo300K.txt

#EN Mb ./script.sh 3,0M archivo3Mb.txt
#EN Gb ./script.sh 1,0G archivo1G.txt

while [ 0 ]; do

echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2

PESO=$(du -h $2 | cut -f 1)

echo "peso acumulado: $PESO"
if [ $PESO == $1 ]
then
break
fi
done

viernes, 8 de noviembre de 2013

SSH desde Android con vSSH + HackersKeyboard

Recomendación:

Hay ocasiones en que andas ocupado, de viaje, o simplemente no tienes al alcance una computadora y precisamente en ese momento tienes que conectarte a tus servidores por SSH.

Pues para mi era un poco molesto hacer esto desde el celular ya que no podía ejecutar comandos anteriores debido a que el teclado que trae de base Android, no trae la funcionalidad de las tipicas "flechitas". Pero esto cambió cuando preguntando en las redes sociales, y pues ahi Leonel Nuñez me pasó e tip de usar HackersKeyboard para tu cliente ssh en el celular.

En mi caso yo usé la combinación de el cliente vSSH y HackersKeyboard, Lo que desde mi primera impresión fué una experiencia totalmente distinta a las que había tenido sin usar este teclado "Full" .

Les comparto una captura de mi pantalla:



martes, 5 de noviembre de 2013

Comprobar si funcionan mis registros DNS

Cuando trabajas constantemente con registros de dominio, es muy importante comprobar que resuelve adecuadamente el DNS cada que hacemos algún cambio en los archivos de configuración ó hacemos algún nuevo registro en el.



Procedimiento:
Para comprobar la configuración de DNS, en una terminal de sistema, escriba nslookup y, a continuación, presione ENTER.

Escriba server , donde la dirección IP es la dirección IP del servidor DNS externo.

Escriba set q=MX y presione ENTER.

Escriba , donde el nombre de dominio corresponde a un dominio de correo externo, y a continuación presione ENTER.

Debe mostrarse el registro de recurso intercambiador de correo (MX) del dominio especificado. Si no se muestra, DNS no está configurado para resolver nombres de dominio externos.




Ejemplo:
En el ejemplo siguiente se muestra los registros MX para ejemplo.mx y nos muestra sus direcciones que tiene configuradas para el correo electronico:

villatux@vuach:~/Escritorio$ nslookup
> 148.227.5.13
Server: 127.0.1.1
Address: 127.0.1.1#53

13.5.227.148.in-addr.arpa name = dns.ejemplo.mx.
> set q=MX
> ejemplo.mx
Server: 127.0.1.1
Address: 127.0.1.1#53

ejemplo.mx mail exchanger = 0 salida.ejemplo.mx.
ejemplo.mx mail exchanger = 0 salida2.ejemplo.mx.



Comprobar si resuelve un registro. En este caso vamos a ver si nuestro DNS resuelve un nuevo registro "facturas" , y lo podemos hacer de esta manera:

villatux@vuach:~/Escritorio$ nslookup facturas.ejemplo.mx 148.227.5.13
Server: 148.227.5.13
Address: 148.227.5.13#53

facturas.uach.mx canonical name = facturas.ejemplo.mx.
Name: facturas.ejemplo.mx
Address: 148.227.5.170