pubblicato Lunedì 22 Gennaio del 2007 alle 11:07.

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
Attenzione: gli script sono pubblicati SOLO a scopo dimostrativo (didattico) e ASSOLUTAMENTE SENZA GARANZIA: l'autore nega qualsiasi responsabilità di danni riscontrabili a seguito del loro uso (mancato funzionamento, errori ed eventuale perdita di dati, etc). Gli script sono pubblicati con la licenza d'uso GNU General Public License, peraltro ottenibile al seguente link GNU/GPL.

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 [wink]; 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


powered by FreeFind
Il sito è una creazione di Maurizio... ed è pubblicato sotto una Licenza CC; esso non viene aggiornato
in maniera periodica, pertanto non può essere considerato un prodotto editoriale ai sensi della legge n. 62 del 7.03.2001.