Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  Taguer ses fichiers audio en ligne de commande avec beets

 -  4 février - 

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

Commentaires : voir le flux Atom ouvrir dans le navigateur

par Funix

LinuxFr.org : les journaux

LinuxFr.org : Journaux

firefox, nouvelle fenêtre dans une session isolée

 -  15 avril - 

Les fenêtres de navigation privées de firefox partagent leurs cookies de session or je souhaitais avoir des fenêtres de navigation isolées, (qui ne (...)


Pretendo tente de déprogrammer l'obsolescence des consoles Nintendo

 -  9 avril - 

Ah Nal,Gros N vient de faire un gros doigt aux utilisateurs de ses consoles 3DS et Wii U en annonçant la fermeture des services en ligne pour (...)


[Trolldi] Vulgarisation sur l'IA pour décideur pressé

 -  5 avril - 

Cher 'Nal,Je fais un article-marque-page sur un post tout frais de Ploum où il est question d'un fantasme vieux comme le Talmud avec le Golem. (...)


Super Marian and Robin: les roms en collant

 -  3 avril - 

Bonjour Nal,Je t'écris pour te proposer de tester mon nouveau jeu: Super Marian and Robin.Il s'agit d'un jeu de plateformes pour un ou deux (...)


Le roi est mort, vive le roi ! Les alternatives de Redis sont là

 -  3 avril - 

Bonjour Nal !Après le changement de licence de Redis, ce qui devait arriver arriva, et des alternatives libres apparaissent.Tout d'abord, on a (...)