Sommaire
'lut les gens,
Le contexte général
Après avoir tagué ses fichiers audio via via une interface graphique et créer ses listes de lecture audio, je continue dans la série. J'ai découvert avec bonheur dans les commentaires l'outil beets qui permet de taguer les fichiers en ligne de commande et je me permets ici de partager cette découverte.
Présentation de l'outil beets
Présentation générale
Beets est un outil écrit en python qui tout comme MusicBrainz Picard permet de taguer automatiquement les fichiers audio à partir de la base de données musicales de MusicBrainz. Rappelons que MusicBrainz est une vaste bibliothèque musicale totalement libre qui collecte des métadonnées musicales que tout un chacun peut alimenter.
Import et saisie des métadatas
Beets va faire une passe sur vos fichiers audio, les identifie plus ou moins automatiquement, télécharge les métadatas, les inscrit dans sa base de données locale et peut les enregistrer directement dans chaque fichier. Il entre dans un mode interactif quand il n'arrive pas à identifier pleinement le fichier en faisant des propositions sur des pistes qu'il estime similaires et vraiment quand il n'y arrive pas, il faut aller faire un tour sur MusicBrainz pour relever et lui indiquer l'identifiant MBID du titre.
Cela va donner quelque chose comme ça lors d'une identification automatique
/anatole/musiques/classement par genre/rock/ACDC - hell bells.mp3
Tagging track: AC/DC - Hells Bells
URL:
https://musicbrainz.org/recording/5da479ac-3b98-43f6-88d8-6afeb9ccfcc7
(Similarity: 100.0%)
/anatole/musiques/classement par genre/rock/ACDC - highway to hell.mp3
Tagging track: AC/DC - Highway to Hell
URL:
https://musicbrainz.org/recording/5935ec91-8124-42ff-937f-f31a20ffe58f
(Similarity: 100.0%)
/anatole/musiques/classement par genre/rock/ACDC - Let Me Put My Love Into You.mp3
Tagging track: AC/DC - Let Me Put My Love Into You
URL:
https://musicbrainz.org/recording/69de4ab7-bfce-424e-b109-d96b34801516
(Similarity: 100.0%)
Quand il n'est pas tout à fait sûr, il demande une confirmation
/anatole/musiques/classement par genre/rock/3 door's down - when I'm gone.mp3
Correcting track tags from:
3 Doors Down - When I'm Gone
To:
3 Doors Down - When I’m Gone
URL:
https://musicbrainz.org/recording/aa82cd16-2777-4bd2-8068-851810fadae6
(Similarity: 93.6%) (length)
[A]pply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort? A
Quand il trouve plusieurs candidats possibles, il entre encore en mode interactif
/anatole/musiques/classement par genre/rock/ACDC - Big Gun.mp3
Finding tags for track "AC/DC - Big Gun".
Candidates:
1. AC/DC - Big Gun (58.3%) (id)
2. AC/DC - Big Gun (58.3%) (id)
3. AC/DC - Big Gun (58.3%) (id)
4. AC/DC - Big Gun (54.9%) (id, length)
5. AC/DC - Big Gun (50.0%) (id)
# selection (default 1), Skip, Use as-is, Enter search, enter Id, aBort? 1
Tagging track: AC/DC - Big Gun
URL:
https://musicbrainz.org/recording/0588b976-c15a-4ca4-89fc-46ca10dac2da
(Similarity: 58.3%) (id)
Apply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort? A
Et quand il ne propose rien de valable, il reste à lui indiquer le MBID
/anatole/musiques/classement par genre/rock/Jimi Hendrix - hey joe.mp3
Tagging track: The Jimi Hendrix Experience - Hey Joe
URL:
https://musicbrainz.org/recording/98839598-c702-4666-ba7f-1da11a1d6611
(Similarity: 83.3%) (length)
[A]pply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort? m
Finding tags for track "The Jimi Hendrix Experience - Hey Joe".
Candidates:
1. The Jimi Hendrix Experience - Hey Joe (83.3%) (length)
2. The Jimi Hendrix Experience - Hey Joe (50.0%) (id)
3. The Jimi Hendrix Experience - Hey Joe (50.0%) (id)
4. The Jimi Hendrix Experience - Hey Joe (50.0%) (id)
5. The Jimi Hendrix Experience - Hey Joe (41.7%) (id, length)
6. The Jimi Hendrix Experience - Hey Joe (41.7%) (id, length)
# selection (default 1), Skip, Use as-is, Enter search, enter Id, aBort? e
Artist: Jimi Hendrix
Track: Hey Joe
Tagging track: The Jimi Hendrix Experience - Hey Joe
URL:
https://musicbrainz.org/recording/98839598-c702-4666-ba7f-1da11a1d6611
(Similarity: 83.3%) (length)
[A]pply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort? i
Enter recording ID: 0a0d07ea-2933-4b4c-8f7f-b68a68013bfd
Correcting track tags from:
The Jimi Hendrix Experience - Hey Joe
To:
Jimi Hendrix - Hey Joe
URL:
https://musicbrainz.org/recording/0a0d07ea-2933-4b4c-8f7f-b68a68013bfd
(Similarity: 33.6%) (id, length, artist)
Apply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort? a
Filtrer avec beets
Une fois que la base de donnée est constituée et les métadatas téléchargées, il est assez simple ensuite de filtrer les fichiers suivant divers critères pour générer des playlists de lecture. La commande suivante permettra ainsi de créer une liste de lecture années 70.
beet list -f '$path' year:1970..1980 > playlist-années70.m3u
Pour connaitre les champs sur lesquels on peut filtrer, il faudra activer le plugins info et un beet info zz top legs donnera
/anatole/musiques/classement par genre/rock/ZZ top - leggs.mp3
album: Eliminator
albumartist: ZZ Top
albumstatus: official
albumtype: album
albumtypes: album
art: True
artist: ZZ Top
artist_sort: ZZ Top
artists: ZZ Top
bitdepth: 0
bitrate: 128000
bitrate_mode:
catalognum: CD 23774
catalognums: CD 23774
channels: 2
country: US
date: 1983-03-23
day: 23
disc: 1
disctotal: 1
encoder_info:
encoder_settings:
format: MP3
genre: Rock
genres: Rock
isrc: USWB10702822
label: Warner Bros. Records
length: 273.901875
mb_albumartistid: a81259a0-a2f5-464b-866e-71220f2739f1
mb_albumartistids: a81259a0-a2f5-464b-866e-71220f2739f1
mb_albumid: ac85b905-13c2-48f6-8951-d45612205fc2
mb_artistid: a81259a0-a2f5-464b-866e-71220f2739f1
mb_artistids: a81259a0-a2f5-464b-866e-71220f2739f1
mb_releasegroupid: c58b50f0-d7a4-322c-b281-d86ebe3b8acf
mb_releasetrackid: c1ced785-f7cb-3180-94f7-a9814419f949
mb_trackid: b7072e8d-39f8-4e7c-8c30-4317ca590d2e
media: CD
month: 3
original_date: 1983-01-01
original_year: 1983
samplerate: 44100
script: Latn
title: Legs
track: 6
tracktotal: 11
year: 1983
Dans lequel on pourra piocher les critères de recherche utiles pour créer une playlist.
Configuration de beets
La configuration de beets peut être assez poussée, d'autant qu'elle s'enrichit d'un nombre conséquent de plugins. Sans entrer dans le détail, voici un florilège de fichiers de configuration qui illustrent assez bien la puissance de l'outil, ici, là ou bien là encore.
Le plugin bpmanalyser
J'ai choisi pour illustrer les plugins de parler du plugin bpmanalyser qui permet de calculer le tempo d'un morceau et d'inscrire cette information dans un tag marqué bpm dans les métadatas. La commande beet bpmanalyser bpm:0 permettra de rajouter le tag à toutes les pistes de la base qui ne le possèdent pas.
Pour le fun, voici le script bash qui permet de créer une liste de lecture entre deux valeurs de BPM basé sur la commande ffprobe.
#!/bin/bash
read -p "Valeur tempo min (par défaut 0): " min
read -p "Valeur tempo max (par défaut 200): " max
read -p "Chemin absolu ou relatif dans le fichier playlist (par défaut relatif): " chemin
if [ -z "$min" ]
then
min=0
fi
if [ -z "$max" ]
then
max=200
fi
if [ "$chemin" = "absolu" ]
then
path=$(pwd)
else
path="."
fi
IFS=$'\n'
playlist="playlist/playlist-tempo-entre-$min-$max.m3u"
rm -f $playlist
for fichier in $(find $path type f | grep '/*.ogg\|/*.mp3\|/*.flac')
do
tempo=$(ffprobe -loglevel quiet -hide_banner -show_entries format_tags=TBPM -of default=noprint_wrappers=1:nokey=1 $fichier 2>&1)
if [ -n "$tempo" ]
then
if [ $tempo -gt $min ] && [ $tempo -lt $max ]
then
echo "Fichier trouvé $fichier tempo $tempo"
echo $fichier>>$playlist
fi
fi
done;
unset IFS
et voilà la même chose en une seule ligne
beet list -f '$path' bpm:50..100 > playlist-tempo-50-100.m3u
Cela donne des résultats surprenants, rappelons que le tempo correspond au battement régulier qui rythme le morceau. Il s’exprime en battement ou pulsation par minute et on peut très bien avoir des chansons bien rythmés avec du bon gros son de guitares saturées avec un tempo plutôt lent.
Le tempo n’est sans doute pas la valeur miracle pour créer des playlists de musiques qui sonnent de manière similaire à l’oreille et il sera sans doute utile de le compléter avec d’autres caractéristiques audio comme le rythme qui correspond à la durée des notes.
Le plugin acousticbrainz
Sans entrer dans des complications de traitement du signal pour analyser chaque fichier audio, il existe le plugin acousticbrainz qui permet de récupérer l’ensemble un certain nombre de champs d’analyse audio disponibles dans la base MusicBrainz, dont le rythme, la tonalité, la « dançabilité » d’un morceau, etc.
Une fois qu'on a téléchargé ces nouvelles données, on pourra par exemple créer une playlist en filtrant les titres dont la "dançabilité" est comprise entre 0.8 et 1, en tapant
beet list -f ‘$path’ danceable:0.8..1 > playlist-danceable-0.8-1.m3u.
Scripts de classement
En bonus je vous offre deux scripts, pour classer les fichiers audio, l'un par année de sortie et l'autre par artiste. Ils vont créer une arborescence avec des liens vers les fichiers d’origine. Ils seront bien sûr à adapter en modifiant les chemins par défaut.
Classement par année
#!/bin/bash
IFS=$'\n'
chemin="/ultra/data/musiques"
rep_genre="classement par genre"
rep_annee="classement par année"
rep_sans_annee="_Titres non datés"
if [ -d "$chemin/$rep_annee" ];then
rm -Rf $chemin/$rep_annee
fi
for fichier in $(find $chemin/$rep_genre type f | grep '/*.ogg\|/*.mp3\|/*.flac')
do
annee=$(ffprobe -loglevel quiet -hide_banner -show_entries format_tags=originalyear -of default=noprint_wrappers=1:nokey=1 $fichier 2>&1)
if [ -z "$annee" ]
then
if [ ! -d "$chemin/$rep_annee/$rep_sans_annee" ];then
mkdir -p $chemin/$rep_annee/$rep_sans_annee
fi
ln -s $fichier $chemin/$rep_annee/$rep_sans_annee
else
if [ ! -d "$chemin/$rep_annee/$annee" ];then
mkdir -p $chemin/$rep_annee/$annee
fi
ln -s $fichier $chemin/$rep_annee/$annee
fi
done;
unset IFS
Classement par artiste
#!/bin/bash
IFS=$'\n'
chemin="/ultra/data/musiques"
rep_genre="classement par genre"
rep_artiste="classement par artiste"
rep_sans_artiste="Artiste inconnu"
rm -Rf $chemin/$rep_artiste
for fichier in $(find $chemin type f | grep '/*.ogg\|/*.mp3\|/*.flac')
do
artiste=$(ffprobe -loglevel quiet -hide_banner -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 $fichier 2>&1)
if [ -z "$artiste" ]
then
if [ ! -d "$chemin/$rep_artiste/$rep_sans_artiste" ];then
mkdir -p $chemin/$rep_artiste/$rep_sans_artiste
fi
ln -s $fichier $chemin/$rep_artiste/$rep_sans_artiste
else
if [ ! -d "$chemin/$rep_artiste/$artiste" ];then
mkdir -p $chemin/$rep_artiste/$artiste
fi
ln -s $fichier $chemin/$rep_artiste/$artiste
fi
done;
unset IFS
Pour en savoir plus
Voilà un survol rapide de beets et je ne peux que vous inciter à aller faire un tour sur la page officielle pour en apprendre davantage.
Je vous invite également à visiter la page de mon blog qui rentre plus dans le détail de l'installation et de la configuration (basique) de beets.
# Petite erreur ?
Posté par gUI (Mastodon) . Évalué à 6.
T'es sûr de ton
$min=0
et$max=200
? C'est pas plutôtmin=0
etmax=200
?En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Petite erreur ?
Posté par Funix (site web personnel, Mastodon) . Évalué à 4.
Oups ! y a effectivement des $ en trop, si un modo pouvait corriger en passant par là, merci
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: Petite erreur ?
Posté par gUI (Mastodon) . Évalué à 5.
Fait :)
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# beets modify
Posté par saltimbanque (site web personnel) . Évalué à 5.
Même si l'appli est surtout vendue pour tout étiqueter "once & for all", j'aime bcp la fonctionnalité de pouvoir modifier une étiquette à la volée. Efficace pour retoucher sa base de données très rapidement.
https://docs.beets.io/en/latest/reference/cli.html#modify
# Quelques commandes que j'utilise
Posté par Benoît Laurent (site web personnel) . Évalué à 3.
J'utilise également beets, ci-dessous quelques commandes que j'utilise :
modify
de la dégrader à deux, tout ça pour éliminer au besoin certain album de la commande random suivante:Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.