Archivo por meses: enero 2008

FIC.tion por fin disponible

FIC.tion

Ha pasado casi un año desde que hablé aquí en Nand de FIC.tion, el pequeño y sencillo creador de aventuras conversacionales que había hecho como práctica de una asignatura. Ahora, y después de mucho tiempo en el olvido, le he hecho los retoques necesarios para ponerlo a disposición de todo el mundo. Como decía en su momento, no liberaré su código fuente (al menos por ahora) porque sigue en desarrollo, no es una proeza informática y (unido al primer motivo) es posible que lo use como base para mi Proyecto de Fin de Carrera. A pesar de ello, no tendré ningún problema en responder preguntas técnicas, aunque de algunos detalles de implementación ya ni me acuerdo xD

Los requisitos para hacerlo funcionar son:

  • Un PC con Linux. Sí, sigue sin haber versión Windows, lo siento 🙁
  • Un compilador y máquina virtual de Java, con la 1.6.0 de Sun sé que funciona.
  • Este paquete.

Una vez bajado el paquete no hay más que descomprimirlo en alguna parte haciendo algo del estilo tar -xvf Fiction_distributable.tar.gz. El fichero README incluído creo que esta bastante auto-explicativo, por si por si acaso…

* ./compile.sh tarde.sfl compila el juego de ejemplo incluído. El .java que genera va a parar al directorio java/
y es un fichero de código fuente normal y corriente que puede ser modificado y leído por un
humano.

* ./run.sh Tarde ejecuta el juego anteriormente compilado.

En otra entrada explicaré un poco cómo funciona el lenguaje que creé, De esta forma, alguien con curiosidad y algo de tiempo libre podrá disfrutar jugando a su propia aventura :]

ScummVM en tu iPhone/iPod touch

AVISO: El siguiente procedimiento implica hacer algunas guarrerías no soportadas por Apple. A pesar de que los creadores del AppSnapp afirman que lo peor que puede pasar es que tengas que restaurar el cacharro mediante iTunes, no me hago responsable de los posibles daños ocasionados. He dicho.

Tras la conferencia del MacWorld del pasado martes, se puso a disposición del público el nuevo firmware 1.1.3 para iPhone/iPod touch. Así que como fan de las actualizaciones, me la bajé enseguida. Con tal mala suerte que, por motivos desconocidos, iTunes no era capaz de instalarla. Por si fuera poco, mi iPod quedo enladrillado temporalmente: no podía actualizarlo, ni escuchar música ni nada de nada. Después de pelearme con él un buen rato, conseguí volver al firmware 1.1.1 y hacerlo funcionar. Y, como no hay mal que por bien no venga, aproveché para probar eso del jailbreak que en tantas partes había leído pero nunca había probado.

Pero, ¿qué es el jailbreak? Es el nombre que recibe la liberación de un iPhone/iPod touch de tal forma que escapamos de las ‘garras’ de Apple y el aparato pasa a ser algo más nuestro, es decir, podremos:

* Usar una tarjeta SIM de un operador distinto al contratado en el caso del iPhone.
* Modificar el aspecto (iconos, fondo, etc.) del interfaz.
* Usar las aplicaciones del iPhone que no vienen en el iPod touch (Mail, Maps, Stocks y Weather) sin tener que pagar los 20$ que Apple ha decidido cargar a los early-adopters como yo.
* Instalar aplicaciones de terceros (i.e. no de Apple), como por ejemplo ScummVM, que es el caso que nos ocupa.

iPhone ScummVM

Los pasos a seguir son los siguientes:

* Si tu iPhone/iPod touch ya tiene el firmware 1.1.1 (Ajustes – General – Acerca), pasa al punto 2.
* Si tu iPhone/iPod touch ya está jailbroken, pasa al punto 3.

1. Downgrade al firmware 1.1.1

Primero tendrás que bajarte el firmware 1.1.1 desde aquí. Una vez hecho esto, conecta al iPhone/iPod touch al ordenador. Si está encendido, apágalo. Ahora, enciéndelo pulsando a la vez el botón home y el botón superior. Cuando aparezca el logo de Apple, sólo deja pulsado el botón home. En teoría, debería de aparecer la pantalla pidiendo que lo conectes al ordenador y que abras iTunes (como la primera vez que lo enciendes). Ejecuta iTunes y en el menu de gestión del iPhone/iPod, haz click en restaurar pulsando a la vez Shift en el teclado. De esta forma podremos elegir el qué firmware instalar (el 1.1.1 en nuestro caso) navengando por el disco del ordenador.

itunes.png

2. Instalación de AppSnapp y jailbreak

Para hacer el jailbreak no hay más que entrar en el Safari del iPhone/iPod touch, ir a la URL http://www.jailbreakme.com y descargar AppSnapp. Pasados unos instantes y siguiendo las instrucciones en pantalla, aparecera un nuevo icono llamado Installer.

appsnapp.jpg

3. Instalación de ScummVM

Entrando en el Installer anteriormente citado, pulsamos en Install (fila de iconos inferior). Nos dirigimos a la categoría Games y ahí seleccionamos ScummVM. Ahora simplemente hay que pulsar en Install (arriba a la derecha). Una vez instalado, pulsamos el botón home, desbloqueamos el iPhone/iPod touch y veremos un nuevo icono relativo a ScummVM.

4. Copia de juegos al iPhone/iPod touch mediante scp

La mayoría de los tutoriales que tratan la gestión de archivos dentro de un iPhone/iPod touch usan WinSCP, así que yo no voy a ser menos. Imagino que mediante scp a pelo en Mac OS/Unix/Linux debería de funcionar igualmente. Para poder copiar cosas al iPhone/iPod touch, primero tendremos que instalar (de forma similar a como hicimos con ScummVM) los paquetes Community Sources, BSD Subsystem y OpenSSH. Hecho esto, ejecutamos WinSCP. En él, en el campo IP ponemos la IP de nuestro iPhone/iPod touch (Ajustes – Wi-Fi – icono (>) de la conexión en uso). Como usuario ponemos root, como contraseña alpine, marcamos el protocolo SCP y hacemos click en Conectar. Ahora simplemente tendremos que arrastrar las carpetas de los juegos que tengamos en nuestro disco duro (izquierda) al iPhone/iPod touch (derecha). Para que el aparato lleve bien la contabilidad del espacio libre, es recomendable copiar los archivos en /var/root/.

winscp.png

En el wiki oficial del port de ScummVM para iPhone/iPod touch hay una lista de compatibilidad indicando los juegos soportados y su ‘corrección’ al funcionar.

5. Jugar

Pulsando en el icono ScummVM de nuestro iPhone/iPod touch, entraremos en su menú principal. Para añadir un juego, no hay más que pulsar en Add Game y buscarlo entre los directorios. Hecho esto, se añadirá a la lista de juegos disponibles.

Los controles son los siguientes:

* Click izquierdo: un toque sobre la pantalla
* Click derecho: manten un dedo sobre el lugar donde quieres hacer click y da un toque con otro.
* Cursores: desliza un dedo a lo largo de la pantalla en la dirección deseada, sin usar ningún otro.
* ESC: mantén un dedo sobre la pantalla y toca dos veces con otro.
* F5 (menú de opciones): mantén un dedo sobre la pantalla y desliza otro de arriba a abajo.
* Teclas F: pulsa el número asociado en el teclado mostrado en pantalla. Es decir, si quieres pulsar F9, pulsa la tecla 9 (obviamente sólo funcionan las teclas F1 a F9).
* Pausa: barra espaciadora del teclado en pantalla.
* (Des)Activar el modo Click+Drag: mantén un dedo sobre la pantalla y desliza otro de abajo a arriba. En este modo los clicks son enviados inmediatamente cuando tocas la pantalla, arrastra a donde deslices el dedo y ‘suelta’ cuando lo retiras. Si usas otro dedo en este modo, es como si soltases el botón izquierdo del ratón y pulsases el derecho.
* Suspender: pulsa el botón home.
* Salir: pulsa el botón home durante unos 5 segundos.

Conversión de vídeos para iPod en Debian

Atención porque empieza, lo que seguro será, una larga serie de tutoriales dedicados a productos de la manzanita. ¿Por qué? Arxel ya presumía de su iPod Touch y yo tengo en mis manos un iPod Classic (si es que no me lo merezco). Como nos gusta comentar y compartir aquellas cosas que vamos aprendiendo y nos resultan útiles, —y sobre todo que hayamos probado por nosotros mismos— aquí nos tendréis dándoos la vara.

Me centraré, en este post, exclusivamente en el iPod Classic, que es el que tengo. Para el iPod Nano nhttp://nand-magazine.net/2008/01/02/conversion-de-videos-para-ipod-en-debian/#comment-4877o varía. En cuanto al iPod Touch, le pediremos a Arxel que nos haga una guía 😉

Vídeo en el iPod

The IT Crowd on iPod Classic
Los modelos de iPod que reproducen vídeo (desde los de quinta generación) soportan dos códecs de vídeo: H.264 y MPEG-4 en tres tipos de contenedores (o formatos): .m4v, .mp4 y .mov. Muchos de los vídeos que nos encontramos por la red o series y películas que nos descargarmos están en .avi y comprimidos con DivX o XviD, lo que implica que tenemos que convertirlos al formato adecuado para que el iPod los pueda reproducir.

NOTA: técnicamente, el iPod soporta XviD, pero no es lo más recomendable (por calidad, sobre todo). Así que nos centraremos en los otros dos códecs de vídeo.

El formato de audio también es un tanto especial. No es el popular MP3, sino AAC (ojo, que es incluso algo mejor que el primero).

En resumen, los vídeos que vayan a ir a nuestro iPod deben cumplir las siguientes condiciones:

  • Vídeo: H.264 ó MPEG-4
  • Audio: AAC

Hay que tener en cuenta ciertas limitaciones en cuanto a audio y vídeo. Si nos pasamos, puede que el iPod no reproduzca el vídeo o el sonido:

  • Vídeo
    • H.264: hasta 768 kbps, 320×240, 30 fotogramas por segundo (fps), perfil de línea de base hasta el Nivel 1.3.
    • H.264: hasta 1.5 Mbps, 640×480, 30 fps, perfil de línea de base de baja complejidad
    • MPEG-4: hasta 2,5 Mb/s, 640×480, 30 fps, Perfil simple.
  • Audio: hasta 160 kb/s, 48000 Hz y audio estéreo

Con lo cual sería tontería codificar un vídeo a más de 30 fotogramas por segundo, con 192 kb/s de audio y a una resolución de 800×600. El iPod lo truncará a su límite. Así que está bien tener estas limitaciones en cuenta porque podemos usarlas para conseguir vídeos de tamaño mucho menor o sencillamente optimizados.

ffmpeg: el conversor

En GNU/Linux tenemos una auténtica navaja suiza. El ffmpeg nos deja hacer de todo (en lo que a vídeo se refiere). Aunque tenemos dos problemas: se usa por consola (¿esto es un problema?) y los paquetes para Debian no están compilados con soporte para AAC, XviD o H.264 [ Aviso para usuarios de Debian lenny: El paquete de ffmpeg para Debian lenny tiene habilitado este soporte, así que bastará con que instaléis el binario vía apt o aptitude ]. ¿Qué significa esto? Que no podemos usarlo —tal como viene— para convertir nuestros vídeos a “formato iPod”. ¿Entonces qué hacemos? ¿No hay más opciones? Podríamos usar el mencoder (que es del estilo de ffmpeg, pero a mí no me gusta tanto :-P) o pasarnos a otro sistema operativo (¡NOOOO!). Debo confesar que estuve haciendo pruebas de conversiones en un Windows con un programa gratuito y bastante sencillo llamado Videora, pero me desesperó, así que me volví a mi Debian y me dije: “Vamos a compilar ffmpeg”.

Compilando ffmpeg con soporte para H.264, AAC, XviD…

Espero que nadie se haya asustado al escuchar la palabra “compilar”. En realidad no es ninguna experiencia traumática. Fue más sencillo de lo que esperaba. Venga, comencemos.

Necesitamos el código fuente del ffmpeg que descargaremos vía subversion para hacernos con la última versión. (Para instalar subversion: #apt-get install subversion). Nos situamos en el directorio donde almacenaremos el código y lo descargamos tal que así: svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg. Tendremos una carpeta llamada ffmpeg con un montón de archivos y directorios.

Antes de seguir, tenemos que instalar las siguientes bibliotecas y el compilador de C:

#apt-get install liblame-dev libfaad2-dev libfaac-dev libxvidcore4-dev libvorbis-dev liba52-dev libdc1394-dev libgsm-dev libx264-dev gcc

Ahora, y dentro del directorio de ffmpeg, configuraremos el archivo configure (valga la redundancia):

./configure --enable-gpl --enable-pp --enable-libvorbis --enable-liba52 --enable-libdc1394 --enable-libgsm --disable-debug --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-libxvid --enable-pthreads --enable-libx264

Ejecutamos el archivo Makefile: $make.

E instalamos: #make install.

Después de un rato, si todo ha ido bien, tendremos el binario en la carpeta /usr/local/bin (salvo que configurárais otra ruta manualmente).

Podemos hacer una prueba para comprobar si se ha compilado con soporte para los codecs que nos interesan. Así que ejecutáis ffmpeg sin parámetros y buscáis en las primeras líneas enable-biblioteca. Yo obtengo esta salida:

tempwin@debianbox:~/packages/ffmpeg$ ffmpeg
FFmpeg version SVN-r11352, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-pp --enable-libvorbis --enable-liba52 --enable-libdc1394 --enable-libgsm --disable-debug --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-libxvid --enable-pthreads --enable-libx264
  libavutil version: 49.6.0
  libavcodec version: 51.49.0
  libavformat version: 52.3.0
  built on Dec 29 2007 22:55:01, gcc: 4.2.3 20071123 (prerelease) (Debian 4.2.2-4)
usage: ffmpeg [[infile options] -i infile]... {[outfile options] outfile}...
Hyper fast Audio and Video encoder

H.264 vs MPEG-4

Por si alguien lo había notado, instalamos la biblioteca libx264 y no libh264. ¿Por qué? Bueno, libh264 no existe 😛 El códec X.264 es una implementación libre de la especificación del códec H.264, por ello es la que se usa en sistemas GNU/Linux.

Lo bueno que tiene H.264 frente a MPEG-4 es que consigue vídeos de alta calidad con tamaños menores que MPEG-4. Pero tiene inconvenientes. Es bastante lento y hace un uso más intensivo de la CPU. Esto se traduce en más horas de transcodificación. Además, los parámetros que hay que pasarle a ffmpeg son muchos más pues hay que controlar más aspectos. Eso sí, se nota en el resultado. Para vídeos de resoluciones grandes (más de 640×480), es mejor MPEG-4. En los ejemplos de este post usaremos ambos. Cambiar entre uno y otro es muy sencillo, así hacéis pruebas y os quedáis con el que más os convenza.

Convirtiendo vídeos a formato iPod

Desde luego es más corto decir “formato iPod” que vídeo codificado usando H.264 ó MPEG-4 con sonido comprimido en AAC 😛

Yo uso ffmpeg con los siguientes parámetros:

MPEG-4

No lo he probado a fondo porque casi no lo uso.

ffmpeg -i video_origen.avi -f mp4 -vcodec mpeg4  -b 768kb -qmin 3 -qmax 5 -bufsize 1M -acodec libfaac -ab 96kb -s 320x240 -aspect 4:3 -title "Título del vídeo" video_resultante.mp4

Sobre la resolución (-s) y la proporción (-aspect), lee el final del post (importante).

MPEG-4 Panorámico

Cuando el vídeo original tiene un aspecto 16:9. Cambiamos la resolución (-s) a 320×192 (después de muchas pruebas, he resuelto que es la mejor para el iPod, en cuanto a vídeos panorámicos se refiere) y el aspecto (-aspect) a 16:9. A veces, indicar el aspecto no es necesario, tan sólo la resolución.

ffmpeg -i video_origen.avi -f mp4 -vcodec mpeg4  -b 768kb -qmin 3 -qmax 5 -bufsize 1M -acodec libfaac -ab 96kb -s 320x192 -aspect 16:9 -title "Título del vídeo" video_resultante.avi.mp4

H.264

Es el que suelo usar. En dos pases (tarda más, pero el resultado es muchísimo mejor).

ffmpeg -y -i video_origen.avi.avi -an -v 1 -threads auto -vcodec libx264 -b 256k -bt 175k -refs 1 -loop 1 -deblockalpha 0 -deblockbeta 0 -parti4x4 1 -partp8x8 1 -me full -subq 1 -me_range 21 -chroma 1 -slice 2 -bf 0 -level 30 -g 300 -keyint_min 30 -sc_threshold 40 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.7 -qmax 51 -qdiff 4 -i_qfactor 0.71428572 -maxrate 768k -bufsize 2M -cmp 1 -s 320x240 -aspect 4:3 -f mp4 -pass 1 /dev/null

Segunda pasada:

ffmpeg -y -i input_file.avi -v 1 -threads auto -vcodec libx264 -b 256k -bt 175k -refs 1 -loop 1 -deblockalpha 0 -deblockbeta 0 -parti4x4 1 -partp8x8 1 -me full -subq 6 -me_range 21 -chroma 1 -slice 2 -bf 0 -level 30 -g 300 -keyint_min 30 -sc_threshold 40 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.7 -qmax 51 -qdiff 4 -i_qfactor 0.71428572 -maxrate 768k -bufsize 2M -cmp 1 -s 320x240 -aspect 4:3 -acodec libfaac -ab 96k -ar 44100 -ac 2 -f mp4 -pass 2 -title "Título del vídeo" video_resultante.mp4

H.264 Panorámico

Igual que con MPEG-4: Cambiamos la resolución por 320×192 y el aspecto por 16:9

Algunas consideraciones

Es importante conocer las propiedades del vídeo original antes de hacer la conversión. Si la fuente original tiene una calidad de audio muy pobre, pocos fotogramas por segundo y un bitrate bajo, de nada va a servir que aumentemos la calidad pues como mucho tendrá la misma que el original. A lo que me refiero es a si, en el vídeo original, el audio fue grabado a 64k, es tontería pasarle, a la hora de convertirlo, 96k. Sin embargo, al revés podemos usarlo para hacer una conversión perfecta y/o más comprimida.

Podéis mejorar la calidad del sonido (-ab), así como la frecuencia de muestreo (-ar), dándole valores más elevados. En los ejemplos está puesto a 96k y se escucha muy bien. Más calidad se traduce en más tamaño, así que tenedlo en cuenta. Lo mismo podéis hacer con la calidad del vídeo (argumento -b). Os recuerdo que todo esto teniendo presente las limitaciones del vídeo original.

Si queréis optimizar vuestros vídeos para que puedan verse con buena calidad en una televisión, ajustad la resolución a 640×480 y el bitrate de media (-b) a 500k.

Proporciones de pantallaPara que los vídeos en formato panorámico se vean bien en el iPod hay que ir al menú VídeosAjustesAjustar a pantalla y desactivar esta opción, de lo contrario, el iPod trataría de ajustar el vídeo para que ocupe todo el ancho y la altura de la pantalla posible, traduciéndose en imágenes alargadas y estrechas. Echando un vistazo a la imagen de la derecha, tenéis un ejemplo de lo os digo.

Para los vídeos que tengan una resolución panorámica, pero no sigan ningún estándar (16:9, 2.39:1, 1.85:1, etc.), deberemos ajustar la altura a la medida óptima y que sea divisible por 16. A la anchura no tenemos que hacerle nada porque 320 es divisible por 16 (es decir, su resto es 0). Un ejemplo: Si el vídeo original es de 608×256, le correspondería una resolución de 320×134 (basta hacer una regla de tres), pero 134 no es divisible por 16. El valor más cercano, divisible por 16, por abajo sería 128, y por arriba 144. No son demasiados píxeles de diferencia, así que recomiendo coger el valor más alto (las bandas negras serán más finas). Ah, ¿que por qué el capricho de que tenga que ser divisible por 16? El códec comprime el vídeo bloques de 16×16 píxeles. Podrías indicarle una altura que no fuera divisible por este número, pero la compresión afectaría más a la calidad.

Según la versión de ffmpeg que tengas, para indicar el códec de vídeo y audio a usar, puede variar el nombre. En la versión que tengo yo para usar el códec AAC, lo indico con -acodec libfaac; pero he visto otra versiones en las que basta con -acodec aac. Lo mismo pasa con -vcodec libx264; hay versiones que es tan sencillo como -vcodec h264. Sabréis cuál usar si al escribirlas, os devuelve un error del tipo Unknown encoder 'aac' o Unknown enconder 'h264'.

Los valores de vídeo y audio son también válidos para el iPod Nano, pues también tiene la misma resolución de pantalla que el Classic.

Sobre las relaciones de aspecto (o proporciones), es importante conocerlas para obtener vídeos lo más fieles al original (acordaos de la divisibilidad por 16):

  • 4:3 (TV): 320×240
  • 16:9 (TV panorámica): 320×176, 320×192
  • 1.85:1 (Panorámica estándar): 320×160, 320×176
  • 2.39:1 (CinemaScope o Panavision): 320×128, 320×144

Para acabar, unos datos para que veáis los resultados:

  • Vídeo Original
    • Audio: VBR MP3, 128kbps, 48000Hz
    • Vídeo: 608×256, 25 fps, DivX 5, 1hh:45mm:48ss
    • Tamaño: 699,8MB
  • Vídeo iPod
    • Audio: AAC, 128kbps, 48000 Hz
    • Vídeo: 320×144, 25 fps, H264
    • Tamaño: 282,0 MB

Lo sé. Un artículo denso y mal estructurado porque sigo añadiendo cosas según hago avances. De todos modos, la idea es reunir todo tipo de información sobre la codificación de vídeos para el iPod. ¡Que aproveche!