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