sábado, 17 de enero de 2009

De .mov a .avi y Partir archivos .avi

Desde hace varios meses tenía que subir a internet unos videos de un viaje que hice. Logré subirlos casi todos, pero me topé con el problema de que youtube tiene dos restricciones sobre los archivos (a parte de las restricciones de formato): No pueden ser de más de 1GB y no pueden durar más de 10min. Y lamentablemente, algunos de los videos que tenía que subir, no cumplian con tales requisitos, por lo que tuve que posponer su subida hasta que encontrara una solución.

Nunca he sido muy diestro (porque nunca lo he necesitado) con lo que tiene que ver con multimedia, pero sí sé que hay muchos editores que podría haber usado en Windows (craqueados, por supuesto)... sin embargo, desde que migré completamente a GNU/Linux, me he empecinado en no tomar el sendero ancho (o sea en windows) sino en buscar una solución viable en el mundo del software libre.

Pasé un buen rato buscando, leyendo y probando, y finalmente encontré una solución con software libre en GNU/Linux: mencoder.

Pueden encontrar las instrucciones de partido de archivos avi en wikipedia y en este blog.

No sé si es que no tengo los codecs necesarios en mi máquina, pero no pude partir con esta herramienta archivos .mov, por lo que primero tuve que cambiarlos de formato. Eso lo logré así:
$ mencoder video.mov -o video.avi -ovc lavc -oac mp3lame

-ovc significa Output Video Codec y -oac es Output Audio Codec.

miércoles, 14 de enero de 2009

Carpetas compartidas en virtualbox

Ya llevo bastante rato trabajando con virtualbox, y he aprendido un montón de cosas interesantes, como la redirección de puertos TCP entre máquina huésped y máquina anfitrión, la manipulación remota de máquinas virtuales, etc.

La compartición de carpetas entre huésped y anfitrión es algo muy simple de configurar del lado de la máquina anfitrión (al menos con la interfaz gráfica por defecto), sin embargo, no es tan obvio del lado de la máquina huésped.

En el caso de un huésped windows xp, basta con seguir un par de indicaciones:
Se hace clic derecho en la opción Mis sitios de red del menú inicio (o donde sea que aparezca). Se elige la opción Conectar a unidad de red... del menú contextual. Se asigna una letra para la nueva unidad y se hace clic en explorar... . Luego, se despliega el grupo Virtualbox Shared Folders y se elige la deseada. Se acepta y ya.

Desde hace mucho tiempo me había propuesto averiguar cómo hacerlo con los GNU/Linux que tengo virtualizados, pero no me había quedado chance de hacerlo. Finalmente lo encontré:

Simplemente se monta como un sistema de archivos especial de virtualbox:
# mount -t vboxsf nombre_de_carpeta_compartida /punto/de/montaje
(Nota: para que exista el tipo de sistema de archivos vboxsf es necesario haber instalado los Guest Additions en el sistema huésped)

El nombre de la carpeta compartida es el nombre que se indica en la interfaz gráfica de virtualbox.

Yo pensaba que tenía que conectarse por samba... lo cual no domino todavía. Pero afortunadamente estaba equivocado. Luego explico lo de la redirección de puertos...

¿Cómo saber la distribución de GNU/Linux que se está usando?

Hace unos meses unos estudiantes me preguntaron cómo saber desde la consola, la distribución de linux en la que se está (es decir, cómo puede un programa, escrito en c, por ejemplo, saber en qué distribución está corriendo).

Supuse que debía haber una manera de saberlo, pero no la conocía, así que les dije que me imaginaba que podría ser una variable de entorno o algo así... ahora sé que no hay tal variable y en su lugar, se averigua ese dato y otros con el comando lsb_release.

El comando tiene varias opciones, y debo suponer que está relacionado con el LSB (Linux Standard Base). Las opciones específicas pueden consultarse, como es usual en los comanos unix, con la opcción --help.

Con la siguiente instrucción se obtiene información, primero, de los módulos lsb del sistema, y después, despliega el nombre de la distribución, el nombre completo, la versión y el nombre clave.

$ lsb_release -a

Al ejecutarlo en ubuntu 8.04 (conocido como Hardy Heron), aparece lo siguiente:
Distributor ID: Ubuntu
Description: Ubuntu 8.04.1
Release: 8.04
Codename: hardy

en openSuSE 10.3:
Distributor ID: SUSE LINUX
Description: openSUSE 10.3 (i586)
Release: 10.3
Codename: n/a

en Fedora 8:
Distributor ID: Fedora
Description: Fedora release 8 (Werewolf)
Release: 8
Codename: Werewolf

y en Knoppix 5.3:
Distributor ID: Debian
Description: Debian GNU/Linux lenny/sid
Release: lenny/sid
Codename: n/a

... no lo he probado en otras distribuciones, pero supongo que funciona en muchas... debido al LSB.

lunes, 12 de enero de 2009

Partir archivos grandes

Recuerdo cuando apareció el WinRAR (para windows)... una de las grandes novedades que traía era la opción de partir el archivo comprimido resultante en pedazos de tamaño configurable... lo cual fue una gran cosa en aquel tiempo, porque la mayoría de los servidores de correo electrónico sólo permitían archivos de 2MB.

Cuando me pasé a Linux no sabía cómo hacer eso... y la verdad ni siquiera entendía el modelo de funcionamiento de "los programas para comprimir" del mundo GNU... posteriormente entendí que esos programas no son más que Front-Ends para comandos de consola (principalmente para tar), pero seguí sin saber cómo partir los archivos.

Algún tiempo después, "descubrí" por casualidad el comando split (andaba buscando otra cosa). Este comando permite dividir un archivo arbitrario, por líneas o por bytes. Fue una gran alegría encontrarlo, ya que en ese mismo tiempo comencé a trabajar con máquinas virtuales (y sus discos duros son archivos bien grandes que necesitaba dividir para transportarlos). Pero inmediatamente después, me surgió la duda correspondiente: ¿Cómo unirlos después?

Bueno, seguí buscando y leyendo, y encontré que un comando que yo "conocía" de antaño era la respuesta: el comando cat.

El comando cat, concatena archivos y los despliega en la salida estándar. Entonces para unir los pedazos, se procede así:
$ cat pedazo-01 pedazo-02 ... > archivo-unido
El comando cat concatena los archivos pedazo-01, pedazo-02, etc. y con el redireccionador de flujo de salida del bash (>), la salida estándar de cat se redirige al archivo archivo-unido que obviamente será sobreescrito si ya existe.

Introducir el caracter EOF

Hay muchos comandos en linux que reciben su entrada de datos directamene de la entrada estándar (por ejemplo more, less, tail, grep, etc.), y su funcionamiento termina cuando encuentran el caracter de fin de archivo, típicamente conocido como EOF.

Cuando la entrada de estos comandos se redirecciona desde un archivo (con <) o desde otro comando a través de una tubería (con |), el funcionamiento es muy natural... pero ¿y si los queremos usar directamente con la entrada estándar??

Bueno, en ese caso el problema se resuelve a saber cómo introducir, con el teclado, el dichoso caracter de fin de archivo. Durante mucho tiempo, eso fue un misterio para mí, hasta que lo descubrí por casualidad en un manual de Python:

El caracter de fin de archivo se inserta en la terminal con la combinación Ctrl+D.

Primera entrada

Bien, finalmente me decidí a hacer otro blog, pero especializado en temas relacionados con GNU/Linux... y helo aquí.

Ciertamente no tengo mucho tiempo para hacer publicaciones demasiado elaboradas, así que trataré que sean concisas pero útiles.