Comprimiendo un ogg a mp3

General, Programación

Llevo ya meses utilizando Windows de forma residual, digamos un 2% del tiempo, y hoy ha sido la primera vez que me ha surgido una necesidad: pasar de un archivo de audio codificado con Vorbis (suelen llevar extensión ogg) a mp3.

¿Cómo he llegado a esta situación? Cuando por Navidades me compré un reproductor puse como condicion indispesable que reprodujese ogg; no sé si es el mejor códec de audio pero lo que sí sé es que no hay ninguno absolutamente mejor que él, y además es libre. Por cierto, es un Samsung Yepp-1 versión Operación Triunfo posteriormente “sprayeado” para eliminar de mi reproductor cualquier vestigio de ese horrible show televisivo.

Por eso cuando me bajo un disco o una canción lo que automáticamente hago, usando la herramienta mp32ogg (en los repos de Ubuntu):

mp32ogg -q 1 -v -d /media/fat/mp3/Disco_descomprimido/*.mp3

con lo que ya tengo mi música ocupando un tamaño decente y oyéndose genial. Pero hoy una amiga me pidió la canción Part of your world de Skye Sweetnam (magnífica por cierto :D) en mp3. Cuando alguien me pide eso normalmente les paso la siguiente URL http://www.illiminable.com/ogg/downloads.html#stable (a la que se llega buscando en Google “Directshow ogg codecs”) con lo que ya podrán reproducirlo. Pero ella muy inteligentemente me dijo: “¿y lo podré escuchar en mi reproductor portátil de mp3?”. Vaya, no creo, son pocos los reproductores que pueden hacerlo, así que la tuve que comprimir en mp3…

¿Y eso cómo se hace? Vaya, nunca lo he hecho. Pero pensemos… Habrá que descomprimir el ogg; ey ¡eso lo he hecho! Los chicos de Vorbis programaron oggdec, que te lo deja en wav. Y ahora tengo que comprimir el wav; eso sí lo sé: el compresor “Lame” existe desde hace mogollón. Antes de empezar a hacer nada ejecuto ambos comandos para ver que los tengo, abro vi y me pongo a hacer scripts.

Primero hago uno que hace el wav y luego el mp3, tras borrar el wav. No, poco eficiente, escribe en disco mogollón de megas para luego borrarlos. ¿No podría hacerlo en memoria? Ya está, usemos pipes… Tampoco, los chicos de oggdec no pensaron en que alguien fuera a usar un wav por la salida estándar (con la que se puede enlazar con la entrada estándar de otro programa, en nuestro caso lame). ¿Qué hago? Pues recordé aquello de las tuberias con nombre (conocidas también como FIFO); son archivos especiales en el sistema de ficheros que lo que alguien escribe en un lado lo escupen al que lo lea por otro; ideal para tunelizar programas que no usan la entrada y salida estándar para trabajar. Con estas premisas me puse a codificar desempolvando mis conocimientos de bash script, y aquí está el resultado:

<br /> exit<br /> #!/bin/sh<br /> in=$1<br /> bitrate=$2<br /> if [ -e "$in" ]<br /> then echo "Comprimiendo $in"<br /> else exit -1<br /> fi<br /> out=$in.mp3<br /> echo "pasamos a comprimir $in a $out"<br /> if [ $bitrate == ]; then<br /> bitrate=128<br /> fi<br /> namedfifo=$RANDOM$RANDOM<br /> mkfifo $namedfifo<br /> oggdec -Q "$in" -o $namedfifo &#038;<br /> lame --nohist -b $bitrate $namedfifo "$out"<br /> rm $namedfifo<br />

Luego con este archivo lo que hay que hacer es, si se llama por ejemplo ogg2mp3:
<br /> //hacernos root<br /> sudo -s<br /> //hacerlo disponible mediante el PATH<br /> mv ogg2mp3 /usr/bin/ogg2mp3<br /> //darle permisos de ejecución<br /> chmod 755 /usr/bin/ogg2mp3<br />
et voilá

Si alguien tiene alguna mejora o lo quiere poner en algún sitio es libre de hacerlo, aunque le agradecería que me lo notificase.