Wie lese ich MP3-Tags in der Shell?

53

Gibt es eine Möglichkeit, die MP3-Tags einer Datei aus der Shell zu lesen? Etwas wie: mp3tags MyFile.mp3 authorsollte den Autor-Tag einer MP3-Datei ausgeben.

red_trumpet
quelle

Antworten:

47

Sie können auch verwenden, ffprobewas ein Teil von ist ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Wenn Sie keine weiteren Informationen, wie z. B. die Länge der Spur 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 Kommas trennen, z format_tags=title,album.


Ich wollte in allen MP3-Dateien eines Ordners 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

Anmerkungen:

  • lltagund mp3infofinde keinen Titel, weil die von mir verwendeten Dateien ID3v2-Tags hatten, siehe den Kommentar von @ s-prasanth: Wie lese ich MP3-Tags in der Shell?
  • eyeD3 ist problematisch, programmgesteuert zu verwenden, da es Farbcodes (Fettdruck) verwendet.
  • eyeD3und auch id3v2(aber nur für ID3 v1-Tags) geben Sie den Titel und den Interpreten in derselben Zeile zurück, was die Sache noch komplizierter macht. Geben Sie daher getTitleEyedmanchmal getTitleId3sowohl den Titel als auch den Interpreten zurück. Bitte kopieren Sie diese Funktionen nicht und fügen Sie sie nicht ein.
  • getTitleId3 funktioniert nur für ID3 v2-Tags, da id3v2es unterschiedliche Formate für ID3v1- und ID3v2-Tags gibt, d. h

    Title  :                                 Artist:    
    

    ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Als einziges dieser 5 Programme wird eyeD3eine rote Warnung für zwei der Dateien ausgegeben:

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

    Es scheint , wie diese beiden Dateien ID3v1 - Tags haben, weil diese beiden Dateien die einzigen, wo sind lltagund mp3infoeinen Titel bekommen. Ich frage mich, ob dies ein Fehler in ist, eyeD3da kein anderes hier genanntes Programm ein Problem mit diesen Dateien hat ...

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

Zeitlich gesehen ist der Gewinner hier id3tool(mp3info ist schneller, funktioniert aber nicht mit ID3 v2). id3v2ist auch ziemlich schnell, aber die getTitleId3Funktion müsste angepasst werden, um auch mit ID3v1-Tags zu arbeiten, was sie im schlimmsten Fall um den Faktor 2 verlangsamen kann.

mxmlnkn
quelle
1
Beeindruckend. Ich bin seit Jahren ein exiftool Poweruser und hatte keine Ahnung, dass er auch Metadaten für Sounddateien lesen kann! Die ffprobe (oder in meinem Fall avprobe) -Lösung ist auch großartig, danke. Das ist die beste Antwort!
Marlar
1
Danke für deine gigantische Arbeit! Einige dieser Tools sind in meinem Paketmanager in Fedora nicht verfügbar. Könnten Sie das bitte id3infoin Ihren Vergleich einbeziehen?
Vytenis Bivainis
ffmpeghat einen weiteren Vorteil: es funktioniert mit aac/ m4afiles. Andere Tools scheinen nicht zu funktionieren (oder wissen Sie etwas anderes?). Ich werde auch vorschlagen, den FORMATAbschnitt zu durchsuchen , um Fälle zu vermeiden, in denen ein Stream auch ein titleetc .: hat ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'.
Jonathan Y.
@ JonathanY. Sie haben Recht, AAC-codiertes Audio, das in einer M4A-Containerdatei gespeichert ist, enthält Nicht-ID3-Metadaten und kann daher nur von ffmpeg und zusätzlich exiftool aus der Auswahl in meiner Antwort gelesen werden.
mxmlnkn
FLACs haben ein anderes Metadatenformat als MP4 / M4A, nämlich Vorbis-Kommentar-Metadaten, aber die Tags können auch mit exiftooloder gelesen werden ffprobe. Das speziellere Werkzeug für diesen Job wäre metaflac --listaus dem flacPaket. Bei ogg klappt das exiftoolauch, es gibt aber auch vorbiscomment -laus dem vorbis-toolsPaket. Seltsam vorbiscommentund metaflacnicht austauschbar, obwohl sowohl FLAC als auch OGG vorbis coment Metadaten haben?
mxmlnkn
26

Ok, ich habe selbst ein Programm gefunden. Es heißt mp3info und wird von installiert

sudo apt-get install mp3info

Um einzelne MP3-Tags aus einer Datei zu erhalten, muss man anrufen

mp3info -p %a file.mp3

das gibt den Künstler der Datei. Das% a bedeutet, dass man den Interpreten holen möchte und es einige andere Schlüssel für die anderen Tags gibt.

red_trumpet
quelle
20
Zusätzliche Informationen: Es gibt 4 verschiedene Standards von MP3 - Tags ID3v1, ID3v2.2 (veraltet), ID3v2.3, ID3v2.4 en.wikipedia.org/wiki/ID3 . Eine Datei kann v1- und / oder v2-Tags haben (Ja, v1 und v2 können nebeneinander existieren, aber v2.x und v2.y können nicht nebeneinander existieren). Ich glaube v2.3 ist die am weitesten verbreitete. Laut ibiblio.org/mp3info (Siehe Todo) werden v2-Tags von nicht unterstützt mp3info. Vielleicht möchten Sie sich ansehen id3v2- Es kann v2 bearbeiten / hinzufügen und v1 und v2 anzeigen. Wenn Ihnen die Darstellung der Tags nicht gefällt, können Sie ein Skript schreiben, das id3v2die Ausgabe entsprechend ausführt und verarbeitet.
S Prasanth
@ SPrasanth wie man es schafft, ein bestimmtes Tag anzuzeigen. Zum Beispiel: Nur der Künstler einer MP3-Datei?
Gowtham Gopalakrishnan
@ SPrasanth Ich habe es verstanden. Danke ich benutze -Rflag mit grepum die angegebene Ausgabe zu bekommen.
Gowtham Gopalakrishnan
Wenn Sie den Titel mit% t drucken, wird er abgeschnitten gedruckt.
Tulains Córdova
1
Leider: Only ID3 versions 1.0 and 1.1 are supported.
Simlev
11

Sie können eyed3 verwenden . Installieren Sie zunächst von einem Terminal aus:

sudo apt-get install eyed3

Dann renne:

eyeD3 song.mp3

Kombinieren Sie dies mit grep, um bestimmte Tags in einer Zeile zu erhalten.

eyeD3 song.mp3 | grep artist

(um alle mp3 Tags zu entfernen, siehe HIER )

philshem
quelle
1
Ich habe es versucht, und der zu verwendende Befehl ist eyeD3 mit einem Großbuchstaben D;). Aber ich habe ein anderes Tool namens mp3info gefunden, das meinen Bedürfnissen besser entspricht. Dies kann mp3-Tags ausgeben, ohne dass grep verwendet werden muss, was ich bevorzuge.
red_trumpet
eyeD3 funktioniert besser für mich, weil es mit id3v2 funktioniert, aber @red_trumpet ist richtig, der Befehl sollte eyeD3nicht seineyed3
bmaupin
Verwenden Sie die Display - Plugin , um Ausgangs - Tags im gewünschten Format: eyeD3 --plugin display -p "%t% by %a%" *.
Simlev
Dies zeigt nicht ALLE Tags an, zum Beispiel kein ISRC. Das unten erwähnte Programm id3v2 gibt auch den ISRC zurück, aber keine Dauer ...
29.
8

Ich bevorzuge es, id3v2 zu verwenden, tippe einfach id3v2 -l somefile.mp3. Sie können auch die id3v2-Manpage für eine spezifischere Verwendung anzeigen.

Psddp
quelle
Das ist großartig und funktioniert sehr gut
jpo38
Sollte definitiv die beste Antwort sein, haben alle anderen Tools Abhängigkeitsprobleme bei einigen Distributionen.
Sergio
Hier wird mid3v2stattdessen wegen der mangelnden Unicode-Unterstützung empfohlen . Das letzte Update von id3v2 war 2013 .
Pablo A
2

Sie können exiftool ausprobieren (Lesen und Schreiben von Metainformationen in Dateien).

"ExifTool ist eine plattformunabhängige Perl-Bibliothek und eine Befehlszeilenanwendung zum Lesen, Schreiben und Bearbeiten von Metainformationen in einer Vielzahl von Dateien. ExifTool unterstützt viele verschiedene Metadatenformate, einschließlich EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP und ID3 sowie die Herstellerhinweise für viele Digitalkameras von Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Phase 1, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon und Sony. " - ExifTool von Phil Harvey

Hier ist ein Beispiel für den Befehl:

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)
blade19899
quelle
1

Prüfen Sie, lltagob Sie nach einer Lösung suchen, die mehr als nur MP3 / ID3 unterstützt.

Installiere es mit:

sudo apt-get install lltag

um alle Tags damit anzuzeigen: ( -Sist für Show)

lltag -S somefile.mp3

So zeigen Sie bestimmte Tags an:

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