web-dev-qa-db-fra.com

Comment lire les tags mp3 en shell?

Est-il possible de lire les balises mp3 d'un fichier depuis le shell? Quelque chose comme: mp3tags MyFile.mp3 author devrait sortir la balise author d'un fichier mp3.

53
red_trumpet

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.

26
red_trumpet

Vous pouvez également utiliser ffprobequi fait partie de ffmpegNAME _ .

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

Notes:

  • lltaget mp3info ne trouvent 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).
  • eyeD3 et aussi id3v2 (mais uniquement pour les tags ID3 v1) renvoient le titre et l'artiste sur la même ligne, ce qui complique encore les choses; donc getTitleEyedet parfois getTitleId3 renvoient à la fois le titre et l'artiste, donc veuillez ne pas copier-coller ces fonctions.
  • getTitleId3 ne fonctionnera que pour les tags ID3 v2, car id3v2 a des formats différents pour les tags ID3v1 et ID3v2, c.-à-d.

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • En tant que programme unique sur ces 5 eyeD3, un avertissement rouge apparaît 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 portent des balises ID3v1, car ils sont les seuls où lltaget mp3info peuvent obtenir un titre. Je me demande s'il s'agit d'un bogue dans eyeD3, car 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 id3tool (mp3info est plus rapide, mais ne fonctionne pas avec ID3 v2). id3v2 est également assez rapide, mais la fonction getTitleId3 aurait besoin d'être ajustée pour fonctionner également avec les balises ID3v1, ce qui pourrait, au pire, le ralentir d'un facteur 2.

47
mxmlnkn

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

Sudo apt-get install eyed3

Ensuite, lancez:

eyeD3 song.mp3

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

eyeD3 song.mp3 | grep artist

(pour enlever toutes les balises mp3, voir ICI )

11
philshem

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

8
Psddp

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 de 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)
2
blade19899

Départ lltag si vous cherchez une solution prenant en charge plus que le format mp3/ID3.

Installez-le avec:

Sudo apt-get install lltag

pour afficher toutes les balises avec: (-S est for show)

lltag -S somefile.mp3

pour afficher certaines balises avec:

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

betteraves

Vous pouvez commencer avec this screencast et le guide Mise en route

Installez soit:

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

Également:

0
Pablo Bianchi