domingo, 21 de marzo de 2010

Codificación de audio en formato MP3 (y II)

Recientemente hablaba de la codificación de audio digital en formato MP3 y citaba la aplicación Conversor de sonido como una solución ideal para sistemas Linux. Pues no ha durado mucho el idilio; parece ser que presenta ciertos problemas a la hora de convertir a MP3 debido a que "por debajo" utiliza GStreamer como intermediario en lugar de usar LAME directamente y los desarrolladores de GStreamer se han tomado ciertas libertades respecto a los parámetros de codificación que acaban afectando a la calidad. Un buen ejemplo de las desventajas de usar tantas capas software (frameworks, wrappers, etc.) en los sistemas operativos modernos. Como la otra opción que planteaba (invocar directamente al programa lame en la consola) presenta ciertas limitaciones, he programado un shell script que facilite las cosas: milame permite codificar lotes de archivos WAV o FLAC (de estos últimos traspasa los metadatos) eligiendo la calidad entre tres disponibles. Por defecto usa la calidad V3 y no aplica la corrección ReplayGain, ya que esta es la configuración que más utilizo para que mis recopilaciones queden justo por debajo de 100 MB y con el volumen que haya ajustado manualmente. En cualquier caso, puede editarse fácilmente para adaptarlo a otras preferencias: correcciones, sugerencias y/o mejoras serán bienvenidas ;-)

miércoles, 17 de marzo de 2010

GRUBack: recuperando GRUB desde Windows

Una situación con la que nos hemos encontrado todos los que utilizamos sistemas Windows y Linux sobre un mismo PC es perder el menú de arranque de GRUB después de reinstalar Windows (o instalar uno nuevo como Windows 7).

Este problema se debe a que el proceso de instalación de Windows siempre escribe en el MBR (o registro de arranque principal) del disco duro un código de arranque estándar para asegurarse de que la secuencia de arranque sea la correcta para cargar el sistema instalado. Lo malo es que antes de ello no comprueba si en el MBR se encontraba instalado algún programa de arranque no estándar, por ejemplo el de GRUB, que resultará "machacado" en el proceso. Esto hará que Windows se arranque directamente, ya que el código de arranque estándar escrito en el MBR le cederá el control al programa alojado en el VBR (o registro de arranque del volumen) de la partición activa (la de Windows) y este a su vez se encargará finalmente de ejecutar el cargador de Windows (NTLDR hasta que en Windows Vista se cambió por BOOTMGR).

La forma de recuperar el menú de arranque de GRUB (necesario para elegir qué sistema operativo cargar), aunque no es demasiado complicada, sí que requiere ciertos conocimientos técnicos e implica arrancar el PC con una distribución live CD de Linux (a ser posible la misma que haya instalada en disco) y luego utilizar desde una consola de este las herramientas del propio GRUB para volver a instalar su código máquina especial en el MBR.

Recientemente tuve que hacerlo una vez más y pensé que quizá ya habría en algún lugar de internet una herramienta que permita recuperar el menú de GRUB cómodamente sin salir de Windows. Tras varias búsquedas sin éxito llegué a la conclusión de que quizá aun no se le había ocurrido a nadie programarla o que sencillamente no sea algo prioritario para la gente del propio proyecto GRUB o del "planeta Linux", ya que cualquier usuario avanzado puede recuperar GRUB en cuestión de minutos mediante el procedimiento habitual citado más arriba. Sin embargo le seguí dando vueltas al asunto y finalmente me puse manos a la obra para implementar mi propia solución al problema.

He utilizado un script para Windows (quizá sea más correcto llamarlo archivo BATCH) que invoca a una serie de herramientas de consola para realizar cirujía de reconstrucción en el MBR de modo que quede lo más parecido al que supuestamente había antes de que la instalación de Windows lo "desfigurara". Lo he probado con éxito en Windows XP, Windows Vista y Windows 7 para las dos versiones de GRUB más usadas en los últimos años (GRUB Legacy y GRUB, conocido hasta hace poco como GRUB 2). Como recientemente he añadido diversas comprobaciones extras y la posibilidad de crear un disquete de rescate "por si algo va mal y el PC no arranca" creo que ya podría compartirlo con el prójimo (por supuesto sin ningún tipo de garantía ni responsabilidad sobre su uso ;) Lo he llamado GRUBack y tengo el gusto de presentar su primera versión Beta. Espero que sea de utilidad...


NOTA: existe una versión más reciente de GRUBack que soporta Ubuntu 11.04 y que debería usarse en cualquier caso...

miércoles, 10 de marzo de 2010

Programación de la shell

Otro día comentaba ciertas ventajas que proporciona el usar una interfaz de línea de comandos, haciendo hincapié en el arsenal de herramientas disponibles para solucionar todo tipo de problemas, que en caso de usar Linux vienen en su mayoría de fábrica. Pero el verdadero potencial de una shell tradicional frente a una gráfica está relacionado con el hecho de que la primera puede programarse.

Por ejemplo, bash, la shell de GNU incluida en la mayoría de distribuciones Linux, soporta toda una colección de comandos internos que permiten definir y evaluar variables, comprobar condiciones, realizar bucles y, en medio de todo, ejecutar comandos externos o cualquier programa de consola. Esto hace posible el uso de los llamados shell scripts o "guiones de la shell", que no son sino archivos de texto que contienen listas de comandos a ejecutar, pudiendo ir desde una simple secuencia de dos o tres comandos hasta auténticos programas que serán interpretados por la shell para realizar tareas complejas. Además existe la posibilidad (heredada del viejo UNIX) de combinar las numerosas utilidades especializadas de consola con ciertos mecanismos de la shell como el redireccionamiento de E/S y las tuberías, que junto a las estructuras de control mencionadas permiten al usuario construirse sus propios programas para resolver nuevos problemas o automatizar todo tipo de tareas. Un símil válido para describir esta situación: sería como tener una colección de piezas de mecano o módulos básicos ya construidos (los comandos y utilidades de consola) y los tornillos, tuercas y demás mecanismos (proporcionados por la shell) para poder combinarlos y obtener así nuevas máquinas (o piezas) útiles hechas a medida.

Aunque recientemente compartía un shell script para automatizar descargas desde RapidShare que podría servir para ilustrar la idea, incluiré otro más sencillo como ejemplo. Se trata de cambiar puntos por comas en las líneas de temporización de un archivo de subtítulos .SRT (para hacerlo compatible con cierto reproductor de vídeo):

#!/bin/bash
# ^- Indica qué shell debe interpretar el script

archivo="$1"
# ^- Asigna a la variable 'archivo' el primer parámetro
# pasado desde línea de comandos (el archivo .SRT)

numlin=`wc -l $archivo | cut -d' ' -f1`
# ^- Averigua el nº de lineas del archivo combinando
# comandos y lo almacena en variable 'numlin'

echo -e "\nReparando archivo $archivo de $numlin lineas:"
# ^- Mensaje por pantalla indicando lo que va a hacerse

cat /dev/null > rep$archivo
# ^- Creamos un nuevo archivo vacío donde iremos guardando
# los subtitulos reparados en el bucle siguiente

pinta=1
# ^- Inicializamos un contador de lineas

while read linea; do
# ^- Bucle "mientras haya lineas que leer..."

if echo $linea | grep -q ^0[0-9]:
then echo $linea | tr . , >> rep$archivo
# ^- Si la linea actual tiene este aspecto cambiamos
# los puntos por comas
else echo $linea >> rep$archivo
# ^- Si no la guardamos tal y como estaba
fi

pinta=$((contador % 10))
# ^- Calculamos el resto de la división entre 10 del
# nº de lineas

if [ "$pinta" -eq "0" ]
then echo -e ".\c"
fi
# ^- Si el resto es 0 (cada 10 lineas) pintamos un
# punto a modo de barra de progreso

contador=$((contador + 1))
# ^- Incrementamos el contador de lineas

done < $archivo # "... en el archivo de marras" echo -e "\nGenerado archivo rep$archivo\n" # ^- Mensaje final indicando el archivo creado

Típico ejemplo de shell script creado sobre la marcha para resolver un problema específico; en este caso había que automatizar la conversión de ciertos caracteres en ciertas líneas de un archivo de texto. Por supuesto, en Internet tenemos montones de shell scripts listos para usar o para examinar y aprender como hacer los nuestros. Y en nuestro propio sistema Linux podemos obtener una lista de shell scripts instalados ejecutando desde consola la siguiente línea:

IFS=':';for dir in $PATH;do file $dir/*|grep shell;done

Por último el material de referencia imprescindible para aprender a sacar partido de bash:
Ahora solo es cuestión de ponerse manos a la obra cuando se nos presente (o se nos ocurra) algún problema informático. Próximamente compartiré el penúltimo shell script que he escrito para salvar y restaurar metadatos de los archivos de audio.

miércoles, 3 de marzo de 2010

Codificación de audio en formato Vorbis

Hace poco comentaba la popularidad del formato MP3 a la hora de intercambiar audio digitalizado que ocupe poco espacio sin perder demasiada calidad. También mencionaba el hecho de que desde hace años existen otros codecs superiores tecnológicamente aunque no han tenido tanta suerte. Entre ellos destaca Vorbis (no confundir con Ogg, que aunque es el contenedor habitual puede contener vídeo y otras codificaciones de audio). Es uno de los proyectos de la Fundación Xiph.org, dedicada a proteger los contenidos multimedia difundidos a través de Internet de los intereses privados y el control de las corporaciones. Vorbis, además de ser una tecnología abierta libre de patentes (al contrario que MP3) y en continua evolución, destaca en el aspecto técnico por diversos motivos, aunque podría resumirse en la ventaja práctica de lograr una mayor calidad a igual tamaño de archivo. Se considera un mejor sistema de codificación de audio con pérdida frente a otros conocidos como MP3, WMA o AAC para tasas de bits bajas y medias, y está en general entre los mejores en las pruebas realizadas consiguiendo la transparencia con tasas de bits menores que MP3.

A la hora de reproducir audio en formato Vorbis, podemos encontrar algún problema en ciertos reproductores portátiles centrados en MP3 y WMA, aunque cada vez el soporte es mayor. En cuanto a los reproductores software, la mayoría (y todos los mejores ;) lo soporta n de forma nativa o mediante el uso de plug-ins.

Para convertir audio a este formato tenemos distintas soluciones:
  • En Windows lo más práctico puede ser recurrir a oggdropXPd, que mediante un sencillo arrastrar y soltar nos permitirá codificar nuestros archivos de audio (en formatos sin perdida como WAV) usando distintos encoders Vorbis de calidad.
  • En Linux contamos con multitud de soluciones, pero si tenemos el escritorio GNOME lo más fácil sería usar el Conversor de sonido, ajustando desde Editar-Preferencias los parámetros relativos a la calidad deseada. Desde la consola, siempre que tengamos instaladas las Vorbis Tools, podremos codificar nuestros archivos WAV tecleando: oggenc -q 5 *.wav (la calidad 5 indicada es la recomendada para conseguir la transparencia y equivale a unos 160 Kbps; aquí pueden consultarse más recomendaciones a la hora de usar Vorbis)
Por último hay que tener en cuenta que el transcoding desde otros formatos de audio con pérdida (como MP3) no es nada recomendable por acumular una pérdida de calidad y solo deberíamos planteárnoslo si la calidad del archivo de partida es aceptable (el mínimo absoluto serían 192 Kbps), la calidad del archivo resultante no es prioritaria (como comentábamos Vorbis destaca en tasas de bits bajas y medias) y sobre todo: si no podemos conseguir la misma grabación en un formato sin perdida como WAV o FLAC. Nada es perfecto ;-)

martes, 2 de marzo de 2010

Grabadoras DVD y LightScribe

Desde 2004 se venden grabadoras de CD/DVD con la tecnología LightScribe. Esta tecnología desarrollada en Hewlett-Packard permite utilizar el láser de la unidad para grabar rótulos e imágenes sobre la superficie de CDs y DVDs cubiertos de un material especial. Antes o después de grabar los datos, se le da la vuelta al disco y utilizando un software específico, se procede a quemar con el láser la otra cara consiguiendo nítidos grabados en escala de grises.

A pesar de su presencia en las tiendas y de haberse incluso preinstalado en algunos ordenadores portátiles y de escritorio durante los últimos años, parece ser que esta tecnología no ha acabado de "cuajar" entre el usuario medio. El caso es que las grabadoras que lo soportan no son por lo general más caras y aunque el precio de los medios ópticos necesarios sí se incrementa substancialmente, dado el abaratamiento general de estos no resulta para nada prohibitivo (estaríamos hablando de menos de 40 céntimos el CD-R de 700 MB). Supongo que la tendencia ha sido durante años "quemar" cada vez más CDs (las tarrinas de 100 se convirtieron para muchos en productos de primera necesidad ;) y rotular menos y peor. Eso hasta hace poco en que los discos duros extraíbles y las memorias flash (pendrives, tarjetas, etc.) unidos a la compatibilidad de los reproductores de sobremesa con archivos multimedia ha frenado el consumo de soportes ópticos. El uso que algunos aún le damos tiene que ver con las recopilaciones musicales en CD para escuchar en cualquier reproductor, y para eso un CD rotulado con LightScribe puede quedar de lujo ;-)

Lo primero sería hacernos con una grabadora que lo soporte o averiguar con esta utilidad software si la que tenemos lo soporta. A veces es tan fácil como localizar un logotipo o inscripción en la carátula de la bandeja de la unidad. Lo siguiente sería instalar el software de sistema necesario para controlar la función de grabado, bien en Windows o en Linux. Ahora nos falta el programa de diseño e impresión de los rótulos. Puede ser de rotulado simple tanto en Windows como en Linux, o de rotulado más complejo, basado en plantillas, solo disponible para Windows. En la web oficial también podemos descargarnos un montón de plantillas prediseñadas clasificadas por temas. Ahora solo nos faltaría elegir y/o personalizar el diseño y grabarlo al láser sobre un CD o DVD compatible. Bienvenidos al tostado por las dos caras ;-)