Recherche de site Web

Comment définir, modifier et supprimer des balises musicales avec Mutagen


Le marquage des fichiers musicaux est un moyen de garder une bibliothèque musicale bien organisée et de nous permettre de rechercher des chansons sur la base des artistes, des albums, du genre et d’autres paramètres. De nombreuses applications graphiques et en ligne de commande existent sous Linux pour gérer les balises des fichiers audio, comme Picard ou Quodlibet. La plupart de ces applications sont écrites en Python et utilisent le module « mutagène " à la base. Dans ce tutoriel, nous apprenons à l’utiliser directement.

Dans ce tutoriel, vous allez apprendre :

  • Comment installer le module mutagène python3
  • Comment ouvrir un fichier audio
  • Comment lire, ajouter et supprimer des balises
  • Comment accéder aux informations sur les flux audio

Configuration logicielle requise et conventions utilisées

Installation de mutagène

L’installation du module Python mutagène est assez simple. Le logiciel est gratuit et open source, et il est inclus dans les dépôts officiels des distributions Linux les plus couramment utilisées, telles que Fedora, Debian et ArchLinux, nous pouvons donc l’installer en utilisant les gestionnaires de paquets de ces systèmes. Sur Fedora, par exemple, le gestionnaire de paquets s’appelle dnf, et la commande que nous devons exécuter pour installer mutagen est la suivante :

sudo dnf install python3-mutagen

Sur Debian et ses nombreux dérivés, à la place, nous utilisons apt :

sudo apt install python3-mutagen

Si nous fonctionnons sur Archlinux, à la place, nous pouvons utiliser pacman pour installer des paquets logiciels. Dans ce cas, la commande que nous devons exécuter est la suivante :

sudo pacman -Sy python-mutagen

La méthode alternative, universelle, que nous pouvons utiliser pour installer mutagène est d’utiliser pip : le gestionnaire de paquets python. L’un des avantages de cette méthode est que nous obtiendrons toujours la dernière version stable du logiciel, que nous pouvons installer sans avoir besoin d’une élévation de privilèges. Pour installer mutagène en utilisant pip uniquement pour notre utilisateur, nous devons exécuter :

pip install --user mutagen

Ouvrir un fichier audio

Une fois mutagène installé, nous pouvons commencer à travailler avec. Commençons par les bases. La première chose que nous voulons faire, bien sûr, est d’importer le module, et d'"ouvrir » un fichier, qui pour les besoins de cet exemple, est au format FLAC (FLAC signifie Free Lossless Audio Codec). La chanson est we_disintegrate.flac par Nevermore :

>>> import mutagen
>>> a = mutagen.File('we_disintegrate.flac')

Dans l’exemple ci-dessus, pour ouvrir le fichier, nous avons utilisé la fonction File incluse dans le module mutagen. À quoi sert cette fonction ? Il essaie de deviner le type du fichier qui est passé en argument en examinant ses 128 premiers octets, son extension et la présence de balises déjà existantes, et essaie de l’ouvrir, en renvoyant une instance de la classe appropriée qui étend le FileType générique. Dans ce cas, par exemple, il renvoie une instance de la classe Flac. C’est l’objet avec lequel nous interagirons le plus :

>>> type(a)
<class 'mutagen.flac.FLAC'>

Si nous connaissons à l’avance le type de fichier du fichier audio, nous pouvons instancier directement la classe appropriée. Dans ce cas, par exemple, on aurait pu exécuter :

>>> from mutagen.flac import FLAC
>>> a = FLAC('we_disintegrate.flac')

Que se passe-t-il si nous essayons d’instancier la mauvaise classe FileType pour un fichier ? Imaginons que nous essayions de créer une instance de la classe FLAC en passant un fichier audio mp3 comme argument. Comme vous pouvez le voir, une exception serait levée :

>>> a = FLAC('01_an_ancient_sign_of_the_coming_storm.mp3')
[...]
mutagen.flac.FLACNoHeaderError: '01_an_ancient_sign_of_coming_storm.mp3' is not a valid FLAC file

L’exception FLACNoHeaderError est une extension de la classe Error, qui à son tour étend MutagenError, donc nous pouvons attraper ce dernier si nous avons besoin de gérer les erreurs de manière plus générique.

Gestion des balises

Une fois que nous avons créé une instance de la classe FileType appropriée, soit directement, soit via la fonction File, nous pouvons accéder aux balises d’un fichier audio via l’attribut tags, qui est l’instance appropriée d’un mutagène . Classe enfant de tag (cela est fait parce que les balises sont gérées différemment dans les différents conteneurs audio : dans les fichiers FLAC, par exemple, les balises sont stockées sous forme de commentaires vorbis) :

>>> from mutagen.flac import FLAC
>>> a = FLAC('we_disintegrate')
>>> type(a.tags)
<class 'mutagen.flac.VCFLACDict'>

Les balises peuvent être consultées et modifiées via une interface de type dictionnaire. Les balises disponibles dépendent du type de fichier. J’ai précédemment balisé le fichier, donc, par exemple, pour vérifier quelle est la valeur associée à la balise 'ARTIST', je lancerais :

>>> a.tags['ARTIST']
['Nevermore']

En tant que raccourci, les balises sont également accessibles, en utilisant le même type d’interface, directement sur la classe basée sur FileType que nous utilisons. On pourrait récupérer la valeur correspondant à la balise ARTIST en utilisant le code suivant :

>>> a['ARTIST']

Pour modifier la valeur d’une balise ou ajouter une nouvelle balise, il suffit d’attribuer sa valeur :

>>> a.tags['ARTIST'] = 'Someotherartist'

Pour visualiser toutes les balises et leurs valeurs, il suffit d’accéder à l’attribut a.tags : elles seraient renvoyées sous la forme d’une liste de tuples à deux éléments, où le premier élément est la clé et le second sa valeur. Pour obtenir une liste « assez imprimée » de balises et de valeurs, on peut utiliser la méthode pprint : elle renvoie une chaîne où chaque balise avec sa valeur est séparée des autres avec un caractère de saut de ligne \n. L’impression de cette chaîne renvoyait donc un résultat similaire à ce qui suit :

>>> print(a.tags.pprint())
MUSICBRAINZ_RELEASEGROUPID=e34d3efe-e062-3ffe-86b0-0e124fa429fd
ORIGINALDATE=2000-09-17
ORIGINALYEAR=2000
RELEASETYPE=album
MUSICBRAINZ_ALBUMID=ca554c0f-7e0c-4fd6-b56e-0081a1b1b143
MUSICBRAINZ_ALBUMARTISTID=7d093650-89be-4108-842b-ba7f5367504b
ALBUMARTIST=Nevermore
ALBUMARTISTSORT=Nevermore
ALBUM=Dead Heart in a Dead World
RELEASECOUNTRY=XE
LABEL=Century Media
CATALOGNUMBER=77310-2
ASIN=B000A69REE
RELEASESTATUS=official
SCRIPT=Latn
BARCODE=5051099731028
DATE=2011-03-01
TOTALDISCS=1
TOTALTRACKS=11
DISCNUMBER=1
MEDIA=CD
MUSICBRAINZ_TRACKID=5eb91e83-aa7c-491c-95fc-67f16dac2afe
ISRC=US4E40401002
MUSICBRAINZ_ARTISTID=7d093650-89be-4108-842b-ba7f5367504b
ARTISTSORT=Nevermore
ARTISTS=Nevermore
TITLE=We Disintegrate
MUSICBRAINZ_RELEASETRACKID=085cd92f-825f-3765-a951-b6b4f357b779
TRACKNUMBER=2
TRACKTOTAL=11
DISCTOTAL=1
ARTIST=Nevermore

Suppression d’une balise

Parfois, nous ne voulons tout simplement pas modifier la valeur associée à une balise, mais supprimer complètement la balise. Pour accomplir cette tâche, nous pouvons utiliser la méthode pop de l’objet FileType et passer le nom de la balise en argument. Supposons par exemple que nous souhaitions supprimer la balise BARCODE. Voici le code que nous écririons :

>>> a.pop('BARCODE')

Suppression de toutes les balises d’un fichier

Dans certaines situations, nous pouvons simplement vouloir supprimer toutes les balises existantes d’un fichier. Dans ces cas, nous voulons utiliser la méthode delete de l’objet FileType :

>>> a.delete()
>>> a.tags
[]

Lorsqu’il s’agit de fichiers FLAC, nous pouvons également vouloir supprimer toutes les images intégrées : nous pouvons le faire en utilisant la méthode clear_pictures.

Des modifications comme celles que nous avons vues dans les exemples précédents, effectuées sur les métadonnées d’un fichier audio avec mutagen, ne sont pas immédiatement effectives. Pour les rendre persistants, nous devons appeler une autre méthode : save. Les arguments acceptés par cette méthode peuvent varier en fonction de la classe basée sur FileType que nous utilisons.

Accès aux informations de flux audio

Nous pouvons accéder aux informations du flux d’un fichier audio, comme par exemple sa longueur et son débit, via la propriété info de l’objet FileType. Étant donné que dans ce cas, le fichier est un FLAC, il s’agira d’une instance de la classe mutagen.flac.StreamInfo. Nous pouvons accéder aux informations uniques à l’aide de cette propriété de classe. Par exemple, supposons que nous voulions vérifier la valeur du débit binaire audio ; Nous courrions :

>>> from mutagen.flac import FLAC
>>> a = FLAC('we_disintegrate.flac')
>>> a.info.bitrate
1016635

Comme nous l’avons fait pour les balises, pour obtenir une liste bien formatée des attributs du flux, nous utiliserions la méthode pprint :

>>> print(a.info.pprint())
FLAC, 311.99 seconds, 44100 Hz

Cependant, comme vous pouvez le voir, toutes les informations disponibles ne sont pas signalées dans la sortie renvoyée par cette méthode.

Conclusions

Dans ce tutoriel, nous avons appris l’utilisation de base du module Python mutagene. Ce module est utilisé dans de nombreuses applications de tagging, comme Musicbrainz Picard. Nous avons vu comment l’installer à l’aide de certains des gestionnaires de paquets de la distribution Linux les plus utilisés et via pip, comment l’utiliser pour ouvrir des fichiers audio, comment lire, ajouter et supprimer des balises, et, enfin, comment l’utiliser pour lire les informations de flux. Ici, nous n’avons décrit que l’utilisation de base du module : pour un aperçu complet des méthodes disponibles et pour savoir comment les différents conteneurs audio sont gérés, veuillez consulter la documentation officielle.

Articles connexes: