réorganiser un fichier m3u par ordre alphabétique

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Salut à tous,

j'ai un fichier m3u dont l'ordre ne me plait pas trop... C'est un très gros fichier (intégrale de Bach pour orgue) et j'aimerai ranger cette playlist par BWV### (qui ne se trouve pas toujours en fin de ligne)

Voici un extrait :

Code : Tout sélectionner

#EXTM3U
#EXTINF:141,Christopher Herrick - Bach: Ach bleib' bei uns, Herr Jesu Christ, BWV649
./Bach The Complete Organ Works/194 Bach Ach bleib bei uns, Herr Jesu Christ, BWV649.flac
#EXTINF:105,Christopher Herrick - Bach: Ach Gott und Herr, BWV692
./Bach The Complete Organ Works/328 Bach Ach Gott und Herr, BWV692.flac
#EXTINF:129,Christopher Herrick - Bach: Ach Gott und Herr, BWV693
./Bach The Complete Organ Works/329 Bach Ach Gott und Herr, BWV693.flac
...
#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude
./Bach The Complete Organ Works/067 Bach Prelude and Fugue in D minor, BWV549a - Movement 1 Prelude.flac
#EXTINF:225,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 2: Fugue
./Bach The Complete Organ Works/068 Bach Prelude and Fugue in D minor, BWV549a - Movement 2 Fugue.flac
...
#EXTINF:235,Christopher Herrick - Bach: Trio Sonata in G major, BWV530 - Movement 1: Vivace
./Bach The Complete Organ Works/013 Bach Trio Sonata in G major, BWV530 - Movement 1 Vivace.flac
#EXTINF:249,Christopher Herrick - Bach: Trio Sonata in G major, BWV530 - Movement 2: Lento
./Bach The Complete Organ Works/014 Bach Trio Sonata in G major, BWV530 - Movement 2 Lento.flac
#EXTINF:225,Christopher Herrick - Bach: Trio Sonata in G major, BWV530 - Movement 3: Allegro
./Bach The Complete Organ Works/015 Bach Trio Sonata in G major, BWV530 - Movement 3 Allegro.flac
...
Avant de sortir python, je me demande si c'est pas faisable en bash... le problème c'est que les lignes vont par 2 : le #EXTINF suivis du chemin du fichier et aussi, que certaines pièces ont plusieurs fichiers qui se suivent (les préludes fugues par 2, mes des fois par 3 ou 4...)

Je suppose qu'il va falloir sortir les regex, j'ai regardé le man de la commande sort, elle ne les prend pas en charge. Est ce que quelqu'un à une piste ?


Merci
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

…ranger cette playlist par BWV### …
C'est fait à la "va vite", mais essaye avec ça pour voir si ce qui s'affiche te convient

Code : Tout sélectionner

cat fichier.m3u | sed 's/#EXTM3U/000#EXTM3U/' | awk -F "," '{print $NF, ";--;"$0}' | sort | awk -F ";--;" '{print $NF}' | sed 's/000#EXTM3U/#EXTM3U/'

Code : Tout sélectionner

michel@debg53sw:~/aef$ cat fichier.m3u
#EXTM3U
#EXTINF:141,Christopher Herrick - Bach: Ach bleib' bei uns, Herr Jesu Christ, BWV649
./Bach The Complete Organ Works/194 Bach Ach bleib bei uns, Herr Jesu Christ, BWV649.flac
#EXTINF:105,Christopher Herrick - Bach: Ach Gott und Herr, BWV692
./Bach The Complete Organ Works/328 Bach Ach Gott und Herr, BWV692.flac
#EXTINF:129,Christopher Herrick - Bach: Ach Gott und Herr, BWV693
./Bach The Complete Organ Works/329 Bach Ach Gott und Herr, BWV693.flac
#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude
./Bach The Complete Organ Works/067 Bach Prelude and Fugue in D minor, BWV549a - Movement 1 Prelude.flac
#EXTINF:225,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 2: Fugue
./Bach The Complete Organ Works/068 Bach Prelude and Fugue in D minor, BWV549a - Movement 2 Fugue.flac

Code : Tout sélectionner

michel@debg53sw:~/aef$ cat fichier.m3u | sed 's/#EXTM3U/000#EXTM3U/' | awk -F "," '{print $NF, ";--;"$0}' | sort | awk -F ";--;" '{print $NF}' | sed 's/000#EXTM3U/#EXTM3U/'
#EXTM3U
#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude
./Bach The Complete Organ Works/067 Bach Prelude and Fugue in D minor, BWV549a - Movement 1 Prelude.flac
#EXTINF:225,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 2: Fugue
./Bach The Complete Organ Works/068 Bach Prelude and Fugue in D minor, BWV549a - Movement 2 Fugue.flac
#EXTINF:141,Christopher Herrick - Bach: Ach bleib' bei uns, Herr Jesu Christ, BWV649
./Bach The Complete Organ Works/194 Bach Ach bleib bei uns, Herr Jesu Christ, BWV649.flac
#EXTINF:105,Christopher Herrick - Bach: Ach Gott und Herr, BWV692
./Bach The Complete Organ Works/328 Bach Ach Gott und Herr, BWV692.flac
#EXTINF:129,Christopher Herrick - Bach: Ach Gott und Herr, BWV693
./Bach The Complete Organ Works/329 Bach Ach Gott und Herr, BWV693.flac
michel@debg53sw:~/def$ 
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Ouawww,ça marche presque (j'avais oublié de précisé que ça pouvait monter au dessus de 1000, mais je vais pouvoir corriger à la main), mais surtout je comprends rien à comment ça fonctionne, d'autant plus que tu n'as pas utilisé la chaine "BWV" dans cette commande :o
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

cat fichier.m3u => afficher le fichier

=======
sed 's/#EXTM3U/000#EXTM3U/' => changer le texte #EXTM3U par 000#EXTM3U

=======
awk -F "," '{print $NF, ";--;"$0}'

-F ","
=> le séparateur de champ sera la virgule
print $NF => afficher le dernier champ (NF <=> Number of Fields)
, ";--;"$0 => suivit de ;--; et de la ligne originale

Ce qui fait que par exemple :
#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude
va devenir :
BWV549a - Movement 1: Prelude ;--;#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude

=======
sort => va trier les lignes

=======
awk -F ";--;" '{print $NF}'

-F ";--;" => le séparateur de champ sera la suite de caractères ;--;
print $NF => afficher le dernier champ

Ce qui fait que par exemple :
BWV549a - Movement 1: Prelude ;--;#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude
va devenir :
#EXTINF:124,Christopher Herrick - Bach: Prelude and Fugue in D minor, BWV549a - Movement 1: Prelude


=======
sed 's/000#EXTM3U/#EXTM3U/' => changer le texte 000#EXTM3U par #EXTM3U
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5860
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

ça me fait penser à ceux qui s'amusent à compacter un code au maximum, juste pour le fun :)
Avatar de l’utilisateur
wetaskiwin
Membre très actif
Membre très actif
Messages : 1023
Inscription : 23 avr. 2016, 19:06
Localisation : Île de France
Status : Hors-ligne

Salut,

J'aimerais bien savoir quel programme génère ce type de fichiers m3u. Ceux que j'obtiens avec XFCA sont nettement moins "bavards".
On cède d’abord sur les mots et puis, peu à peu, aussi sur les choses (Sigmund Freud - Psychologie des foules et analyse du moi)
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Ok merci pour les infos,
En lisant la doc du format m3u (version courte sur wikipédia), j'ai découvert qu'il y a une version étendue, c'est cette version qui est utilisée par VLC (que j'ai utilisé ici)

Par contre je suis en train de voir si je vais pas utiliser plutôt le format XSPF (si kodi les gère)
Avatar de l’utilisateur
wetaskiwin
Membre très actif
Membre très actif
Messages : 1023
Inscription : 23 avr. 2016, 19:06
Localisation : Île de France
Status : Hors-ligne

Les fichiers .xspf sont aussi très bavards. Un exemple obtenu lors un test d'encodage sur 2 titres avec XFCA :
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<trackList>
<track><location>/media/musique5/# Musiques/Le Gruyère qui tue (12)//01 La jalousie de Pitoiseau.mp3</location></track>
<track><location>/media/musique5/# Musiques/Le Gruyère qui tue (12)//02 Le piège du mot croisé.mp3</location></track>
</trackList>
</playlist>
Avec le chemin complet vers les fichiers, pas moyen de les déplacer sans perdre le bénéfice du .xspf.
On cède d’abord sur les mots et puis, peu à peu, aussi sur les choses (Sigmund Freud - Psychologie des foules et analyse du moi)
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

tu n'est pas obligé de mettre le chemin complet. j'ai fait quelques tests hier en mettant des chemins relatifs, ça fonctionne très bien
Avatar de l’utilisateur
wetaskiwin
Membre très actif
Membre très actif
Messages : 1023
Inscription : 23 avr. 2016, 19:06
Localisation : Île de France
Status : Hors-ligne

Les fichiers .m3u sont plus faciles à modifier, en enlevant toute mention de chemin.
m3u version simple a écrit :/media/musique5/# Musiques/Le Gruyère qui tue (12)//01 La jalousie de Pitoiseau.mp3
/media/musique5/# Musiques/Le Gruyère qui tue (12)//02 Le piège du mot croisé.mp3
On cède d’abord sur les mots et puis, peu à peu, aussi sur les choses (Sigmund Freud - Psychologie des foules et analyse du moi)
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Je viens de lire les spécifications XSPF Version 1

Je savais qu'on pouvait aussi bien utiliser des chemins relatifs et absolus que des liens web,
mais, en lisant le paragraphe concernant l'attribut track.location, je découvre que :
…xspf:track elements MAY contain zero or more location elements, …
On pourrait donc spécifier plusieurs liens du même fichier…
Je n'ai pas testé.
Avatar de l’utilisateur
wetaskiwin
Membre très actif
Membre très actif
Messages : 1023
Inscription : 23 avr. 2016, 19:06
Localisation : Île de France
Status : Hors-ligne

J'ai comparé deux listes de lecture créées (hors encodage) avec VLC et Clémentine.
Les deux gardent l'ordre de lecture que j'ai choisi alors que les titres sont numérotés.
Ça se complique quand VLC ne reconnaît pas le .xspf de Clémentine.
Dommage aussi qu'on ne puisse pas choisir quels éléments (<location>, <title>, <creator>, etc.) seront intégrés à la liste avant de la créer. Ou alors, je n'ai pas trouvé comment faire.
On cède d’abord sur les mots et puis, peu à peu, aussi sur les choses (Sigmund Freud - Psychologie des foules et analyse du moi)
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

…ça pouvait monter au dessus de 1000, mais je vais pouvoir corriger à la main…
Pas la peine de le faire à la main :

Code : Tout sélectionner

cat fichier.m3u | awk -F "BWV" '{sub(/ .*/,"",$2);printf "%04d", $2;print ";--;"$0}' | sort | awk -F ";--;" '{print $NF}'
Répondre