Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 09/04/2009, à 18: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

Script adapté pour mpd.

Dernière modification par nesthib (Le 01/11/2013, à 07:06)


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#2 Le 29/04/2009, à 18: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 30/04/2009, à 00: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, à 16: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 big_smile.
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, à 18:12

AnsuzPeorth

Re : [Script] Génération de playlists m3u

WW a écrit :

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 big_smile.

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 smile

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, à 18: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, à 13: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, à 13:58)

Hors ligne

#7 Le 18/09/2013, à 21: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, à 17:54

samguili

Re : [Script] Génération de playlists m3u

roukmouth a écrit :

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 ! cool smile

Dernière modification par samguili (Le 10/11/2013, à 17:55)

Hors ligne

#9 Le 12/11/2013, à 10:51

roukmouth

Re : [Script] Génération de playlists m3u

samguili a écrit :

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 ! cool smile

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... wink

Dernière modification par roukmouth (Le 12/11/2013, à 10:56)

Hors ligne

#10 Le 23/02/2014, à 20:01

LeKiffeur

Re : [Script] Génération de playlists m3u

Nickel merci !

Hors ligne

Haut de page ↑