A volte può capitare di dover convertire dei file audio in formato MP3. Esistono già dei programmi con interfaccia grafica in grado di svolgere questo compito, ma non sempre li abbiamo sotto mano. In un ambiente GNU/Linux è possibile però usare anche numerosi strumenti da riga di comando.
Per convertire un file OGG in MP3 si può usare, ad esempio, Sox e LAME. Chiaramente, dover convertire molti file, può risultare una operazione lunga e noiosa, ed è qui che uno script Bash può fare la differenza:
#!/bin/bash
for f in *.ogg; do
sox $f tmp.wav
lame -b 128 -q 2 tmp.wav ${f/.ogg/.mp3}
rm -f tmp.wav
doneCome si può facilmente capire dal codice, si ciclano i file ogg contenuti nella directory in cui si esegue lo script, si convertono temporaneamente in formato WAV ed infine si crea l'MP3 per ogni file. In questo caso ho scelto di codificarlo a 128bit.
Questo script è ovviamente migliorabile. Ad esempio i file con uno o più spazi nel nome vengono saltati, per risolvere tale problema è necessario modificare leggermente lo script. Una soluzione può essere quella di sostituire agli spazi degli undescore.
#!/bin/bash
for f in *.ogg; do
if echo "$f" | grep -q [[:space:]]; then
newname=`echo $f | tr ' ' '_'`
mv "$f" $newname
f=$newname
fi
sox $f tmp.wav
lame -b 128 -q 2 tmp.wav ${f/.ogg/.mp3}
rm -f tmp.wav
doneIl codice ottenuto è ancora migliorabile, infatti se l'estensione dei file non è "ogg" in minuscolo, ma contiene delle lettere maiuscole (ad esempio "OGG" o "OgG"), lo script non funziona. Per gestire anche questo caso è sufficiente una piccola modifica. Oltre a questo semplifico anche il codice togliendo il blocco if:
#!/bin/bash
for f in *.[Oo][Gg][Gg]; do
newname=`echo $f | tr ' ' '_' | sed -e s/[Oo][Gg][Gg]$/ogg/`
mv "$f" $newname
f=$newname
sox $f tmp.wav
lame -b 128 -q 2 tmp.wav ${f/.ogg/.mp3}
rm -f tmp.wav
doneA questo punto lo script dovrebbe coprire un buon numero di casi d'uso.

Grazie mille. E' utilissimo questo script bash. Se avrò bisogno quando dovrò scrivere uno script bash verò da te!
Perfetto.
L'unica cosa è accertarsi di avere installato libsox-fmt-ogg
Invia nuovo commento