Pages : 1
#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