#!/bin/sh
# Programmeur : WW
# 20/08/08
# Script permettant d'extraire le son d'une vidéo

#------- Déclaration des variables -------

listeFormats="*.avi *.divx *.xvid *.mpg *.dat *.ogm *.flv *.mov *.AVI *.DIVX *.XVID *.MPG *.DAT *.OGM *.FLV *.MOV" # Représente la liste des formats des vidéos à traiter dans le dossier

#------- Déclaration des fonctions -------

# Fonction qui traite les vidéos contenus dans un dossier
traitementDossier() {
	nombre=0

	for i in $listeFormats; do # On compte les vidéos
		if [ "${i%.*}" != "*" ]; then
			nombre=$(($nombre+1))
		fi
	done

	n=1

	(for i in $listeFormats; do
       		if [ "${i%.*}" != "*" ]; then # Permet d'éviter un traitement inutile quand aucun fichier n'est trouvé pour un format sans ce test *.ogm (ou autres) serai considéré comme un fichier lorsqu'il n'y a pas de fichier .ogm (ou autres) dans le dossier
			echo "# "$i;
			progression=$((100*n/nombre));
			echo $progression;
			n=$((n+1));
			traitementFichier "$i"
		fi
	done;)|zenity --height="350" --width="400" --progress --percentage=0;
}

# Fonction qui traite une vidéo à passer en paramètre
traitementFichier() {
	if [ -e "${1%.*}".$extension ]; then # Si le fichier existe déjà

		creation="faux" # On n'écrase pas

		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.$extension existe déjà. Voulez-vous l'écraser ?" # On pose la question
		if [ $? = "0" ]; then # Si la réponse est oui
			creation="vrai" # On écrase
		fi
	else
		creation="vrai" # Le fichier n'existe pas on veux forcément le créer
	fi

	if [ "$extension" != "wav" -a -e "${1%.*}".wav ]; then
		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.wav existe déjà. Voulez-vous l'écraser car la compression en $extension se fera à partir du fichier transitoire wav ?" # idem avec le wav
		if [ $? = "0" ]; then
			creation="vrai"
		else
			creation="faux" # Problème le wav existe déjà on ne l'écrase pas
		fi
	fi

	if [ "$creation" = "vrai" ]; then
		ffmpeg -y -i "$1" -vn -f wav "${1%.*}".wav 2>&1 | zenity --progress --pulsate --title="Extraction en cours" --text="Vidéo : $1" --auto-close --auto-kill;
		if [ "$extension" != "wav" ]; then # On compresse
			lame -V$qualitelame "${1%.*}".wav "${1%.*}".$extension 2>&1 | zenity --progress --pulsate --title="Compression en cours" --text="Vidéo : $1" --auto-close --auto-kill;
			rm "${1%.*}".wav # Dans ce cas le wav n'est que transitoire
		fi
	fi
}

# Fonction d'annulation requière un paramètre
annuler() {
	if [ "$1" = "" ]; then
        	exit 0;
	fi
}

#------- Fin des définitions de fonctions -------

# Choix de l'extension
extension=$(zenity --list --column="Choix" --column=" " --height="250" --width="300" --radiolist --text="Quel format voulez-vous pour le(s) fichier(s) de sortie ?" --title="Extensions" false "mp3" true "ogg" false "wav")

annuler $extension

if [ "$extension" != "wav" ]; then
	# Choix de la qualité (Variable BitRate)
	qualite=$(zenity --scale --text="Choix de la qualité ?" --value=4 --max-value="9")

	annuler $qualite
	qualitelame=`expr 9 - $qualite`
fi

while [ $# -gt 0 ]; do
    
	if [ -d "$1" ]; then    
		cd "$1" #On entre dans le dossier des vidéos à traiter
		traitementDossier
	else
		traitementFichier "$1"
	fi
	shift
done	
