GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment lire les balises MP3 dans Shell ?

Existe-t-il un moyen de lire les balises mp3 d'un fichier depuis le shell ? Quelque chose comme :
mp3tags MyFile.mp3 author devrait afficher la balise d'auteur d'un fichier mp3.

Meilleure réponse

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

sudo apt-get install ffmpeg
ffprobe file.mp3

Si vous ne voulez pas d'autres informations, comme la longueur de la piste, etc., vous pouvez combiner la sortie avec grep :

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

Ou pour n'avoir 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, telles 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 est donc devenu intéressant de savoir laquelle des solutions mentionnées ici est 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 :

  • lltag et mp3info ne trouve pas de titre, car les fichiers que j'utilisais avaient des balises ID3v2, voir le commentaire de @s-prasanth :Comment lire les balises mp3 en shell ?
  • eyeD3 est problématique à utiliser par programmation, car il utilise des codes de couleur (gras).
  • eyeD3 et aussi id3v2 (mais uniquement pour les balises ID3 v1) renvoient le titre et l'artiste sur la même ligne, ce qui complique encore les choses; donc getTitleEyed et parfois getTitleId3 renvoyez à la fois le titre et l'artiste, veuillez donc ne pas copier-coller ces fonctions.
  • getTitleId3 ne fonctionnera que pour les balises ID3 v2, car id3v2 a différents formats pour les balises ID3v1 et ID3v2, c'est-à-dire

    Title  :                                 Artist:    
    

    vs ID3v2 :

    TIT2 (Title/songname/content description): 
    
  • Comme seul programme de ces 5 eyeD3 imprime 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 aient des balises ID3v1, car ces deux fichiers sont les seuls où lltag et mp3info peut 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…

Connexe:Ligatures vierges (manquantes) (tt, ti, fi, ff, etc.) dans FF lorsque les polices Cambria / Calibri sont utilisées?

Résultats (en 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

En termes de temps, le gagnant ici est id3tool (mp3info est plus rapide, mais ne fonctionne pas avec ID3 v2). id3v2 est également assez rapide, mais le getTitleId3 la fonction nécessiterait un ajustement pour fonctionner également avec les balises ID3v1, ce qui pourrait au pire la ralentir d'un facteur 2.


Ubuntu
  1. Comment créer des balises Git

  2. Comment installer Zsh sur Ubuntu 20.04 ?

  3. Comment lire les résultats "service -status-all" ?

  4. Comment lire une variable à partir d'un fichier ?

  5. Comment lire un seul caractère dans un script shell

Comment écrire un script shell dans Ubuntu

Comment lire des MP3 dans Ubuntu

Comment installer ZSH (Z Shell) sur Ubuntu 20.04

Comment diviser un fichier MP3 ?

Comment lire les capteurs Lm sur Amd Fx 6300 ?

Comment lire les arguments de ligne de commande dans les scripts shell ?