GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie liest man MP3-Tags in der Shell?

Gibt es eine Möglichkeit, die MP3-Tags einer Datei aus der Shell zu lesen? So etwas wie:
mp3tags MyFile.mp3 author soll den Autoren-Tag einer mp3-Datei ausgeben.

Beste Antwort

Sie können auch ffprobe verwenden welches Teil von ffmpeg ist .

sudo apt-get install ffmpeg
ffprobe file.mp3

Wenn Sie keine anderen Informationen wie Tracklänge usw. wünschen, können Sie die Ausgabe mit grep:

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

Oder um nur den Autor zu bekommen:

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

Sie können andere Tags auswählen, indem Sie sie durch ein Komma trennen, z. B. format_tags=title,album .

Ich wollte in allen MP3-Dateien in einem Ordner nach einem Schlüsselwort suchen. Der Ordner hatte 486 Dateien, daher wurde es interessant zu wissen, welche der hier genannten Lösungen die schnellste ist. Hier ist die Schleife, die ich verwendet habe:

# 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

Hinweise:

  • lltag und mp3info Finde keinen Titel, weil die von mir verwendeten Dateien ID3v2-Tags hatten, siehe den Kommentar von @s-prasanth:How to read mp3 tags in shell?
  • eyeD3 ist problematisch bei der programmatischen Verwendung, da Farbcodes (Fettschrift) verwendet werden.
  • eyeD3 und auch id3v2 (aber nur für ID3 v1-Tags) geben Sie den Titel und den Künstler in derselben Zeile zurück, was die Sache noch komplizierter macht; daher getTitleEyed und manchmal getTitleId3 gibt sowohl den Titel als auch den Interpreten zurück, kopieren Sie diese Funktionen also nicht und fügen Sie sie nicht ein.
  • getTitleId3 funktioniert nur für ID3 v2-Tags, da id3v2 hat unterschiedliche Formate für ID3v1- und ID3v2-Tags, z. B.

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Als einziges Programm dieser 5 eyeD3 gibt eine rote Warnung für zwei der Dateien aus:

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

    Es scheint, als hätten diese beiden Dateien ID3v1-Tags, da diese beiden Dateien die einzigen sind, in denen lltag und mp3info kann einen Titel bekommen. Ich frage mich, ob dies ein Fehler in eyeD3 ist denn kein anderes hier erwähntes Programm hat ein Problem mit diesen Dateien …

Verwandte:Leere (fehlende) Ligaturen (tt, ti, fi, ff usw.) in FF, wenn Cambria / Calibri-Schriftarten verwendet werden?

Ergebnisse (Echtzeit):

 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

Der zeitliche Gewinner ist hier id3tool (mp3info ist schneller, funktioniert aber nicht mit ID3 v2). id3v2 ist auch recht schnell, aber die getTitleId3 Funktion müsste angepasst werden, um auch mit ID3v1-Tags zu funktionieren, was sie im schlimmsten Fall um den Faktor 2 verlangsamen könnte.


Ubuntu
  1. Wie installiere ich Zsh unter Ubuntu 20.04?

  2. Wie liest man das gesamte Shell-Skript, bevor man es ausführt?

  3. Wie liest man die Ergebnisse von „service –status-all“?

  4. Wie liest man eine Variable aus einer Datei?

  5. Hinzufügen von Replaygain-Tags?

So schreiben Sie ein Shell-Skript in Ubuntu

So spielen Sie MP3 in Ubuntu ab

So installieren Sie ZSH (Z Shell) unter Ubuntu 20.04

Wie teilt man eine MP3-Datei?

Wie liest man Lm-Sensoren auf AMD Fx 6300?

Wie liest man Befehlszeilenargumente in Shell-Skripten?