Come leggere i tag mp3 nella shell?


53

C'è un modo per leggere i tag mp3 di un file dalla shell? Qualcosa di simile: mp3tags MyFile.mp3 authordovrebbe generare il tag autore di un file mp3.

Risposte:


47

Puoi anche usare di ffprobecui fa parte ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Se non desideri altre informazioni, come la lunghezza della traccia e così via, puoi combinare l'output con grep:

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

O per ottenere solo l'autore:

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

Puoi selezionare altri tag separandoli con una virgola, ad esempio format_tags=title,album.


Volevo cercare una parola chiave in tutti i file mp3 in una cartella. La cartella aveva 486 file, quindi è diventato interessante sapere quale delle soluzioni menzionate qui è la più veloce. Ecco il ciclo che ho usato:

# 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

Appunti:

  • lltage mp3infonon trovo un titolo, perché i file che stavo usando avevano i tag ID3v2, vedi il commento di @ s-prasanth: Come leggere i tag mp3 nella shell?
  • eyeD3 è problematico da utilizzare a livello di codice, perché utilizza codici colore (grassetto).
  • eyeD3e anche id3v2(ma solo per i tag ID3 v1) restituiscono il titolo e l'artista sulla stessa riga, il che complica ulteriormente le cose; pertanto getTitleEyede talvolta getTitleId3restituiscono sia il titolo che l'artista, quindi per favore non copiare e incollare quelle funzioni.
  • getTitleId3 funziona solo con tag ID3 v2, perché id3v2ha formati diversi per tag ID3v1 e ID3v2, ad es.

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Poiché l'unico programma di questi 5 eyeD3stampa un avviso rosso per due dei file:

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

    Sembra che quei due file abbiano tag ID3v1, perché quei due file sono gli unici dove lltage mp3infopossono ottenere un titolo. Mi chiedo se questo è un bug in eyeD3quanto nessun altro programma menzionato qui ha un problema con questi file ...

Risultati (tempo reale):

 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

Per quanto riguarda il tempo, il vincitore qui è id3tool(mp3info è più veloce, ma non funziona con ID3 v2). id3v2è anche abbastanza veloce, ma la getTitleId3funzione dovrebbe essere regolata per funzionare anche con i tag ID3v1, che nella peggiore delle ipotesi potrebbero rallentarla del fattore 2.


1
Wow. Sono stato un utente esperto di exiftool per anni e non avevo idea che potesse anche leggere metadati per i file audio! Anche la soluzione ffprobe (o avprobe nel mio caso) è eccezionale, grazie. Questa è la risposta migliore!
marlar,

1
Grazie per il tuo lavoro gigantesco! Alcuni di questi strumenti non sono disponibili dal mio gestore di pacchetti in Fedora. Potresti per favore includere id3infonel tuo confronto?
Vytenis Bivainis,

ffmpegha un altro vantaggio: funziona con aac/ m4afiles. Altri strumenti non sembrano (o sai altrimenti?). Suggerirò anche di cercare nella sua FORMATsezione, per evitare casi in cui uno stream ha anche un titleetc ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'. : .
Jonathan Y.

@JonathanY. Hai ragione, l'audio con codifica AAC memorizzato in un file contenitore M4A ha metadati non ID3 e quindi può essere letto solo da ffmpeg e inoltre exiftool, fuori dalla selezione nella mia risposta.
mxmlnkn,

I FLAC hanno un altro formato di metadati diverso da MP4 / M4A, vale a dire i metadati dei commenti di vorbis, ma i tag possono anche essere letti con exiftoolo ffprobe. Lo strumento più specializzato per questo lavoro sarebbe metaflac --listdal flacpacchetto. Per ogg exiftoolfunziona anche, ma c'è anche vorbiscomment -ldal vorbis-toolspacchetto. Stranamente vorbiscommente metaflacnon possono essere scambiati, anche se FLAC e OGG hanno entrambi metadati con commento di vorbis?
mxmlnkn,

26

Ok, ho trovato un programma da solo. Si chiama mp3info e viene installato da

sudo apt-get install mp3info

Per ottenere singoli tag mp3 da un file, è necessario chiamare

mp3info -p %a file.mp3

che dà all'artista il file. % A significa che si vuole ottenere l'artista e ci sono alcune altre chiavi per gli altri tag.


20
Ulteriori informazioni: ci sono 4 diversi standard di tag mp3 id3v1, id3v2.2 (obsoleto), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . Un file può avere tag v1 e / o v2 (Sì, v1 e v2 possono coesistere, ma v2.xe v2.y non possono coesistere). Credo che la v2.3 sia la più utilizzata. Secondo ibiblio.org/mp3info (vedi Todo) i tag v2 non sono supportati da mp3info. Potresti voler guardare id3v2- Può modificare / aggiungere v2 e visualizzare v1 e v2. Se non ti piace il modo in cui visualizza i tag puoi scrivere uno script che esegue id3v2ed elabora l'output in modo appropriato.
S Prasanth,

@SPrasanth come farlo per visualizzare un tag specifico. Ad esempio: solo l'artista di un file mp3?
Gowtham Gopalakrishnan,

@SPrasanth ho capito. Grazie sto usando -Rflag with grepper ottenere l'output specificato.
Gowtham Gopalakrishnan,

Quando si stampa il titolo del brano con% t, viene stampato ritagliato.
Tulains Córdova,

1
Purtroppo: Only ID3 versions 1.0 and 1.1 are supported.
simlev

11

Puoi usare eyed3 . Innanzitutto, da un terminale, installare:

sudo apt-get install eyed3

Quindi, esegui:

eyeD3 song.mp3

Combina questo con grepper ottenere tag specifici in una riga.

eyeD3 song.mp3 | grep artist

(per rimuovere tutti i tag mp3, vedi QUI )


1
Ho provato questo, e il comando da usare è eyeD3, con una D maiuscola). Ma ho trovato un altro strumento, che soddisfa meglio le mie esigenze, chiamato mp3info. Questo può generare tag mp3 senza la necessità di usare grep, che preferisco.
red_trumpet

eyed3 funziona meglio per me, perché funziona con ID3v2, ma @red_trumpet è giusto, il comando dovrebbe essere eyeD3noneyed3
bmaupin

Usare il plugin di visualizzazione per tag di uscita nel formato desiderato: eyeD3 --plugin display -p "%t% by %a%" *.
simlev

Questo non visualizza TUTTI i tag, ad esempio nessun ISRC. Il programma sotto indicato id3v2 restituisce anche l'ISRC, ma nessuna durata ...
minyves

8

Preferisco usare id3v2, basta digitare id3v2 -l somefile.mp3. Puoi anche vedere la pagina man id3v2 per un uso più specifico.


Questo è fantastico e funziona molto bene
jpo38

Dovrebbe sicuramente essere la risposta migliore, tutti gli altri strumenti hanno problemi di dipendenze su alcune distribuzioni.
Sergio,

Qui è mid3v2invece raccomandato a causa della mancanza del supporto Unicode. Anche l'ultimo aggiornamento di id3v2 era del 2013 .
Pablo A

2

Puoi provare exiftool (leggi e scrivi meta informazioni nei file).

"ExifTool è una libreria Perl indipendente dalla piattaforma più un'applicazione a riga di comando per la lettura, la scrittura e la modifica di meta informazioni in un'ampia varietà di file. ExifTool supporta molti formati di metadati diversi tra cui EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP e ID3, nonché le note del produttore di molte fotocamere digitali di 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 e Sony. " - ExifTool di Phil Harvey

Ecco un esempio del comando:

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)

1

Scopri lltagse stai cercando una soluzione che supporti più di un semplice mp3 / ID3.

Installalo con:

sudo apt-get install lltag

per visualizzare tutti i tag con esso: ( -Sè per spettacolo)

lltag -S somefile.mp3

per visualizzare determinati tag con esso:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.