Comprimiendo un ogg a mp3

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:


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

Luego con este archivo lo que hay que hacer es, si se llama por ejemplo ogg2mp3:

//hacernos root
sudo -s
//hacerlo disponible mediante el PATH
mv ogg2mp3 /usr/bin/ogg2mp3
//darle permisos de ejecución
chmod 755 /usr/bin/ogg2mp3

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.

 

2 Responses to “Comprimiendo un ogg a mp3”

  1. juan says:

    hola miguel q tal estamos en casa de nacho despidoiemdop a finin escribo regular …..cuidao q te caes
    weno tu log q me piro q tengo mazo ping hasta lugo (K)

  2. kTzAR says:

    Por cierto, este script debe ejecutarse con BASH, así que se debe tener enlazado en /bin/sh éste. El problema es que el que se enlaza por defecto en /bin/sh en, por ejemplo, Ubuntu 6.10 es dash, que no incorpora la pseudovariable $RANDOM, que utilizo para tomar un nombre aleatorio de la fifo.

    Se puede poner /bin/bash en la primera línea, o cambiar la forma de obtener un número aleatorio (o incluso no cogerlo, porque al final del script la fifo se borra). En fin, …

Leave a Reply