#1 Le 04/07/2013, à 10:22
- Fred-Prague
Script: exporter des mp3 vers un répertoire depuis une playlist pls
Bonjour à tous
Certains d'entre vous connaissent sans doute la problématique: de nos jours, une quantité d'appareils (autoradio, mini-chaînes, sèche-cheveux ...) sont capable de lire les fichiers mp3 depuis un CD, une clé USB ou carte mémoire. Hélas, la lecture des fichiers ogg ou flac est rarissime (et une partie de plus en plus importante de ma collection est dans ces formats) et d'autre part la lecture est généralement séquentielle selon l'ordre alphabétique des noms de fichiers (pas super quand on aime les petites compilations ciselées).
Depuis déjà plusieurs années, je pense me pencher sur un script qui permettrait, à partir d'une liste de lecture, d'exporter vers un répertoire des fichiers musicaux, en convertissant en mp3 ceux qui sont à un autre format et en numérotant les fichiers selon l'ordre de la liste de lecture.
À l'allure où ça va, je sens que je m'y mettrai à la retraite (ou au moins quand mes enfants auront l'âge de me laisser un peu de temps), alors je me permets de solliciter l'intervention de vous, pour qui ce sera sûrement un jeu d'enfant. Merci d'avance.
Voici le contenu d'une liste au format pls à titre d'exemple: trois fichiers (un en mp3, un en ogg et un en flac).
[playlist]
X-GNOME-Title=Liste1
NumberOfEntries=3
File1=file:///home/magdafred/Musique/Crowded%20House/Recurring%20Dream%20-%20The%20Very%20Best%20Of%20Crowded%20House/5.%20Don't%20Dream%20It's%20Over%20-%20Crowded%20House.mp3
Title1=Don't Dream It's Over
File2=file:///home/magdafred/Musique/Dave%20Brubeck/Columbia%20Jazz%20Profiles/01.%20Dave%20Brubeck%20-%20Take%20Five.ogg
Title2=Take Five
File3=file:///home/magdafred/Musique/Deep%20Purple/Singles%20A's%20and%20B's/08%20-%20Black%20Night.flac
Title3=Black Night
J'imaginerais le fonctionnement suivant:
Lire le nombre de morceaux à partir de la ligne «NumberOfEntries», puis répéter autant de fois que nécessaire les opérations suivantes.
À partir de chaque ligne «File#», déterminer le type de fichier.
Si le fichier n'est pas au format mp3, le convertir à l'aide d'un outil adéquat (sox?).
Recopier le fichier mp3 (d'origine ou converti) vers le répertoire (courant?), en rajoutant au début du nom de fichier un numéro ### (001,002 etc.) correspondant au rang du fichier dans la liste de lecture.
Peut-on faire ça avec script bash? Merci de vos conseils et de votre aide.
Si quelqu'un trouve ça tellement facile qu'il peut poster un script «tout cuit», je ne protesterai pas mais, alors, j'apprécierais beaucoup des petits commentaires dans le script expliquant ce qui fait quoi, histoire de mieux me lancer moi-même.
Frédéric
Dernière modification par Fred-Prague (Le 04/07/2013, à 21:40)
Ubuntero depuis février 2007
01/2017: Poste principal+portable+mes gamins: Ubuntu 16.04 LTS avec Unity ou Gnome Classic
Hors ligne
#2 Le 05/07/2013, à 07:21
- pingouinux
Re : Script: exporter des mp3 vers un répertoire depuis une playlist pls
Bonjour,
Voici un canevas pour faire ce que tu veux :
#!/bin/bash
# On n'a pas besoin de "NumberOfEntries"
# Boucle sur toutes les lignes contenant "File#=file:///"
while read lig
do
# num = Numéro de "File#"
num=$(sed -rn 's#^File([0-9]+).*$#\1#p' <<<"$lig")
# nom = Nom complet du fichier (avec le chemin)
nom=$(sed -rn 's#^.*=file://(/.*)$#\1#p' <<<"$lig")
# typ = Type du fichier (extension)
typ=$(sed -rn 's#^.*=file:///.*\.([^./]+)$#\1#p' <<<"$lig")
# new_num = Numéro sur 3 chiffres (num=15 => new_num=015)
new_num=$(printf "%03d" "$num")
# mp3_nom = L'extension est remplacée par "mp3"
# (nom=/chemin/fic.ogg => mp3_nom=/chemin/fic.mp3)
mp3_nom="${nom%.*}.mp3"
# new_nom = Nom du fichier (sans le chemin)
# (mp3_nom=/chemin/fic.mp3 => new_nom=fic.mp3)
new_nom="${new_num}_$(basename "$mp3_nom")"
# Conversions à faire s'il y a lieu
ok=1
case $typ in
mp3) echo -e "Pas de conversion mp3 -> mp3\n";;
ogg) echo -e "Faire conversion \n$nom -> \n$mp3_nom\n";;
flac) echo -e "Faire conversion \n$nom -> \n$mp3_nom\n";;
*) echo "Type inconnu : $typ"; ok=;;
esac
# Copie du fichier à faire s'il y a lieu (dans le répertoire courant)
[ "$ok" ] && echo cp "$mp3_nom" ./"$new_nom"
echo
done < <(egrep 'File[0-9]+=file:///' "$1")
Utilisation :
mon_script ma_liste
Ce script ne modifie rien actuellement, et peut être lancé sans problème.
Il reste à faire les conversions en fonction du type, et à enlever le echo devant la commande cp si le résultat est correct.
Hors ligne
#3 Le 05/07/2013, à 12:02
- Fred-Prague
Re : Script: exporter des mp3 vers un répertoire depuis une playlist pls
Merci beaucoup pingouinux
Pour la partie conversion, je devrais m'en sortir avec sox (entre temps j'ai fait un petit script capable dans un répertoire de convertir en mp3 tous les ogg et flac puis de les effacer).
Cependant, ton script "à blanc" (je l'ai baptisé "plstomp3") me sort une erreur:
magdafred@magdafred-desktop:~/Bureau$ sh plstomp3 Voyage.pls
plstomp3: 10: plstomp3: Syntax error: redirection unexpected
Même si ce n'est pas a priori nécessaire, le script et la liste de lecture sont dans le répertoire courant.
Est-ce dû au chemin d'un fichier son dans la liste?
[playlist]
X-GNOME-Title=Voyage
NumberOfEntries=7
File1=/home/magdafred/Musique/Buty/PPOOMMAALLUU/Buty\ -\ Mam\ Jednu\ Ruku\ Dlouhou.mp3
Title1=Mam Jednu Ruku Dlouhou
File2=/home/magdafred/Musique/Cechomor/To\ nejlepsi\ (Vanocni\ edice)/Cechomor\ -\ Promeny.mp3
Title2=Promeny
File3=/home/magdafred/Musique/Eric\ Clapton/From\ the\ Cradle/01.\ Eric\ Clapton\ -\ Blues\ Before\ Sunrise.ogg
Title3=Blues Before Sunrise
File4=/home/magdafred/Musique/Crowded\ House/Recurring\ Dream\ -\ The\ Very\ Best\ Of\ Crowded\ House/5.\ Don't\ Dream\ It's\ Over\ -\ Crowded\ House.mp3
Title4=Don't Dream It's Over
File5=/home/magdafred/Musique/Dave\ Brubeck/Columbia\ Jazz\ Profiles/01.\ Dave\ Brubeck\ -\ Take\ Five.ogg
Title5=Take Five
File6=/home/magdafred/Musique/Various\ Artists/Rock\ Line\ 3/d2t08.\ Deep\ Purple\ -\ Smoke\ on\ the\ Water.ogg
Title6=Smoke on the Water
File7=/home/magdafred/Musique/Elvis\ Presley/Elv1s:\ 30\ %231\ Hits/31.\ Elvis\ vs.\ JXL\ -\ A\ Little\ Less\ Conversation\ (JXL\ radio\ edit\ remix).ogg
Title7=A Little Less Conversation (JXL radio edit remix)
Merci
Ubuntero depuis février 2007
01/2017: Poste principal+portable+mes gamins: Ubuntu 16.04 LTS avec Unity ou Gnome Classic
Hors ligne
#4 Le 05/07/2013, à 13:18
- pingouinux
Re : Script: exporter des mp3 vers un répertoire depuis une playlist pls
C'est un script bash, il faut l'appeler ainsi :
./plstomp3 Voyage.pls
ou bien
bash plstomp3 Voyage.pls
Voici une version corrigée, pour tenir compte du fait que tu as changé le format du fichier (File1=file:///home… -> File1=/home/…) :
#!/bin/bash
# On n'a pas besoin de "NumberOfEntries"
# Boucle sur toutes les lignes contenant "File#=file:///"
while read lig
do
# num = Numéro de "File#"
num=$(sed -rn 's#^File([0-9]+).*$#\1#p' <<<"$lig")
# nom = Nom complet du fichier (avec le chemin)
nom=$(sed -rn 's#^.*=(file://)?(/.*)$#\2#p' <<<"$lig")
# typ = Type du fichier (extension)
typ=$(sed -rn 's#^.*=(file://)?/.*\.([^./]+)$#\2#p' <<<"$lig")
# new_num = Numéro sur 3 chiffres (num=15 => new_num=015)
new_num=$(printf "%03d" "$num")
# mp3_nom = L'extension est remplacée par "mp3"
# (nom=/chemin/fic.ogg => mp3_nom=/chemin/fic.mp3)
mp3_nom="${nom%.*}.mp3"
# new_nom = Nom du fichier (sans le chemin)
# (mp3_nom=/chemin/fic.mp3 => new_nom=fic.mp3)
new_nom="${new_num}_$(basename "$mp3_nom")"
# Conversions à faire s'il y a lieu
ok=1
case $typ in
mp3) echo -e "Pas de conversion mp3 -> mp3\n";;
ogg) echo -e "Faire conversion \n$nom -> \n$mp3_nom\n";;
flac) echo -e "Faire conversion \n$nom -> \n$mp3_nom\n";;
*) echo "Type inconnu : $typ"; ok=;;
esac
# Copie du fichier à faire s'il y a lieu (dans le répertoire courant)
[ "$ok" ] && echo cp "$mp3_nom" ./"$new_nom"
echo
done < <(egrep 'File[0-9]+=(file://)?/' "$1")
Hors ligne