GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come leggere i tag Mp3 in Shell?

C'è un modo per leggere i tag mp3 di un file dalla shell? Qualcosa come:
mp3tags MyFile.mp3 author dovrebbe produrre il tag autore di un file mp3.

Migliore risposta

Puoi anche usare ffprobe che fa parte di 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:'

Oppure per avere 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 conteneva 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

Note:

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

    Title  :                                 Artist:    
    

    contro ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Come unico programma di questi 5 eyeD3 stampa 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 in cui lltag e mp3info può ottenere un titolo. Mi chiedo se questo è un bug in eyeD3 poiché nessun altro programma qui menzionato ha problemi con questi file...

Correlati:Legature vuote (mancanti) (tt, ti, fi, ff ecc.) in FF quando vengono utilizzati i caratteri Cambria / Calibri?

Risultati (in 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 getTitleId3 la funzione dovrebbe essere modificata per funzionare anche con i tag ID3v1, che nel peggiore dei casi potrebbero rallentarla di un fattore 2.


Ubuntu
  1. Come leggere i risultati di "servizio -stato-tutto"?

  2. Aggiunta di tag Replaygain?

  3. Come cambiare la shell in Linux

  4. Come leggo il codice sorgente dei comandi della shell?

  5. Come aggiungere utenti a Linux tramite uno script di shell

Come scrivere uno script di shell in Ubuntu

Come riprodurre MP3 su Ubuntu

Come installare ZSH (Z Shell) su Ubuntu 20.04

Come dividere un file Mp3?

Come leggere i sensori Lm su AMD Fx 6300?

Come leggere gli argomenti della riga di comando negli script della shell?