Sincronizar Subtítulos .srt

Agregar a favoritos

40 Comentarios

Posteado hace 435 días en:

Algunas veces no sé porque pero la función del VLC para manipular los segundos de los subtítulos no funciona correctamente, suele ocurrir cuando no están bien sincronizados. La mejor forma es bajarte un programita y alterar la linea de tiempo. No entiendo la razón pero no he encontrado ninguna aplicación web que lo haga así que me he creado una clase en PHP para manipular los archivos .srt

<?php

class Subtitle {

    function Subtitle($srt) {
        $this->name = $srt;
        $this->file = @file_get_contents($srt);
    }

    function time($time=0) {
        $this->time = $time;
        $this->file = preg_replace('!([0-9:]{8}),([0-9]{3}) --> ([0-9:]{8}),([0-9]{3})!e',
                    '$this->sync("\\1").",\\2 --> ".$this->sync("\\3").",\\4"', $this->file);
    }

    function sync($time) {
        $time = strtotime($time);
        $time = $time+$this->time;
        return date('H:i:s', $time);
    }

    function save($name='') {
        if($name) $this->name = $name;
        $fp = @fopen($this->name, 'w');
        if(!$fp) return false;
        fwrite($fp, $this->file);
        fclose($fp);
        return true;
    }

}
?>

Su uso es muy fácil, solo tienes que pasar la ruta del archivo e indicar cuantos segundos quieres añadir o quitar, si quieres quitar solo tienes que poner el valor en negativo.

$subs = new Subtitle('subs.srt');
//añadir 5 segundos, quitar -5
$subs->time(5);
//si no le pasas un nuevo nombre reemplaza el archivo
$subs->save();

Lo único que hace es manipular los segundos, consiguiendo que puedas ir sincronizando poco a poco aquellos subtítulos que por cualquier razón no coinciden con el archivo de video bajado.


Novedades

Agregar a favoritos

8 Comentarios

Posteado hace 435 días en:

Muchas gracias a todo el mundo que me ha ayudado en la búsqueda del piso, he podido orientarme y encontrarlo, la verdad que los pisos en Madrid no son una gran maravilla, sobre todo lo que cuestan, pero es lo que tiene venir a la capital.

Durante estas semanas he podido disfrutar un poco de lo que es la ciudad, he ido a la presentación de los Premios de Bitacoras.com y saludar a mis amigos, me he acercado al MadinSpain una iniciativa de Domestika.org y el sabado me di una vuelta por la noche en blanco de Madrid.

Tengo muchas ganas de experimentar, ahora que por desgracia tengo mas horas libres de la cuenta me pondré a investigar sobre cosas que tengo en mente. Ya tengo preparado varios scripts, es cuestión de el subirlos al blog.


display:none no intrusivo

Agregar a favoritos

17 Comentarios

Posteado hace 590 días en:

Hay varias formas de ocultar información, cuando la cantidad es grande se suelen utilizar métodos como los acordeones o las pestañas, que ocultan las capas que no se quieren ver.

Normalmente utilizamos el evento onload para ocultar las capas, dejando un efecto visual de ahora te veo y ahora no te veo.

Para evitar este problema hay varias soluciones, aquí os dejo unas cuantas.

Escribir con document.write un style para ocultar una clase.

   document.writeln('<style type="text/css">.hide { display:none } </style>');

Añadir detrás de las capas el javascript necesario para ocultarlas

   <script type="text/javascript" charset="utf-8">
   $$('.hide').setStyle('display','none');
   </script>

Utilizar el evento domready de algunos frameworks que se dispara una vez cargado el DOM y no la página entera.

    window.addEvent('domready', function() {
$$('.hide').setStyle('display','none');
    });

Hay que decir que si el javascript no esta activado las capas no se ocultaran y estas podrán ser vistas sin ningún problema.


Botones encriptados de PayPal con PHP

Agregar a favoritos

9 Comentarios

Posteado hace 593 días en:

Estos días he estado ayudando aun amigo para hacer pagos con PayPal, gracias a este tutorial de Rails hemos podido crear una versión en PHP.

Para generar botones encriptados lo primero que tienes que hacer es crear unos certificados, una vez creados tendrás los datos necesarios para cumplimentar las opciones de la clase.

  $config = array(
        'cert_id' => 'xxx',
        'business' => 'seller_xx@xxx.es',
        'openssl' => '/usr/bin/openssl',
        'my_cert' => 'certificates/my-pubcert.pem',
        'my_key' => 'certificates/my-prvkey.pem',
        'paypal_cert' => 'certificates/paypal_cert.pem'
    );
    //iniciamos la clase
$paypal = new PayPal($config);

Luego hay que pasarles las variables necesarias para encriptar el botón, en la documentación de PayPal encuentras todas las variables.

$form = array(
    'cmd' => '_xclick',
     'item_name' => 't-shirt 13',
     'item_number' => '12',
    'amount' => '4500.00'
);

$encrypted = $paypal->encrypt($form);

Una vez encriptado solo tienes que rellenar los datos del formulario, el action y el campo hidden.

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick"/>
<input type="hidden" name="encrypted" value="<?PHP echo $encrypted; ?>"/>
<input type="submit" value="Buy"/>
</form>

Nos queda la parte del IPN (Instant Payment Notification) para saber si la transacción se ha ejecutado con éxito. Es curioso algunas tiendas envían el botón sin encriptar pero si hacen el IPN.

En la clase incluyo el ejemplo para que lo tengáis todo a mano, recordad que en el tutorial escrito en rails tenéis los pasos previos para crear los certificados.

Descargar class.paypal.php.


Window Growl con Mootools 1.2 Beta 2

Gracias a Paul Streise, alguien que no tiene web, ha dedicado parte de su tiempo a portar el código de Window.Growl a Mootools 1.2 Beta 2.

Sin duda Window.Growl y Packito son las dos joyas de esta casa y ambas las tengo un poco descuidadas, aun así tengo planes para actualizarlas pero gracias a Paul ya me he ahorrado el 50%.

Por mis refers he encontrado una versión en Prototype, esto quiere decir que hay versiones adaptadas para Mootools, jQuery y Prototype, nada mal.

Tengo que decir que tambien un usuario ha añadido mejoras a class.image y que pronto intentare postearlo.