miércoles, 16 de enero de 2008

Comprimir videos a 3GP o MP4 para equipos móviles (Celular, PSP, IPod y otros)

Después de buscar y probar muchos programas para "transformar" (comprimir) videos a 3GP o MP4, he llegado a la conclusión de que por lejos el mejor de todos es SUPER © de eRightSoft. A continuación explico un poco como usarlo.

Lo primero es bajar el programa desde esta pagina donde el link de descarga nos llevara a otra y otra pagina antes de poder bajar el programa (el autor seguramente lo hizo para marcar varios hits y ganar algo de dinero con la publicidad), es un poco latoso pero el programa lo vale.

Cuando ya tenemos el programa instalado, lo ejecutamos y veremos una ventana así:

Super01

Para el ejemplo, lo que voy a hacer es convertir un video en formato FLV (que bajé de YouTube) a formato 3GP para ponerlo en mi K550, así que lo primero que hago es seleccionar como formato de salida el 3GP. Si tu quieres un video para un IPod, PSP, DS o incluso una imagen GIF para usar de avatar, seleccionas la opción que corresponde.

Super02

Automáticamente se harán algunos ajustes en el programa, vemos que el codec de video es MPEG-4 y el de audio es AAC. Además es muy recomendable marcar la opción DirectShow Decode para asegurarnos de que podremos usar cualquier tipo de video como origen.

Super03

Ahora selecciono la escala del video (tamaño en pixeles) y la relación de aspecto, esto depende del equipo donde se vaya a reproducir el video, para mi K550 elijo 176x144, aunque también podría ser 220x176 y como relación de aspecto 4:3.

Super04

La cantidad de cuadros por segundo también depende del equipo, para un celular con 15 estaría bien...

Super05

Pero yo prefiero ponerle 20 para que quede una animación un poco mas suave. Como en la lista no aparece 20, selecciono More y escribo 20.

Super06

El bitrate o nivel de compresión por defecto son 144 (kbps) lo que no es malo, pero para mejor calidad podría ser 240 o incluso podrías poner 1200... si 1200 y no creas que te va quedar un video gigantesco ya que el compresor interno (en este caso FFmpeg) es lo suficientemente inteligente como para no asignar mas bitrate del necesario. Entonces si quieres la máxima calidad puedes poner 1200 sin temor a que el resultado sea un video exageradamente pesado. La opción Hi Quality no se exactamente que hace, pero la dejo marcada, y la opción Top Quality yo no la activo (por las pruebas que he hecho a veces se gana o se pierde calidad y tamaño).

Super07

En el audio, la frecuencia de muestreo por defecto es 22050 pero yo la subo a 44100 (si tienes un oído exigente notaras la diferencia). La cantidad de canales depende de si vas a escuchar con audifonos o parlantes estéreo (2) o si solo escucharas con el altavoz (1) del celular.

Super08

El bitrate de audio por defecto es 48, pero (en mi opinión) lo mínimo aceptable es 96, si vas a escuchar con audifonos tendría que ser 128. La otra opción no se aplica al formato 3GP así que no la tocamos.

Super09

A continuación, en la sección Output podemos ver un resumen de la configuración.

Super10

Teniendo la configuración lista, vamos a agregar el o los videos que queremos convertir, para eso hacemos click derecho en algún lugar de la ventana y seleccionamos Add Multimedia File(s).

Super11

Y abrimos el o los videos.

Super12

Teniendo el video cargado y seleccionado en el programa, hacemos click en el botón Encode (Active Files) y esperamos unos minutos a que se complete el proceso...

Super13

... y ya tenemos listo el video en formato 3GP para colocarlo en el equipo (celular en mi caso).

Para que se hagan una idea, el video de prueba tiene una duración de 4 minutos 44 segundos (4:44) y al comprimirlo con la configuración que indiqué, queda pesando 8,97Mb.

A los usuarios avanzados quizás les interese saber que este programa es un GUI de FFmpeg y MEncoder entre otros, y lo que acabamos de hacer se resume en una simple línea de comando:

ffmpeg -y -i "ARCHIVO ORIGEN" -bitexact -vcodec mpeg4 -fixaspect -s 176:144 -aspect 4:3 -r 20 -b 240k -g 15 -hq -trell -maxrate 240k -bufsize 450k -acodec aac -ac 2 -ar 22050 -ab 96k -f 3gp "ARCHIVO DESTINO"
Y el resultado...

Super15


Ahh que es linda Amy Lee, me recuerda a...

lunes, 24 de diciembre de 2007

MySQL lento, demora al conectar (unauthenticated user)

Uhhh mucho tiempo que no escribía nada... por falta de tiempo y porque no tenia ganas.

 

Hace un tiempo tuve un problema con MySQL que me quitó el sueño varios días porque no encontré ayuda fácilmente (seguramente estaba buscando mal).

 

Un programa que yo hice (que trabaja con una base de datos MySQL), algunas veces demoraba entre 2 y 30 segundos en completar las consultas a la base de datos... después de hacer cambios en el equipo servidor, programa, red, equipos cliente el problema continuaba; incluso había días en que la demora se producía pocas veces y era muy corta y otros días era muy frecuente. Ni se imaginan la vergüenza que me daba al ver que mi programa "se quedaba pegado".

 

mysql> show processlist; ¡¡¡Eso es lo primero que debería haber hecho!!!. Cuando se producía la demora, se podía ver en la lista de procesos, una o varias líneas que como usuario ponía: "unauthenticated user"... esa fue la palabra mágica que me ayudo a encontrar el problema y la solución.

 

Cuando un usuario se conecta, MySQL además de comprobar el nombre de usuario y la contraseña también comprueba el host, osea, resuelve a través del servicio DNS (ya sea local o remoto) la IP y/o dominio desde donde se realiza la conexión... es aquí donde se produce el problema: si el servicio DNS no responde con la rapidez necesaria (algo muy común) se retrasa el login y todo lo demás (consulta, ejecución o lo que sea que se quiera hacer en el servidor).

 

Para evitar este problema (la "incompetencia" del servicio DNS) simplemente le decimos a MySQL que NO intente resolver IP y/o dominio, para esto agregamos "skip-name-resolve" al archivo de configuración de MySQL (/etc/mysql/my.cnf) o lanzamos el servicio mysqld con la opción --skip-name-resolve.

 

Es importante mencionar que solo se podrán usar IPs como host de usuarios.

 

Ahí por fin pude demostrarle al cliente que mis programas y un servidor Linux con MySQL son una maravilla jajaja...

 

Aquí hay mas información sobre como "tunear" MySQL:

How To: Optimize MySQL response time

10 tips para Optimizar consultas MySQL

Porqué MySQL es lento con grandes tablas?

miércoles, 30 de mayo de 2007

Jugando con la Navbar 4 (ocultar/mostrar con Scriptaculous)

Con los experimentos anteriores, se me ocurrió una manera mucho mas elegante para ocultar y mostrar la Navbar, usando dos Framework de JavaScript: Scriptaculous y Prototype.

Se deben agregar dos eventos al div del Navbar: MouseOver para detectar la presencia del mouse sobre (over) la Navbar, y MouseOut para detectar el momento en que el mouse se mueve fuera (out) del div de la Navbar. Estos dos eventos haran aparecer y desaparecer gradualmente la Navbar, quedando mas o menos así...


acerca el mouse aquí abajo para que aparezca la imagen y alejalo para que desaparezca.



El código para hacer esto con la Navbar, es el siguiente:

function navbarShow() {
new Effect.Opacity('navbar-iframe', {duration:0.5, from:0.0, to:1.0});
}

function navbarHide() {
new Effect.Opacity('navbar-iframe', {duration:0.5, from:1.0, to:0.0});
}

function navbarHack() {
Event.observe('navbar-iframe', 'mouseover', navbarShow, false);
Event.observe('navbar-iframe', 'mouseout', navbarHide, false);
navbarHide();
}

Event.observe(window, 'load', navbarHack, false);


Aqui hay dos instrucciones clave: La Event.observe(ELEMENTO, EVENTO, ACCION, false) de Prototype, asigna la funcion ACCION al evento EVENTO del elemento u objeto ELEMENTO, osea cuando ocurra el EVENTO de ELEMENTO se ejecutará ACCION; y la Effect.Opacity(ELEMENTO, PARAMETROS) de Scriptaculous, que hace un fade o transformación gradual desde (from) un nivel de opacidad hasta (to) otro en un tiempo determinado (duration); la opacidad 1.0 significa 100% visible y 0.0 significa 0% visible, podrias cambiar el 1.0 por 0.5 para tener la Navbar semi-translúcida o lo dejas en 1.0 y agregas el codigo CSS que hay en Jugando con la Navbar 2 (opacidad); con respecto a la duración (duration) del efecto, se mide en segundos, osea ese 0.5 significa medio segundo.

Si no entendiste nada te lo doy fácil...

En el "panel" de tu blog vas a "Plantilla" y luego a "Edición HTML" y, en el recuadro donde esta el código de tu plantilla buscas la linea que dice "</head>" (casi al final) y, agregas el siguiente código justo arriba de esa linea (sin borrarla obviamente):

<script src='http://wiki.script.aculo.us/javascripts/prototype.js' type='text/javascript'/>
<script src='http://wiki.script.aculo.us/javascripts/scriptaculous.js?load=effects' type='text/javascript'/>

<script type='text/javascript'>
function navbarShow() {
new Effect.Opacity('navbar-iframe', {duration:0.5, from:0.0, to:1.0});
}

function navbarHide() {
new Effect.Opacity('navbar-iframe', {duration:0.5, from:1.0, to:0.0});
}

function navbarHack() {
Event.observe('navbar-iframe', 'mouseover', navbarShow, false);
Event.observe('navbar-iframe', 'mouseout', navbarHide, false);
navbarHide();
}

Event.observe(window, 'load', navbarHack, false);
</script>


Has una "Vista Previa" y si esta todo bien guardas los cambios.

Viene desde: Jugando con la Navbar 3 (ocultar/mostrar)