Comment lire les tags mp3 en shell?

53

Est-il possible de lire les balises mp3 d'un fichier depuis le shell? Quelque chose comme: mp3tags MyFile.mp3 authordevrait sortir le tag auteur d'un fichier mp3.

trompette rouge
la source

Réponses:

47

Vous pouvez également utiliser ffprobece qui fait partie de ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Si vous ne voulez pas d'autres informations, telles que la longueur de la piste, etc., vous pouvez combiner le résultat avec grep:

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'

Ou pour n'obtenir que l'auteur:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3

Vous pouvez sélectionner d'autres balises en les séparant par une virgule, telle que format_tags=title,album.


Je voulais rechercher un mot clé dans tous les fichiers mp3 d'un dossier. Le dossier contenait 486 fichiers. Il était donc intéressant de savoir laquelle des solutions mentionnées ici était la plus rapide. Voici la boucle que j'ai utilisée:

# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool

keyword='fill_me_in'

getTitleFF()   { ffprobe "$1" 2>&1 | sed -E -n 's/^ *title *: (.*)/\1/p'; }
getTitleLL()   { lltag --show-tags title "$1" | sed -nE 's/^  TITLE=(.*)/\1/p'; }
getTitleEyed() { eyeD3 2>&1 "$1" | sed -n 's|\x1b\[[0-9;]*mtitle[^:]*: ||p'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^(TIT2 \([^)]*\)|Title *): (.*)/\2/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -nE 's/^=== TIT2 \([^)]*\): //p'; }
getTitleTool() { id3tool "$1" | sed -n 's|^Song Title:\t||p'; }

for prog in FF LL Eyed Info Id3 Exif Id3i Tool; do
    echo "=== getTitle${prog} ==="
    time \
    for file in *.mp3; do 
        if "getTitle${prog}" "$file" | grep -q "$keyword"; then 
            echo "$file"
        fi
    done
done

Remarques:

  • lltaget mp3infone trouve pas de titre, car les fichiers que j'utilisais avaient des tags ID3v2, voir le commentaire de @ s-prasanth: Comment lire les tags mp3 dans un shell?
  • eyeD3 est problématique à utiliser par programmation, car il utilise des codes de couleur (gras).
  • eyeD3et aussi id3v2(mais seulement pour les tags ID3 v1) renvoient le titre et l'artiste sur la même ligne, ce qui complique encore les choses; Par conséquent getTitleEyed, getTitleId3retournez parfois le titre et l'artiste. Par conséquent, ne collez pas ces fonctions.
  • getTitleId3 ne fonctionnera que pour les tags ID3 v2, car il id3v2a des formats différents pour les tags ID3v1 et ID3v2, c'est-à-dire

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Comme le seul programme de ces 5 eyeD3imprime un avertissement rouge pour deux des fichiers:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    

    Il semble que ces deux fichiers ont ID3v1, parce que ces deux fichiers sont les seuls où lltaget mp3infopeuvent obtenir un titre. Je me demande s'il s'agit d'un bogue, eyeD3car aucun autre programme mentionné ici n'a de problème avec ces fichiers ...

Résultats (temps réel):

 Program  | Version    | Time / s
----------+------------+-----------
 exiftool | 10.25      | 49.5 ± 0.5
 lltag    | 0.14.5     | 41   ± 1.0
 ffprobe  | 3.1.3-1+b3 | 33   ± 0.5
 eyeD3    | 0.6.18     | 24   ± 0.5
 id3info  | 3.8.3      | 4.2  ± 0.1
 id3v2    | 0.1.12     | 2.9  ± 0.1
 id3tool  | 1.2a       | 1.7  ± 0.1
 mp3info  | 0.8.5a     | 1.4  ± 0.1

Ici, le gagnant est gagnant id3tool(mp3info est plus rapide, mais ne fonctionne pas avec ID3 v2). id3v2est également assez rapide, mais la getTitleId3fonction aurait besoin d’être ajustée pour fonctionner également avec les balises ID3v1, ce qui peut, au pire, le ralentir de 2 fois.

mxmlnkn
la source
1
Sensationnel. Je suis un utilisateur expérimenté d'Exiftool depuis des années et je ne savais pas qu'il pouvait également lire des métadonnées pour les fichiers son! La solution ffprobe (ou avprobe dans mon cas) est également excellente, merci. C'est la meilleure réponse!
Mars
1
Merci pour votre travail gigantesque! Certains de ces outils ne sont pas disponibles auprès de mon gestionnaire de paquets dans Fedora. Pourriez-vous s'il vous plaît inclure id3infodans votre comparaison?
Vytenis Bivainis
ffmpega un autre avantage: cela fonctionne avec aac/ m4afichiers. Les autres outils ne semblent pas (ou savez-vous le contraire?). Je suggérerai également de rechercher dans sa FORMATsection, pour éviter les cas où un flux a aussi un titleetc ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'. : .
Jonathan Y.
@ JonathanY. Vous avez raison, l'audio codé AAC stocké dans un fichier contenant M4A contient des métadonnées non ID3 et ne peut donc être lu que par ffmpeg et, en outre, exiftool, en dehors de la sélection sélectionnée dans ma réponse.
mxmlnkn
Les FLAC ont un autre format de métadonnées différent de MP4 / M4A, à savoir les métadonnées de commentaire vorbis, mais les balises peuvent également être lues avec exiftoolou ffprobe. L'outil le plus spécialisé pour ce travail serait metaflac --listissu du flacpackage. Pour ogg exiftoolfonctionne aussi, mais il y a aussi vorbiscomment -ldu vorbis-toolspaquet. Bizarrement vorbiscommentet metaflacne peut pas être interchangé, même si FLAC et OGG ont tous deux des métadonnées Vorbis Coment?
Mxmlnkn
26

Ok, j'ai trouvé un programme par moi-même. Il s'appelle mp3info et est installé par

sudo apt-get install mp3info

Pour obtenir des balises mp3 uniques à partir d'un fichier, il faut appeler

mp3info -p %a file.mp3

ce qui donne l'artiste du fichier. Le% a signifie que l’on veut obtenir l’artiste et qu’il existe d’autres clés pour les autres tags.

trompette rouge
la source
20
Informations complémentaires: Il existe 4 normes différentes pour les balises mp3 id3v1, id3v2.2 (obsolète), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . Un fichier peut avoir des balises v1 et / ou v2 (Oui, les v1 et v2 peuvent coexister, mais les versions v2.x et v2.y ne peuvent pas coexister). Je crois que la v2.3 est la plus largement utilisée. Selon ibiblio.org/mp3info (voir section suivante), les tags v2 ne sont pas pris en charge par mp3info. Vous voudrez peut-être regarder id3v2- Il peut éditer / ajouter la v2 et afficher les v1 et v2. Si vous n'aimez pas la façon dont les balises sont affichées, vous pouvez écrire un script qui exécute id3v2et traite correctement la sortie.
S Prasanth
@SPrasanth comment faire pour afficher une balise spécifique. Par exemple: uniquement l'artiste d'un fichier mp3?
Gowtham Gopalakrishnan
@SPrasanth je l'ai eu. Merci J'utilise -Rflag avec greppour obtenir la sortie spécifiée.
Gowtham Gopalakrishnan
Lorsque vous imprimez le titre de la piste avec% t, il est imprimé coupé.
Tulains Córdova
1
Malheureusement: Only ID3 versions 1.0 and 1.1 are supported.
simlev le
11

Vous pouvez utiliser eyed3 . Tout d'abord, depuis un terminal, installez:

sudo apt-get install eyed3

Ensuite, lancez:

eyeD3 song.mp3

Combinez cela avec greppour obtenir des balises spécifiques sur une ligne.

eyeD3 song.mp3 | grep artist

(pour enlever tous les tags mp3, voir ICI )

Philshem
la source
1
J'ai essayé ceci, et la commande à utiliser est eyeD3, avec un D majuscule;). Mais j'ai trouvé un autre outil, mieux adapté à mes besoins, nommé mp3info. Cela peut générer des tags mp3 sans avoir besoin d’utiliser grep, ce que je préfère.
Red_trumpet
eyeD3 fonctionne mieux pour moi car cela fonctionne avec id3v2, mais @red_trumpet a raison, la commande ne devrait eyeD3pas êtreeyed3
bmaupin
Utilisez le plugin d'affichage pour les balises de sortie dans le format souhaité: eyeD3 --plugin display -p "%t% by %a%" *.
simlev le
Cela n’affiche PAS TOUTES les balises, par exemple pas d’ISRC. Le programme id3v2 mentionné ci-dessous renvoie également l'ISRC, mais pas de durée ...
minyves
8

Je préfère utiliser id3v2, tapez juste id3v2 -l somefile.mp3. Vous pouvez également consulter la page de manuel id3v2 pour une utilisation plus spécifique.

Psddp
la source
C'est excellent et fonctionne très bien
jpo38
Devrait certainement être la meilleure réponse, tous les autres outils ont des problèmes de dépendance sur certaines distributions.
Sergio
Ici, c'est recommandé mid3v2à cause du manque de support Unicode. Également la dernière mise à jour d'id3v2 était en 2013 .
Pablo Un
2

Vous pouvez essayer exiftool (lire et écrire des méta-informations dans des fichiers).

"ExifTool est une bibliothèque Perl indépendante de la plate-forme et une application en ligne de commande pour la lecture, l’écriture et la modification de méta-informations dans une grande variété de fichiers. ExifTool prend en charge de nombreux formats de métadonnées, notamment EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP et ID3, ainsi que les indications du fabricant de nombreux appareils photo numériques de Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Feuille, Minolta / Konica Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon et Sony. " - ExifTool par Phil Harvey

Voici un exemple de la commande:

exiftool test.mp3 
ExifTool Version Number         : 10.00
File Name                       : test.mp3
Directory                       : .
File Size                       : 8.2 MB
File Modification Date/Time     : 2016:03:02 21:44:58+01:00
File Access Date/Time           : 2016:04:06 21:34:01+02:00
File Inode Change Date/Time     : 2016:03:02 21:45:36+01:00
File Permissions                : rw-rw-r--
File Type                       : MP3
File Type Extension             : mp3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Sample Rate                     : 44100
Channel Mode                    : Stereo
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : False
Emphasis                        : None
VBR Frames                      : 9544
VBR Bytes                       : 8467680
ID3 Size                        : 115419
Band                            : Tech N9ne Collabos
Album                           : Strangeulation (Deluxe Edition)
Composer                        : Tech N9ne Collabos
Genre                           : Rap & Hip-Hop
Copyright                       : 2014 Strange Music, Inc
Title                           : American Horror Story (feat. Ces Cru)
Artist                          : Tech N9ne Collabos
Track                           : 10
Year                            : 2014
Comment                         : 
Lyrics                          : 
Private                         : (Binary data 8192 bytes, use -b option to extract)
Picture MIME Type               : image/jpeg
Picture Type                    : Front Cover
Picture Description             : 
Picture                         : (Binary data 104371 bytes, use -b option to extract)
Audio Bitrate                   : 272 kbps
Date/Time Original              : 2014
Duration                        : 0:04:09 (approx)
lame19899
la source
1

Découvrez lltagsi vous recherchez une solution prenant en charge plus que le format mp3 / ID3.

Installez-le avec:

sudo apt-get install lltag

pour voir toutes les balises avec: ( -Sest pour show)

lltag -S somefile.mp3

pour afficher certaines balises avec:

lltag --show-tags artist,album,title,number somefile.mp3
0xcaff
la source
0

Betteraves

Vous pouvez commencer avec ce screencast et le guide de prise en main

Installez soit:

pip install beets  # latest version
apt install beets  # repo version

Aussi:

Pablo A
la source