Lo script che trovate sotto può convertire file di formato aac, ape, flac, mp3, mpc, ogg, wav e wma in aac, ape, flac, mp3, mpc, ogg e wav.
#!/bin/bash
#
# AUTHOR: Maurizio di NuvoleSparse
#
# License: GNU General Public version 2 or any later version.
# This program comes with ABSOLUTELY NO WARRANTY; for details
# see the COPYING file or visit "http://www.gnu.org/licenses/gpl.html".
# This is free software, and you are welcome to redistribute it under
# certain conditions. See the GPL license for details.
#
# Dependence:
# zenity
# lame
# mac
# mppdec
# mplayer
# flac
# faad
# oggdec oggenc --> package: vorbis-tools
#
##functions
formati_supportati() {
SUPPORTO=yes
case $FORMATO in
aac) FORMATOFILE=[Aa][Aa][Cc] ;;
ape) FORMATOFILE=[Aa][Pp][Ee] ;;
flac) FORMATOFILE=[Ff][Ll][Aa][Cc] ;;
mp2) FORMATOFILE=[Mm][Pp]2 ;;
mp3) FORMATOFILE=[Mm][Pp]3 ;;
mpc) FORMATOFILE=[Mm][Pp][Cc] ;;
ogg) FORMATOFILE=[Oo][Gg][Gg] ;;
wav) FORMATOFILE=[Ww][Aa][Vv] ;;
wave) FORMATO=wav; FORMATOFILE=[Ww][Aa][Vv][Ee] ;;
wma) FORMATOFILE=[Ww][Mm][Aa] ;;
*) SUPPORTO=no ;;
esac
}
2aac() {
faac -q $QUALITA -o "in formato .$FORMATO_CONVERSIONE/$FILE_CONVERTITO" \
"$WAVFILE" 2>>/tmp/gaudioconvert.log | zenity --progress --text="'$WAVFILE' \
to '$FILE_CONVERTITO'" --auto-close --pulsate
}
2ape() {
mac "$WAVFILE" "in formato .$FORMATO_CONVERSIONE/$FILE_CONVERTITO" -c\
$QUALITA 2>>/tmp/gaudioconvert.log | zenity --progress --text="'$WAVFILE' to \
'$FILE_CONVERTITO'" --auto-close --pulsate
}
2flac() {
flac -f --compression-level-$QUALITA "$WAVFILE" -o "in formato \
.$FORMATO_CONVERSIONE/$FILE_CONVERTITO" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$WAVFILE' to '$FILE_CONVERTITO'" --auto-close --pulsate
}
2mp3() {
lame -m auto --preset $QUALITA "$WAVFILE" "in formato \
.$FORMATO_CONVERSIONE/$FILE_CONVERTITO" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$WAVFILE' to '$FILE_CONVERTITO'" --auto-close --pulsate
}
2mpc() {
mppenc --$QUALITA "$WAVFILE" "in formato .$FORMATO_CONVERSIONE/$FILE_CONVE\
RTITO" 2>>/tmp/gaudioconvert.log | zenity --progress --text="'$WAVFILE' to \
'$FILE_CONVERTITO'" --auto-close --pulsate
}
2ogg() {
oggenc "$WAVFILE" -q $QUALITA -o "in formato .$FORMATO_CONVERSIONE/\
$FILE_CONVERTITO" 2>>/tmp/gaudioconvert.log | zenity --progress \
--text="'$WAVFILE' to '$FILE_CONVERTITO'" --auto-close --pulsate
}
2wav(){
cp "$FILE_CONVERTITO" "in formato .$FORMATO_CONVERSIONE/" 2>>/tmp/audioco\
nvert.log
}
##
wma2wav() {
mplayer "$FILE" -ao pcm:file="$WAVFILE" 2>>/tmp/gaudioconvert.log | \
zenity --progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
mpc2wav() {
mppdec "$FILE" "$WAVFILE" 2>>/tmp/gaudioconvert.log | \
zenity --progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
ape2wav() {
mac "$FILE" "$WAVFILE" -d 2>>/tmp/gaudioconvert.log | \
zenity --progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
flac2wav() {
flac -f -d "$FILE" -o "$WAVFILE" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
ogg2wav() {
oggdec "$FILE" -o "$WAVFILE" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
aac2wav() {
faad -o "$WAVFILE" "$FILE" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
mp32wav() {
lame --decode "$FILE" "$WAVFILE" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$FILE' to '$WAVFILE'" --auto-close --pulsate
}
mp22mp3(){
lame -m auto --mp2input --preset $QUALITA "$FILE" "in formato \
.$FORMATO_CONVERSIONE/$FILE_CONVERTITO" 2>>/tmp/gaudioconvert.log | zenity \
--progress --text="'$FILE' to '$FILE_CONVERTITO'" --auto-close --pulsate
}
interruzione(){
zenity --title=gaudioconvert --error --text="Script interrotto."
kill $$
}
usa_printf(){
inizio=0
fine=1024
p=1
while [ $p != ultima ]; do
printf "${temp:inizio:fine}" |
zenity --text-info --title="gaudioconvert - \
parte $p" &
inizio=$(( inizio+1024 ))
fine_ipotetica=$(( inizio+fine ))
if [ ${#temp} -lt $fine_ipotetica ]; then
p="ultima"
printf "${temp:inizio:fine}" | zenity --text-info \
--title="gaudioconvert - parte $p"
break
fi
p=$(( p+1 ))
done
}
##main
### trucco per evitare l'ostacolo di un path errato
### quando si avvia uno Gscript dalla Scrivania
PERCORSO="`echo $NAUTILUS_SCRIPT_CURRENT_URI| sed "s&^file://&&"`"
[ -n "$PERCORSO" ] && cd "$PERCORSO"
if [ $# -eq 0 ]; then
zenity --title="gaudioconvert" --error --title="Attenzione"\
--text="Seleziona almeno un file."
exit 1
fi
FORMATO_CONVERSIONE=`zenity --title=gaudioconvert --list --text="Scelti il\
formato di conversione:" --radiolist --column=Selez. --column=Formato \
false aac false ape false flac false mp3 false mpc false ogg false wav || \
interruzione`
SECONDA_CONVERSIONE=2$FORMATO_CONVERSIONE
case "$FORMATO_CONVERSIONE" in
aac) QUALITA=`zenity --list --text="Scegli la qualita'." --radio\
list --column=Selez. --column=Livello false 100 false 200 true 300 false\
400 false 500 || interruzione`;;
ape) QUALITA=`zenity --list --text="Scegli la qualita'." --radio\
list --column=Selez. --column=Livello false 1000 false 2000 true 3000 false\
4000 false 5000 || interruzione`;;
flac) QUALITA=`zenity --list --text="Scegli la qualita'." --radio\
list --column=Selez. --column=Livello false 0 false 1 false 2 false 3 false \
4 false 5 false 6 false 7 true 8 || interruzione`;;
mp3) QUALITA=`zenity --list --text="Scegli la qualita'." --radiolist \
--column=Selez. --column=Livello true medium false standard false extreme \
false insane || interruzione`;;
mpc) QUALITA=`zenity --list --text="Scegli la qualita'." --radiolist \
--column=Selez. --column=Livello false thumb false radio true standard \
false xtreme || interruzione`;;
ogg) QUALITA=`zenity --list --text="Scegli la qualita'." --radiolist \
--column=Selez. --column=Livello false " -1" false 0 false 1 false 2 false\
3 false 4 false 5 false 6 true 7 false 8 false 9 false 10 || interruzione`;;
wav) echo "NESSUNA QUALITA'!";;
*)
zenity --title=gaudioconvert --error --text="Attenzione, non hai sele\
zionato nessun formato di conversione."
exit 1
;;
esac
while [ $# -gt 0 ]; do
if [ ! -d "in formato .$FORMATO_CONVERSIONE" ]; then
mkdir "in formato .$FORMATO_CONVERSIONE"
fi
FILE="$1"
FORMATO=`echo "$FILE" | awk -F "." '{ print $NF }' | tr "[:upper:]" \
"[:lower:]"`
formati_supportati
if [ $SUPPORTO == yes -a ! -d "$FILE" ]; then
WAVFILE=$(echo "$FILE" | sed -e s/""$FORMATOFILE""$/wav/)
if [ "$FORMATO" != $FORMATO_CONVERSIONE ]; then
FILE_CONVERTITO=$(echo "$FILE" | sed -e \
s/""$FORMATOFILE""$/"$FORMATO_CONVERSIONE"/)
if [ "$FORMATO" == mp2 -a ! -e "in formato \
.$FORMATO_CONVERSIONE/$FILE_CONVERTITO" ]; then
mp22mp3
elif ! [ -e "in formato \
.$FORMATO_CONVERSIONE/$FILE_CONVERTITO" ]; then
[ "$FORMATO" != wav ] && "$FORMATO"2wav
$SECONDA_CONVERSIONE
else
echo "Il file in formato \
".$FORMATO_CONVERSIONE/$FILE_CONVERTITO" e' gia' esistente." >>/tmp/audio\
convert.log
fi
rm -f "$WAVFILE" 2>>/tmp/gaudioconvert.log
fi
else
echo "ERRORE!\nIl formato di '$FILE' non è supportato dallo\
script. :-(" >>/tmp/gaudioconvert.log
fi
shift
done
if [ -s "/tmp/gaudioconvert.log" ]; then
echo -e "Lo script e' terminato." >>/tmp/gaudioconvert.log
temp="$(cat "/tmp/gaudioconvert.log")"
if [ ${#temp} -gt 1024 ]; then
usa_printf
else
cat "/tmp/gaudioconvert.log" | zenity\
--title="Errore - gaudioconvert"\
--text-info
fi
rm -f /tmp/gaudioconvert.log || zenity --title="gaudioconvert" --error\
--title="Attenzione"\
--text="Non e' stato possibile rimuovere il file /tmp/gaudioconvert.log! :-("
else
zenity --title="gaudioconvert" --info --text="Lo script e' terminato."
fi
exit 0
Dipendenze
Un argomento che fino ad oggi non avevo mai approfondito, sul blog, è come risolvere le dipendenze di questo script. Oggi ho deciso di parlarne, spero in modo esaustivo.
Per il formato mp3 il pacchetto da installare è lame con annesse librerie sia per Ubuntu che per le altre distro;
per il formato flac basta installare l'omonimo pacchetto per tutte le distro;
per il formato ogg è richiesto il pacchetto vorbis-tools. Questo vale per Ubuntu-Linux e le altre distro based Debian, compresa essa stessa
;
il formato ape mi ha dato non pochi grattacapi la soluzione l'ho trovata con un pacchetto .rpm chiamato mac, che sta per Monkey Audio Codec, convertito in formato .deb con lo script rpm2deb;
per il formato mpc (Musepack) i tools sono due mppenc, mppdec. È possibile trovare mppenc già compilato nel pacchetto per l'installazione di GNormalize, quindi la soluzione più semplice e veloce per supportare questo formato è l'installazione del pacchetto gnormalize-0.52-1.noarch.rpm, dopo esser stato convertito nel formato .deb con rpm2deb;
per il formato aac ci sono due pacchetti faac per la codifica e faad per la decodifica, con annesse librerie.
infine, il programma per la decodifica dal formato wma al formato wave è il mitico mplayer
Ultimo aggiornamento 24 Ottobre 2008