lunes, 15 de febrero de 2010

Codificación de audio en formato MP3

El término MP3 es más (o menos, realmente) que una mera moda de tecnófilos o que la etiqueta de oro del marketing orientado a los jovenes cyber(-consumidores). Realmente no es más que un formato de codificación de audio, que como otras tecnologías (imágenes GIF, documentos DOC, etc.) se acabó convirtiendo en estándar de facto por haber aparecido en el momento adecuado. Y en este caso, también por sus méritos tećnicos, al menos comparado con lo que había (y siguió habiendo durante unos años).

Lo que logró el formato MPEG-1 Audio Layer 3 (su nombre técnico) desde 1994, fué codificar audio digitalizado reduciendo su tamaño a una décima parte del original y manteniendo una calidad aceptable para la escucha. Una compresión tan elevada solo podía ser de tipo lossy, con pérdida de calidad, pero la clave estaba en que la información sonora descartada no fuera importante para el oyente medio (para ello se utilizan modelos psicoacústicos). Esto abrió de par en par las puertas a la digitalización e intercambio de grabaciones musicales a traves de Internet, la red mundial que en ese mismo momento comenzaba su propia carrera hacia la popularidad. Hasta ese momento, las características de los medios de almacenamiento y de transmisión de datos habían sido incompatibles con el manejo de audio, teniendo en cuenta que una hora de música digitalizada a calidad CD ocupaba 600 MB.

El resto de la historia (incluyendo a aplicaciones P2P como Napster, demandas de la industria discográfica, sustitución de los walkman por reproductores MP3, etc.) es de sobra conocida por cualquiera que no haya pasado en una isla desierta la última década.

La situación actual es que tenemos MP3 hasta en la sopa, a pesar de ser una tecnología patentada (frente a otras libres) y de que desde hace años hay alternativas mejores a nivel técnico como AAC, WMA, Musepack y Vorbis (de este último hablaré otro día). Su extrema popularidad, junto a un soporte prácticamente garantizado en cualquier hardware o software relacionado con el audio, sigue manteniendo al formato MP3 en su papel de "estándar universal de intercambio de música".

Si nos vemos en la necesidad de codificar audio digitalizado utilizando el formato MP3, un buen consejo puede ser no dejarnos impresionar por la miriada de programas que dicen soportar el formato e irnos directamente a por LAME, considerado por muchos la mejor implementación de un codificador MP3. Esto garantizará la calidad de nuestros archivos y su compatibilidad con todo tipo de reproductores, lo cual no es cierto de muchos programas shareware o incluso de pago que prometen lo mismo. El programa original, con licencia GPL (y por tanto con código fuente disponible) es una utilidad de línea de comandos que puede echar para atrás a ciertos usuarios, aunque realmente no es tan complicado. Por suerte, existen diversas interfaces gráficas para LAME, así como aplicaciones independientes de fácil manejo que usan LAME internamente para realizar la codificación MP3.

En sistemas Windows podemos echar mano de LameDropXPd, un interfáz gráfica basada en arrastrar y soltar archivos.

En sistemas Linux, y en concreto en Ubuntu, disponemos de la utilidad Conversor de sonido, que podemos usar para codificar en este formato y que, no casualmente, utiliza LAME en última instancia para hacer el trabajo. Por motivos de patentes, antes de poder utilizar el formato MP3 en Ubuntu, deberemos instalar previamente ciertos paquetes software desde repositorios extraoficiales tal y como se explica en esta página. Una vez activado el soporte MP3 e instalado Conversor de sonido, podremos elegir este formato, así como la calidad deseada, en el cuadro de diálogo Preferencias, al que accederemos desde el menú Editar.

La relación entre calidad auditiva y tamaño del archivo MP3 es inversamente proporcional, y podemos elegirla en el momento de la codificación según nuestras necesidades. Un par de trucos que ayudan a reducir el tamaño sin apenas reducir la calidad es usar Joint stereo y tasas variables de bits, que en caso de LAME son parámetros predeterminados.

Siempre podemos usar directamente lame, la utilidad de línea de comandos que acompaña a las bibliotecas del proyecto LAME y que podremos obtener descargando y compilando la última versión del código fuente desde el sitio web oficial o usando la versión precompilada para nuestro sistema. Esta última opción en Linux sería tan sencilla como ejecutar:

$ sudo apt-get install lame

Aunque el programa soporte una enorme cantidad de opciones y parámetros de línea de comandos, podemos recurrir a los sencillos presets medium, standard, extreme o insane despues de la opción --preset y por último el nombre del archivo WAV a codificar. El preset medium sería actualmente el mínimo recomendado para obtener una calidad decente con un tamaño de archivo pequeño, aunque standard se acercaría más a la llamada transparencia (imposibilidad de distinguir del original sin comprimir) a costa de un moderado aumento en el tamaño del archivo. Para una calidad superior destinada a un hardware en condiciones (tarjeta audio / reproductor, altavoces, etc.) usaríamos extreme y reservaríamos insane para copias de seguridad en las que lo importante es minimizar la pérdida de calidad aunque sea a costa de un mayor tamaño de archivo. Sin embargo para este último uso es preferible emplear algún formato de codificación sin pérdida como FLAC (más sobre este en un futuro post).

El único problema que plantea usar el programa lame directamente desde la consola de comandos es que solo puede procesar un archivo cada vez, por lo que para codificar un conjunto de archivos WAV deberemos recurrir a una estructura de bucle como la siquiente:

$ for f in *.wav;do lame --preset standard "$f";done

Cuando veamos (y sobre todo oigamos) el resultado de la codificación tras aplicar la línea anterior a las pistas WAV de nuestro disco favorito (sobre cómo extraerlas del CD escribiré otro día) empezaremos a pensar: ¿quién necesita una interfaz gŕafica y un programa comercial? ;-)