Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/12/2008, à 13:28

neuneu

Script pour retaguer ses mp3

Bonjour,

Je poste ce message non pas pour poser une question mais pour partager mon travail... (il n'est peu etre pas bien placé ? mais je n'ai pas trouvé mieux.)

Le script ci-dessous permet de taguer les mp3 en fonction de l'endroit ou ils sont classés, pour cela les mp3 doivent être classés de la facon suivante :
[repertoire Racine de la musique]/[Nom de l'artiste]/[nom de l'album]/[titre de la chanson].mp3
ou
[repertoire Racine de la musique]/[Nom de l'artiste]/[titre de la chanson].mp3

Le nom du [repertoire Racine de la musique] doit être renseigné dans la variable racineMusique.
Ce script peut être lancé à partir d'un des trois répertoire suivant :[repertoire Racine de la musique], [Nom de l'artiste] ou [nom de l'album], il a été concu pour être placé dans "/home/neuneu/.gnome2/nautilus-scripts" et ainsi être lancé depuis le menu contextuel.
Dans un premier temps le script scan tous les mp3 classés sous le dossier courant (et dans les sous-dossiers) et détermine les informations utiles (Nom de l'artiste, nom de l'album, titre de la chanson). Dans un deuxième temps le script effectue le retag proprement dit.

Voila j'espère que ces explications sont claires et que le script pourra servir à d'autre, merci de me faire part de vos remarque pour quelques améliorations.

#!/bin/bash
#

#chemin du dossier contenant les mp3
racineMusique='/home/neuneu/zic' 

#variable globale
pronfondeurCourante=0
pronfondeurArtiste=0
pronfondeurAlbum=0

nb_dossiersArtistes=0;
dossiersArtistes="";

nb_dossiersAlbums=0;
dossiersAlbums="";

nb_mp3=0
mp3="";

MAXLONGTITRE=30;

# getprofondeur
# param1 chemin
# retourne la profondeur courante a partir du dossier racine
function getProfondeurRelative(){
	retour=-1
	estSousMusique=`pwd |grep -c $racineMusique`
	if [ $estSousMusique -eq 1 ]; then
		retour=0
		base1=`basename "$1"`
		dir1=`dirname "$1"`
		if [ `echo "$racineMusique" |grep -c "$base1"` -eq 0 ]; then
			retour=1
			base2=`basename "$dir1"`
			dir2=`dirname "$dir1"`
			if [ `echo "$racineMusique" |grep -c "$base2"` -eq 0 ]; then
				retour=2
				base3=`basename "$dir2"`
				dir3=`dirname "$dir2"`
				if [ `echo "$racineMusique" |grep -c "$base3"` -eq 0 ]; then
					retour=3
				fi
			fi
		fi
	fi
	return $retour
}

#getPronfondeurArtiste
# retourne la profondeur des dossiers artistes
function getPronfondeurArtiste(){
	profondeur=1
	chemin=$racineMusique
	while [ `echo $chemin` != "/"  ];do
		chemin=`dirname "$chemin"`
		let profondeur++
	done
	return $profondeur
}

#addSubFolderToList
# ajoute les sous dossier artistes à la liste des dossiers artiste
# et les sous dossier albums à la liste des dossiers albums
#param 1 le nom du sous dossier 
#param 2 la profondeur du sous dossier
function addSubFolderToList(){
	if [ $2 -eq $pronfondeurArtiste ]; then
		dossiersArtistes[$nb_dossiersArtistes]="$1"
		let "nb_dossiersArtistes++"
	fi
	if [ $2 -eq $pronfondeurAlbum ]; then
		dossiersAlbums[$nb_dossiersAlbums]="$1"
		let "nb_dossiersAlbums++"
	fi
}
#addMp3ToList
# ajoute un fichier mp3 à la liste des mp3
#param 1 le chemin et le nom du fichier
function addMp3ToList(){
	mp3[nb_mp3]="$1"
	let "nb_mp3++"
}

#traiterDossiersArtistes
#...
function traiterDossiersArtistes(){
	n=$nb_dossiersArtistes

	let "n=n-1"
	for i in `seq 0 $n`;do
		dossier="${dossiersArtistes[$i]}"
		for f in "$dossier"/*; do		
			isdir=`file -b "$f" |grep -c directory`
			if [ $isdir -eq 1 ]; then
				addSubFolderToList "$f" $pronfondeurAlbum
			else
				ismp3=`echo "$f"  | grep -c .mp3`
				if [ $ismp3 -eq 1 ]; then
					addMp3ToList "$f"
				fi
			fi
		done
	done
}

#traiterDossiersAlbums
#...
function traiterDossiersAlbums(){
	n=$nb_dossiersAlbums

	let "n=n-1"
	for i in `seq 0 $n`;do
		dossier="${dossiersAlbums[$i]}"
		for f in "$dossier"/*; do		
			ismp3=`echo "$f"  | grep -c .mp3`
			if [ $ismp3 -eq 1 ]; then
				addMp3ToList "$f"
			fi
		done
	done
}

#traiterMP3
#...
function traiterMP3(){
	n=$nb_mp3
	let "n=n-1"
	(for i in `seq 0 $n`;do
		f="${mp3[$i]}"
		artiste=`echo $f | cut -d'/' -f $((pronfondeurArtiste+1))`
		album=`echo $f | cut -d'/' -f $((pronfondeurAlbum+1))`		
		chansonExt=`basename "$f"`
		
		let "chansonLong= ${#chansonExt} - 4"
		chanson=`expr substr "$chansonExt" 1 $chansonLong`

		if [ `echo "$artiste" |grep -c ".mp3"` -eq 1 ]; then
			artiste=" "
		fi
		if [ `echo "$album" |grep -c ".mp3"` -eq 1 ]; then
			album=" "
		fi
		id3v2 -a "$artiste" -A "$album" -t "$chanson" "$f"

		let "progress = i*100/nb_mp3"
		echo $progress
	done) | zenity --progress --auto-close --title="`gettext 'Scaling mp3'`" --text="`gettext 'Processing mp3 ...'`"  --percentage=0
	zenity --info --text "Traitement terminé: $nb_mp3 fichier(s) modifié(s)"
}


#main
cheminCourant="`pwd`"

getPronfondeurArtiste
pronfondeurArtiste=$?
let "pronfondeurAlbum=$pronfondeurArtiste + 1"
getProfondeurRelative $cheminCourant
let "pronfondeurCourante=$? + $pronfondeurArtiste -1"


while [ $# -gt 0 ]; do
	isdir=`file -b "$1" |grep -c directory`
	if [ $isdir -eq 1 ]; then
		let "pronfondeur=$pronfondeurCourante + 1"
		addSubFolderToList "$cheminCourant/$1" $pronfondeur
	else
		ismp3=`echo "$1"  | grep -c .mp3`
		if [ $ismp3 -eq 1 ]; then
			addMp3ToList "$cheminCourant/$1"
		fi
	fi
	shift
done

traiterDossiersArtistes
traiterDossiersAlbums
traiterMP3

Hors ligne

#2 Le 21/12/2008, à 13:37

Dark&Wise

Re : Script pour retaguer ses mp3

Merci de partager ton script.
tu peux mettre tes suggestions dans la rubrique   "Liste des forums -> Trucs et astuces "


Ububntu  Tunisia Team :
mailing-list : ubuntu-tn@lists.ubuntu.com
IRC : #ubuntu-tn
wiki : https://wiki.ubuntu.com/TunisianTeam

Hors ligne

#3 Le 21/12/2008, à 13:38

michel2652

Re : Script pour retaguer ses mp3

Bonjour,

Déplacé dans "Trucs et astuces".

A+

#4 Le 21/12/2008, à 13:52

neuneu

Re : Script pour retaguer ses mp3

Ah ok, merci pour l'info.

voici quelque petites amélioration au niveau des informations données à l'utilisateur :

#!/bin/bash
#

racineMusique='/home/vince/Desktop/zic'

#variable globale
pronfondeurCourante=0
pronfondeurArtiste=0
pronfondeurAlbum=0

nb_dossiersArtistes=0;
dossiersArtistes="";

nb_dossiersAlbums=0;
dossiersAlbums="";

nb_mp3=0;
mp3="";

MAXLONGTITRE=30;

# getprofondeur
# param1 chemin
# retourne la profondeur courante a partir du dossier racine
function getProfondeurRelative(){
	retour=-1
	estSousMusique=`pwd |grep -c $racineMusique`
	if [ $estSousMusique -eq 1 ]; then
		retour=0
		base1=`basename "$1"`
		dir1=`dirname "$1"`
		if [ `echo "$racineMusique" |grep -c "$base1"` -eq 0 ]; then
			retour=1
			base2=`basename "$dir1"`
			dir2=`dirname "$dir1"`
			if [ `echo "$racineMusique" |grep -c "$base2"` -eq 0 ]; then
				retour=2
				base3=`basename "$dir2"`
				dir3=`dirname "$dir2"`
				if [ `echo "$racineMusique" |grep -c "$base3"` -eq 0 ]; then
					retour=3
				fi
			fi
		fi
	fi
	return $retour
}

#getPronfondeurArtiste
# retourne la profondeur des dossiers artistes
function getPronfondeurArtiste(){
	profondeur=1
	chemin=$racineMusique
	while [ `echo $chemin` != "/"  ];do
		chemin=`dirname "$chemin"`
		let profondeur++
	done
	return $profondeur
}

#addSubFolderToList
# ajoute les sous dossier artistes à la liste des dossiers artiste
# et les sous dossier albums à la liste des dossiers albums
#param 1 le nom du sous dossier 
#param 2 la profondeur du sous dossier
function addSubFolderToList(){
	if [ $2 -eq $pronfondeurArtiste ]; then
		dossiersArtistes[$nb_dossiersArtistes]="$1"
		let "nb_dossiersArtistes++"
	fi
	if [ $2 -eq $pronfondeurAlbum ]; then
		dossiersAlbums[$nb_dossiersAlbums]="$1"
		let "nb_dossiersAlbums++"
	fi
}
#addMp3ToList
# ajoute un fichier mp3 à la liste des mp3
#param 1 le chemin et le nom du fichier
function addMp3ToList(){
	mp3[nb_mp3]="$1"
	let "nb_mp3++"
}

#scanDossiersArtistes
#...
function scanDossiersArtistes(){
	n=$nb_dossiersArtistes

	let "n=n-1"
	for i in `seq 0 $n`;do
		dossier="${dossiersArtistes[$i]}"
		for f in "$dossier"/*; do		
			isdir=`file -b "$f" |grep -c directory`
			if [ $isdir -eq 1 ]; then
				addSubFolderToList "$f" $pronfondeurAlbum
			else
				ismp3=`echo "$f"  | grep -c .mp3`
				if [ $ismp3 -eq 1 ]; then
					addMp3ToList "$f"
				fi
			fi
		echo "# $nb_mp3 fichier(s) à traiter"
		done
	done
}

#scanDossiersAlbums
#...
function scanDossiersAlbums(){
	n=$nb_dossiersAlbums

	let "n=n-1"
	for i in `seq 0 $n`;do
		dossier="${dossiersAlbums[$i]}"
		for f in "$dossier"/*; do		
			ismp3=`echo "$f"  | grep -c .mp3`
			if [ $ismp3 -eq 1 ]; then
				addMp3ToList "$f"
			fi
		echo "# $nb_mp3 fichier(s) à traiter"
		done
	done
}

#traiterMP3
#...
function traiterMP3(){
	n=$nb_mp3
	let "n=n-1"
	for i in `seq 0 $n`;do
		f="${mp3[$i]}"
		artiste=`echo $f | cut -d'/' -f $((pronfondeurArtiste+1))`
		album=`echo $f | cut -d'/' -f $((pronfondeurAlbum+1))`		
		chansonExt=`basename "$f"`
		
		let "chansonLong= ${#chansonExt} - 4"
		chanson=`expr substr "$chansonExt" 1 $chansonLong`

		if [ `echo "$artiste" |grep -c ".mp3"` -eq 1 ]; then
			artiste=" "
		fi
		if [ `echo "$album" |grep -c ".mp3"` -eq 1 ]; then
			album=" "
		fi
		id3v2 -a "$artiste" -A "$album" -t "$chanson" "$f"

		let "progress = i*100/nb_mp3"
		echo $progress
		let "enCours = i+1"
		echo "# $enCours fichier(s) traité(s) sur $nb_mp3"
	done
	#zenity --info --text "Traitement terminé: $nb_mp3 fichier(s) modifié(s)"
}


#main
cheminCourant="`pwd`"

getPronfondeurArtiste
pronfondeurArtiste=$?
let "pronfondeurAlbum=$pronfondeurArtiste + 1"
getProfondeurRelative $cheminCourant
let "pronfondeurCourante=$? + $pronfondeurArtiste -1"


while [ $# -gt 0 ]; do
	isdir=`file -b "$1" |grep -c directory`
	if [ $isdir -eq 1 ]; then
		let "pronfondeur=$pronfondeurCourante + 1"
		addSubFolderToList "$cheminCourant/$1" $pronfondeur
	else
		ismp3=`echo "$1"  | grep -c .mp3`
		if [ $ismp3 -eq 1 ]; then
			addMp3ToList "$cheminCourant/$1"
		fi
	fi
	shift
done

(scanDossiersArtistes
scanDossiersAlbums
zenity --question --text="$nb_mp3 fichier(s) seront modifié(s), voulez-vous continuer ?"
if [ "$?" = 0 ] ; then
	traiterMP3
else
	echo "#Opération annulée..."
fi
) |
zenity --progress  --title="ReTAG mp3" --text="fichier(s) à traiter"  --percentage=0

Dernière modification par neuneu (Le 01/01/2009, à 13:18)

Hors ligne