viernes, 28 de mayo de 2010

Generando listas de reproducción M3U

El formato de archivo M3U surgió como una forma fácil de guardar listas de reproducción de archivos MP3 en el famoso reproductor de audio Winamp. Realmente se trata de un fichero de texto donde se indican la ubicación y el nombre de los distintos archivos multimedia que forman parte de la lista de reproducción. Posteriormente se extendió el formato (Extended M3U) con líneas de comentario que indican la duración en segundos de cada canción, así como su título (y opcionalmente, su autor). Por el camino se propagó su uso a distintos reproductores y sistemas operativos, convirtiendose en un estándar de facto. Además de rutas relativas o absolutas a archivos de audio locales también puede usar el estándar URL para referenciar archivos o streams de audio remotos.

Aunque pueden crearse estas listas M3U desde muchos de los reproductores multimedia disponibles (o desde otras utilidades como EasyTAG), en ocasiones puede ser más útil e inmediato invocar a un programa de línea de comandos que genere la lista a partir de un conjunto de archivos especificados mediante un sencillo *.mp3. Como, dejando a un lado herramientas como FAPG --más apropiadas para generar listas de reproducción a partir de extensas colecciones de carpetas llenas de archivos musicales-- no parecía haber nada sencillo que encajara completamente con mi uso habitual, me dispuse a programar un shell script.

Su función es generar una lista de reproducción (según la sintaxis de M3U, claro) que incluya referencias a los archivos MP3 y/o Vorbis pasados como parámetros. Por defecto escribe los datos a pantalla (la salida estándar), por lo que para guardar la lista deberemos usar el redireccionamiento de salida (>) indicando el nombre del archivo con extensión .m3u a crear. Así podemos previsualizar en pantalla la lista antes de guardarla y el script se mantiene simple y efectivo. Lo ideal para que la lista generada funcione en cualquier sistema operativo será invocarlo desde el directorio donde estén las canciones (usando comodines que abrevien el asunto) para que no se incluyan rutas en las referencias a estas. Obviamente, el archivo M3U deberá situarse en la misma ubicación para funcionar correctamente. Otra restricción para hacerlo compatible con Windows y sus reproductores (sobre todo con WMP ;) es codificar el texto usando el estándar Latin-1 (de ello se encarga la herramienta iconv) en lugar del más moderno UTF-8. Esto hará que en pantalla las eñes y vocales acentuadas se vean sustituidas por un símbolo de interrogación, ya que las consolas modernas de Linux usan UTF-8, pero el archivo generado será más estándar. Si quisieramos ceñirnos a UTF-8 y los reproductores que lo soportan, podríamos quitar del script la llamada a iconv y usar en el archivo de salida la extensión .m3u8 para "hacerlo oficial" ;-)

Aquí puede descargarse el script, llamado m3u a falta de un nombre mejor. Sólo comentar que la extracción de información de los archivos MP3 y OGG la manejo con las utilidades eyeD3 (la mejor para manejar metadatos de MP3) y ogginfo (que forma parte de las vorbis-tools). Espero que sea de alguna utilidad a alguien. Cualquier corrección y/o sugerencia será bienvenida ;-)