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.