Jak czytać tagi mp3 w powłoce?

53

Czy istnieje sposób na odczytanie tagów mp3 pliku z powłoki? Coś w stylu: mp3tags MyFile.mp3 authorpowinien wypisać znacznik autora pliku mp3.

red_trumpet
źródło

Odpowiedzi:

47

Możesz także użyć, ffprobektóry jest częścią ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Jeśli nie chcesz innych informacji, takich jak długość ścieżki itp., Możesz połączyć wyjście z grep:

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

Lub w celu uzyskania tylko autora:

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

Możesz wybrać inne tagi, oddzielając je przecinkami, np format_tags=title,album.


Chciałem wyszukać słowo kluczowe we wszystkich plikach mp3 w folderze. Folder miał 486 plików, dlatego zainteresowało Cię, które z wymienionych tutaj rozwiązań jest najszybsze. Oto pętla, której użyłem:

# 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

Uwagi:

  • lltagi mp3infonie znajduję tytułu, ponieważ pliki, których używałem, miały tagi ID3v2, patrz komentarz @ s-prasanth: Jak czytać tagi mp3 w powłoce?
  • eyeD3 używanie programowe jest problematyczne, ponieważ wykorzystuje kody kolorów (pogrubienie).
  • eyeD3a także id3v2(ale tylko w przypadku znaczników ID3 v1) zwracają tytuł i wykonawcę w tym samym wierszu, co dodatkowo komplikuje sytuację; dlatego getTitleEyedczasami getTitleId3zwracaj zarówno tytuł, jak i wykonawcę, więc nie kopiuj-wklej tych funkcji.
  • getTitleId3 będzie działał tylko dla tagów ID3 v2, ponieważ id3v2ma różne formaty dla tagów ID3v1 i ID3v2, tj.

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Jako jedyny program z tych 5 eyeD3drukuje czerwone ostrzeżenie dla dwóch plików:

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

    Wydaje się, że te dwa pliki mają tagów ID3v1, ponieważ te dwa pliki są jedynymi, gdzie lltagi mp3infomoże uzyskać tytuł. Zastanawiam się, czy to błąd, eyeD3ponieważ żaden inny program tutaj wymieniony nie ma problemu z tymi plikami ...

Wyniki (w czasie rzeczywistym):

 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

Zwycięzcą jest id3toolczasowo (mp3info jest szybsze, ale nie działa z ID3 v2). id3v2jest również dość szybki, ale getTitleId3funkcja wymagałaby dostosowania, aby działała również ze znacznikami ID3v1, co w najgorszym przypadku może spowolnić czynnik 2.

mxmlnkn
źródło
1
Łał. Byłem zaawansowanym użytkownikiem exiftoola od lat i nie miałem pojęcia, że ​​może także czytać metadane plików dźwiękowych! Dzięki rozwiązaniu ffprobe (lub avprobe w moim przypadku) jest również świetne. To najlepsza odpowiedź!
marlar
1
Dzięki za gigantyczną pracę! Niektóre z tych narzędzi nie są dostępne w moim menedżerze pakietów w Fedorze. Czy możesz dołączyć id3infodo swojego porównania?
Vytenis Bivainis
ffmpegma jeszcze jedną zaletę: działa z aac/ m4afiles. Inne narzędzia nie wydają się (lub czy wiesz inaczej?). Zasugeruję również przeszukanie jego FORMATsekcji, aby uniknąć przypadków, w których strumień ma również titleitp ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'.:
Jonathan Y.
@JathanathanY. Masz rację, dźwięk zakodowany w AAC przechowywany w pliku zawierającym M4A ma metadane inne niż ID3 i dlatego może być odczytywany tylko przez ffmpeg i dodatkowo exiftool, poza zaznaczeniem w mojej odpowiedzi.
mxmlnkn
Pliki FLAC mają inny format metadanych inny niż MP4 / M4A, mianowicie metadane komentarza vorbis, ale tagi można również czytać za pomocą exiftoollub ffprobe. Bardziej wyspecjalizowane narzędzie do tego zadania byłoby metaflac --listz flacpakietu. Dla ogg exiftoolrównież działa, ale jest też vorbiscomment -lz vorbis-toolspakietu. Dziwnie vorbiscommenti metaflacnie można ich zamieniać, mimo że zarówno FLAC, jak i OGG mają metadane vorbis coment?
mxmlnkn
26

Ok, znalazłem program sam. Nazywa się mp3info i jest instalowany przez

sudo apt-get install mp3info

Aby uzyskać pojedyncze tagi mp3 z pliku, trzeba zadzwonić

mp3info -p %a file.mp3

co daje wykonawcę pliku. % A oznacza, że ​​jeden chce uzyskać artystę i istnieją inne klucze do innych tagów.

red_trumpet
źródło
20
Informacje dodatkowe: Istnieją 4 różne standardy tagów mp3 id3v1, id3v2.2 (przestarzałe), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . Plik może mieć znaczniki v1 i / lub v2 (tak, v1 i v2 mogą współistnieć, ale v2.xi v2.y nie mogą współistnieć). Wierzę, że v2.3 jest najczęściej używanym. Według ibiblio.org/mp3info (patrz Todo) tagi v2 nie są obsługiwane przez mp3info. Możesz zajrzeć id3v2- może edytować / dodawać v2 i wyświetlać v1 i v2. Jeśli nie podoba ci się sposób wyświetlania tagów, możesz napisać skrypt, który odpowiednio uruchomi id3v2i przetwarza dane wyjściowe.
S Prasanth,
@SPrasanth jak zrobić, aby wyświetlał określony tag. Na przykład: tylko wykonawca pliku mp3?
Gowtham Gopalakrishnan
@SPrasanth, mam to. Dzięki używam -Rflagi z, grepaby uzyskać określone dane wyjściowe.
Gowtham Gopalakrishnan
Gdy drukujesz tytuł utworu za pomocą% t, drukuje go obcięty.
Tulains Córdova
1
Niestety: Only ID3 versions 1.0 and 1.1 are supported.
simlev
11

Możesz użyć eyed3 . Najpierw zainstaluj z terminala:

sudo apt-get install eyed3

Następnie uruchomić:

eyeD3 song.mp3

Połącz to z, grepaby uzyskać określone tagi w jednym wierszu.

eyeD3 song.mp3 | grep artist

(aby usunąć wszystkie tagi mp3, czytaj TUTAJ )

philshem
źródło
1
Próbowałem tego, a polecenie do użycia to eyeD3, z dużą literą D;). Ale znalazłem inne narzędzie, które lepiej odpowiada moim potrzebom, o nazwie mp3info. Może to generować tagi mp3 bez potrzeby używania grep, co wolę.
red_trumpet
eyeD3 działa lepiej dla mnie, ponieważ działa z ID3v2, ale @red_trumpet ma rację, komenda powinna być eyeD3nieeyed3
bmaupin
Użyj wtyczki tagów wyświetlającego w żądanym formacie: eyeD3 --plugin display -p "%t% by %a%" *.
simlev
Nie wyświetla WSZYSTKICH znaczników, na przykład brak ISRC. Wymieniony poniżej program id3v2 zwraca również ISRC, ale nie ma czasu trwania ...
minyves
8

Wolę używać id3v2, po prostu wpisz id3v2 -l somefile.mp3. Możesz także wyświetlić stronę podręcznika id3v2, aby uzyskać bardziej szczegółowe informacje.

Psddp
źródło
To jest świetne i działa bardzo dobrze
jpo38
Zdecydowanie najlepsza odpowiedź, wszystkie inne narzędzia mają problemy z zależnościami w niektórych dystrybucjach.
Sergio
Tutaj jest zalecany mid3v2zamiast z powodu braku wsparcia Unicode. Ostatnia aktualizacja id3v2 miała miejsce w 2013 roku .
Pablo A
2

Możesz wypróbować exiftool (Odczytywanie i zapisywanie meta informacji w plikach).

„ExifTool to niezależna od platformy biblioteka Perla oraz aplikacja wiersza poleceń do odczytu, zapisu i edycji meta informacji w wielu różnych plikach. ExifTool obsługuje wiele różnych formatów metadanych, w tym EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP i ID3, a także notatki producentów wielu cyfrowych aparatów Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon i Sony. ” - ExifTool autorstwa Phila Harveya

Oto przykład polecenia:

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
źródło
1

Sprawdź, lltagczy szukasz rozwiązania, które obsługuje więcej niż tylko mp3 / ID3.

Zainstaluj z:

sudo apt-get install lltag

aby wyświetlić wszystkie tagi z nim: ( -Sjest na pokaz)

lltag -S somefile.mp3

aby wyświetlić niektóre tagi:

lltag --show-tags artist,album,title,number somefile.mp3
0xcaff
źródło