#1 Le 09/04/2009, à 17:42
- WW
[Script] Génération de playlists m3u
Bonjour à tous,
Voici un petit script qui crée des playlists de manière récursive pour chaque sous-dossiers de fichier musicaux du dossier passé en paramètre. Il crée également des playlists générales.
#!/bin/bash
# Liste des formats : ajouter ceux supportés par le lecteur que vous utilisez
listeFormats="*.mp3 *.ogg *.flac *.wav"
# Fichier temporaire pour parcourir le résultat de ls
listingRep="$HOME/.PlayListGenerator"
# traitementRepertoire prend un argument le répertoire à traiter
traitementRepertoire() {
sousDossier="false"
if [ "$1" = "" ]; then
chemin="$music/regexVar"
else
chemin="$chemin$1/"
fi
for i in $listeFormats; do
if [ "${i%.*}" != "*" ]; then
echo "$chemin$i" >> "$playlists/$1.m3u"
fi
done
ls > $listingRep
cat $listingRep | # On parcours les sous-dossiers
while read repertoire; do
if [ -d "$repertoire" ]; then
sousDossier="true"
cd "$repertoire"
traitementRepertoire "$repertoire"
# Création d'une playlist générale pour $1 #
if [ -e "$playlists/$repertoire.m3u" ]; then
cat "$playlists/$repertoire.m3u" >> "$playlists/all_$1.m3u"
fi
cd ..
chemin=`expr "$chemin" : '\(.*/\).*/'` # chemin = tous ce qui se trouve avant l'avant-dernier "/" (avant-dernier "/" compris)
fi
done
if [ "$sousDossier" = "true" ]; then
cat "$playlists/$1.m3u" >> "$playlists/all_$1.m3u" # Création de la playlist générale du répertoire courant ($1)
fi
if [ -e "$playlists/all_$1.m3u" ]; then
cat "$playlists/all_$1.m3u" >> "$playlists/all.m3u" # Ajout d'élements dans la playlist générale de @
fi
}
#~ Programme ~#
if [ $# != 1 -a $# != 2 -o "$1" = "-h" ]; then
echo -e "-------> PlayListGenerator : <-------\n"
echo -e "Ce script permet de générer des playlists m3u.\n"
echo "Usage : $0 <dossier musical> [dossier des playlists]"
echo -e " $0 [options]\n"
echo "Si le second argument est omis les playlists"
echo -e "sont générées dans le répertoire ~/Playlists.\n"
echo "Options :"
echo -e " -h\tAffiche cette mini-aide"
exit 0;
fi
creation=1
if [ $# = 2 ]; then
if [ ! -d "$2" ]; then creation=0; mkdir "$2"; fi
playlists="$2"
else
if [ ! -d "$HOME/Playlists" ]; then creation=0; mkdir "$HOME/Playlists"; fi
playlists="$HOME/Playlists"
fi
# Dossier où se trouve votre musique
music="$1"
if [ $creation = 1 ]; then
echo "Voulez vous supprimer les anciennes playlist du dossier $playlists ? (O\n)"
read reponse
if [ "$reponse" = "O" -o "$reponse" = "Oui" -o "$reponse" = "o" -o "$reponse" = "oui" -o "$reponse" = "" ]; then
rm $playlists/*.m3u
fi
fi
if [ -e "$playlists/all.m3u" ]; then
rm "$playlists/all.m3u" # Suppression de la playlist générale, elle est recréée pour inclure les nouveaux éléments
fi
cd $music
traitementRepertoire ""
if [ -e "$playlists/.m3u" ]; then
mv "$playlists/.m3u" "$playlists/Non-Classé.m3u" # La première playlist créée est celle des morceaux non classé à la racine
fi
mv "$playlists/all_.m3u" "$playlists/tout_sans_les_non-classés.m3u"
rm $listingRep
echo "Génération des playlists effectuée"
Remarque : Pour ajouter des formats éditer la ligne :
listeFormats="*.mp3 *.ogg *.flac *.wav"
Pour récupérer ce script, copier ce code avec n'importe quel éditeur de texte dans un fichier texte du nom que vous voulez.
Donner les permissions d'exécution à ce fichier en cliquant (droit) sur lui puis Propriétés>Permissions puis cocher "Autoriser l'exécution du fichier comme un programme".
Ensuite pour lancer le script (au choix):
->Le placer dans ~/.gnome2/nautilus-scripts/
Ceci permet de lancer le script via un clic-droit>Scripts>nomQueVousAvezChoisi sur le dossier dont vous voulez créer les playlists.
->Remplacer les lignes :
# Dossier où se trouve votre musique
music="$1"
par le chemin du répertoire des musiques à traiter.
par exemple music="~/Musiques"
Puis double-cliquer dessus.
->Via un terminal :
CHEMIN/nomQueVousAvezChoisi MUSIQUES
où CHEMIN est le chemin du répertoire contenant le script
MUSIQUES le chemin du répertoire des musiques à traiter.
par exemple ~/Scripts/playListM3U ~/Musiques
Dernière modification par nesthib (Le 01/11/2013, à 06:06)
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#2 Le 29/04/2009, à 17:12
- guitorika
Re : [Script] Génération de playlists m3u
salut a toi !!
bon voila mon petit souci : je suis un petit débutant chez linux alors je voudrais savoir que dois je faire avec le code que tu nous fournis ??
merci
#3 Le 29/04/2009, à 23:32
- AnsuzPeorth_out
Re : [Script] Génération de playlists m3u
Bjr,
Si c'est pour créer des playlist a la racine de chaque dossier, plutot que de faire des ls et de if, tu peux aussi passer par find:
c'est une vieille commande que j'utilise pour faire mes playlist.
$DOSSIER étant le dossier à scanner (avec ses sous dossiers). Si une playlist à déjà était généré par cette ligne, attention, le résultat est ajouté au fichier.m3u
find "$DOSSIER" -type f -printf "%p@%h\n" | while read ligne ; do [ "$(egrep "(\.mp3|\.ogg|\.wmv)" <<< "$ligne")" ] && echo "$(cut -d "@" -f1 <<< $ligne)" >> "$(echo $(cut -d "@" -f2 <<< $ligne)/list_"$(basename "$(cut -d "@" -f2 <<< $ligne)")".m3u)" ; done
C'est une commande en ligne, tu peux décomposer pour ajouter des vérifications diverses.
Il serait aussi possible de faire avec awk, pour se passer de la boucle, en cas de gros dossiers, ca faudrait peut être le cout de s'y pencher ! (vitesse d'exécution)
ps: j'y regarderais tiens à l'occas, des que je suis rentré chez moi, ici j'ai aucune doc, lien, exemples sous la main, et awk, je maîtrise pas encore complètement, donc de tête comme ça..pas évident. Mémoire de poisson rouge qd tu nous tiens....! Mais ca devrait être assez simple de faire cette commande awk ! )
#4 Le 01/05/2009, à 15:28
- WW
Re : [Script] Génération de playlists m3u
Salut,
@guitorika : Pour utiliser un script tu dois ouvrir un éditeur de texte (n'importe lequel) pour y copier le code. Tu nomme le fichier comme tu veux (pour l'exemple je l'appelle playListM3U).
Remarque : il n'y a pas besoin d'extension cependant tu peux en mettre une, ici c'est un script bash (l'extension associée est .bash).
Ensuite tu fais clic-droit>Propriétés>Permissions là tu coche "Autoriser l'exécution du fichier comme un programme", ce qui permet d'indiquer que ce fichier texte est un fichier texte exécutable (puisque son contenu est du code).
Ensuite pour le lancer tu soit modifier la ligne
# Dossier où se trouve votre musique
music="$1"
En remplacant $1 par le chemin de ta musique.
par exemple music="~/Musiques"
Sinon ouvre un terminal puis ./CHEMIN/playListM3U ~/Musiques
Ou CHEMIN est à remplacer par le chemin du script par exemple ./Scripts/playListM3U
@AnsuzPeorth_out
Je ne connaissais pas la commande find quand j'ai écris le script pour mpd (dont celui ci n'est qu'une légère modification). De plus le but à la base autre que de faire des playlists était de coder un parcours récursif.
J'ai depuis découvert la commande find, et je me suis dis "Faudra que je recode ça avec find un de ces quatres.".
Pour l'instant j'ai toujours pas pris le temps, mais libre à toi de modifier ce script si tu as l'envie et la motivation .
Et merci pour ta ligne de traitement, les fameux scripts uniligne.
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#5 Le 01/05/2009, à 17:12
- AnsuzPeorth
Re : [Script] Génération de playlists m3u
Pour l'instant j'ai toujours pas pris le temps, mais libre à toi de modifier ce script si tu as l'envie et la motivation .
Ben modifier !!! Je vois pas, tu fais des tests qui te sont surement utile dans le script original.
Sinon, j'ai pris 10 mn pour faire ca avec awk (traitement 2 fois plus rapide qu'une boucle), bien sur, comme tjrs , ca peut etre amélioré !
find "$DOSSIER" -type f -printf "\"%p\"@\"%h\"" | egrep "(\.mp3|\.ogg|\.wma)" | awk -F@ '{fichier=$1 ; chemin=$2} {string=sprintf("echo %s >> %s/00-$(basename %s).m3u", fichier, chemin, chemin)}{system(string)}'
Pour supprimer les m3u .
find "$DOSSIER" -type f -name "*m3u" -delete
J'aurais pu utiliser rm -R ...mais je sais pas pourquoi, j'aime pas ce rm -R
Donc pour moi, ce script s'arrête là,la premier ligne, il crée juste des playlists, c'est tout .
edit: sur mon premier post, le \n n'est pas obligatoire, il était là pour mes tests en console, oublie de ma part !
Dernière modification par AnsuzPeorth (Le 01/05/2009, à 17:16)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#6 Le 26/12/2010, à 12:21
- Machtheld
Re : [Script] Génération de playlists m3u
Bonjour à tous,
Je viens d'essayer d'utiliser ce script. Comment fait-on pour créer les playlists dans le même répertoire que les fichiers?
(Le chemin d'accès des playlists générées par ce script n'est pas bon, cela donne /Musique/chemindufichier au lieu de ../Musique/chemindufichier...et je ne m'y connais pas assez en php pour trouver la boulette...)
Merci beaucoup d'avance!
Dernière modification par Machtheld (Le 26/12/2010, à 12:58)
Hors ligne
#7 Le 18/09/2013, à 20:34
- roukmouth
Re : [Script] Génération de playlists m3u
Je vous propose mon script qui s'est inspiré de celui de WW. Il utilise uniquement la commande "find" pour lister les répertoires ainsi que les musiques afin de gagner du temps de traitement.
#!/bin/sh
# Chemin des musiques
if [ $# = 1 ]; then
music="${1}"
else
music="/volume1/music"
fi
# Liste des formats : ajouter ceux supportés par le lecteur utilisé
# listeFormats='mp3 ogg flac wav wma class mp2 mpc'
listeFormats='mp3 ogg flac wav wma mp2'
# Nom des playlists
playlist='00 - playlist.m3u'
# Fichier temporaire pour parcourir le résultat de ls
listingRep="$HOME/.playlistGenerator"
# Fichier de log
dateLog=`date "+%Y%m"`
logFile="$HOME/logs/playlistGenerator_${dateLog}.log"
echo "### "`date "+%Y-%m-%d %H:%M:%S"` "DEMARRAGE DE LA GENERATION DES PLAYLISTS ###" >> $logFile
echo `date "+%Y-%m-%d %H:%M:%S"` ": Nettoyage des repertoires" >> $logFile
# Nettoyage des répertoires
find "${music}" -type f -name "Thumbs.db" -delete
find "${music}" -type d -name "@eaDir" -exec rm -Rf {} \;
echo `date "+%Y-%m-%d %H:%M:%S"` ": Suppression des playlists" >> $logFile
# Suppression des playlists
find "${music}" -type f -name "${playlist}" -delete
echo `date "+%Y-%m-%d %H:%M:%S"` ": Listing des repertoires" >> $logFile
# Listing des répertoires
find "${music}" -type d | sort > "${listingRep}"
echo `date "+%Y-%m-%d %H:%M:%S"` ": Edition des playlists" >> $logFile
# On parcours les sous-dossiers
cat "${listingRep}" |
while read rep; do
cd "${rep}"
echo `pwd`
# Création de la playlist
> "${rep}/${playlist}"
# Boucle sur les extensions
for ext in $listeFormats; do
# Edition de la playlist
find . -type f -iname "*.${ext}" | sort >> "${rep}/${playlist}"
done
# Suppression de la playlist si elle est vide
if [ ! -s "${rep}/${playlist}" ]; then
echo "Aucune musique dans le repertoire ${rep}"
rm "${rep}/${playlist}"
fi
done
echo `date "+%Y-%m-%d %H:%M:%S"` ": Suppression du listing des repertoires" >> $logFile
# Suppression du listing des répertoires
rm "${listingRep}"
echo "### "`date "+%Y-%m-%d %H:%M:%S"`" : FIN DE LA GENERATION DES PLAYLISTS ###" >> $logFile
Hors ligne
#8 Le 10/11/2013, à 16:54
- samguili
Re : [Script] Génération de playlists m3u
Je vous propose mon script qui s'est inspiré de celui de WW. Il utilise uniquement la commande "find" pour lister les répertoires ainsi que les musiques afin de gagner du temps de traitement.
#!/bin/sh # Chemin des musiques if [ $# = 1 ]; then music="${1}" else music="/volume1/music" fi # Liste des formats : ajouter ceux supportés par le lecteur utilisé # listeFormats='mp3 ogg flac wav wma class mp2 mpc' listeFormats='mp3 ogg flac wav wma mp2' # Nom des playlists playlist='00 - playlist.m3u' # Fichier temporaire pour parcourir le résultat de ls listingRep="$HOME/.playlistGenerator" # Fichier de log dateLog=`date "+%Y%m"` logFile="$HOME/logs/playlistGenerator_${dateLog}.log" echo "### "`date "+%Y-%m-%d %H:%M:%S"` "DEMARRAGE DE LA GENERATION DES PLAYLISTS ###" >> $logFile echo `date "+%Y-%m-%d %H:%M:%S"` ": Nettoyage des repertoires" >> $logFile # Nettoyage des répertoires find "${music}" -type f -name "Thumbs.db" -delete find "${music}" -type d -name "@eaDir" -exec rm -Rf {} \; echo `date "+%Y-%m-%d %H:%M:%S"` ": Suppression des playlists" >> $logFile # Suppression des playlists find "${music}" -type f -name "${playlist}" -delete echo `date "+%Y-%m-%d %H:%M:%S"` ": Listing des repertoires" >> $logFile # Listing des répertoires find "${music}" -type d | sort > "${listingRep}" echo `date "+%Y-%m-%d %H:%M:%S"` ": Edition des playlists" >> $logFile # On parcours les sous-dossiers cat "${listingRep}" | while read rep; do cd "${rep}" echo `pwd` # Création de la playlist > "${rep}/${playlist}" # Boucle sur les extensions for ext in $listeFormats; do # Edition de la playlist find . -type f -iname "*.${ext}" | sort >> "${rep}/${playlist}" done # Suppression de la playlist si elle est vide if [ ! -s "${rep}/${playlist}" ]; then echo "Aucune musique dans le repertoire ${rep}" rm "${rep}/${playlist}" fi done echo `date "+%Y-%m-%d %H:%M:%S"` ": Suppression du listing des repertoires" >> $logFile # Suppression du listing des répertoires rm "${listingRep}" echo "### "`date "+%Y-%m-%d %H:%M:%S"`" : FIN DE LA GENERATION DES PLAYLISTS ###" >> $logFile
Ce script est fabuleux ! Il m'a traité 140 go de ziks en 15s...Trop fort. Un grand merci à WW et bien sur à roukmouth pour le partage de leur travail, qui augmente radicalement mon confort !
Dernière modification par samguili (Le 10/11/2013, à 16:55)
ubuntu 15.10 64bits, 8 go ram, AMD A8-3870, ATI HD7770
Hors ligne
#9 Le 12/11/2013, à 09:51
- roukmouth
Re : [Script] Génération de playlists m3u
Ce script est fabuleux ! Il m'a traité 140 go de ziks en 15s...Trop fort. Un grand merci à WW et bien sur à roukmouth pour le partage de leur travail, qui augmente radicalement mon confort !
Merci beaucoup, ça fait plaisir !
J'ai oublié de préciser, qu'à la différence du script de WW, le mien crée les playlists dans les sous-répertoires où se situent les MP3 et pas dans un répertoire spécifique.
Je n'ai pas précisé non plus que ce script génère des logs. Comme il s'agit, chez moi, d'une exécution automatique, je trouvais ça plus pratique mais c'est pas très compliqué de les désactiver.
A vous de voir entre les 2 scripts...
Dernière modification par roukmouth (Le 12/11/2013, à 09:56)
Hors ligne
#10 Le 23/02/2014, à 19:01
- LeKiffeur
Re : [Script] Génération de playlists m3u
Nickel merci !
Hors ligne
#11 Le 18/01/2015, à 12:03
- matyoo
Re : [Script] Génération de playlists m3u
merci pour ce script
Hors ligne
#12 Le 14/06/2020, à 14:02
- willcoyote
Re : [Script] Génération de playlists m3u
Merci pour ce script, c'est parfait
Hors ligne
#13 Le 14/06/2020, à 15:03
- Watael
Re : [Script] Génération de playlists m3u
il ne fallait faire remonter ce sujet.
les accolades : inutile
les backticks (`) : obsolète *
cat : inutile *
cd : inutile
il manque une fonction log pour ne pas répéter dans tout le script date '%...'
log() { date +"%Y-%m-%d %H:%M :: $@" >>"$log";}
--
* c'était déjà le cas en 2009, et dix ans plus tard, ce n'est toujours pas corrigé, et c'est toujours pris en exemple, et ça ne risque donc pas de disparaître des pratiques des débutants.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 14/06/2020, à 16:20
- willcoyote
Re : [Script] Génération de playlists m3u
Désolé mais je cherchais un moyen pour créer des playlists dans tout mes dossiers.
Je suis tombé la dessus et ça fait parfaitement le boulot.
Remercier les auteurs est la moindre des politesses
Hors ligne
#15 Le 14/06/2020, à 16:42
- Watael
Re : [Script] Génération de playlists m3u
7 ans plus tard ? c'est inutile, aussi. XD
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 08/08/2020, à 06:43
- abecidofugy
Re : [Script] Génération de playlists m3u
il ne fallait faire remonter ce sujet.
les accolades : inutile
les backticks (`) : obsolète *
cat : inutile *
cd : inutileil manque une fonction log pour ne pas répéter dans tout le script date '%...'
log() { date +"%Y-%m-%d %H:%M :: $@" >>"$log";}
--
* c'était déjà le cas en 2009, et dix ans plus tard, ce n'est toujours pas corrigé, et c'est toujours pris en exemple, et ça ne risque donc pas de disparaître des pratiques des débutants.
Comme tu as l’air de toucher, tu pourrais « forker » et adapter ce script aux bonnes méthodes de 2020. Non ? Une idée comme ça.
KDE neon
Hors ligne
#17 Le 09/09/2020, à 16:03
- LeoMajor
Re : [Script] Génération de playlists m3u
bonjour,
fapg
Description: Fast Audio Playlist Generator
FAPG is a tool to generate list of audio files (Wav, MP3, Ogg, etc)
in various formats (M3U, PLS, XSPF, HTML, etc).
sudo apt/aptitude install fapg
fapg -f m3u -o play.m3u ~/Musique
mplayer -playlist play.m3u
Hors ligne