GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Cara Membaca Tag Mp3 Di Shell?

Apakah ada cara untuk membaca tag mp3 file dari shell? Sesuatu seperti:
mp3tags MyFile.mp3 author harus menampilkan tag penulis dari file mp3.

Jawaban Terbaik

Anda juga dapat menggunakan ffprobe yang merupakan bagian dari ffmpeg .

sudo apt-get install ffmpeg
ffprobe file.mp3

Jika Anda tidak menginginkan informasi lain, seperti panjang trek dan sebagainya, Anda dapat menggabungkan output dengan grep:

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

Atau untuk mendapatkan penulisnya saja:

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

Anda dapat memilih tag lain dengan memisahkannya dengan koma, seperti format_tags=title,album .

Saya ingin mencari kata kunci di semua file mp3 dalam satu folder. Folder tersebut memiliki 486 file, jadi menarik untuk mengetahui solusi mana yang disebutkan di sini yang tercepat. Ini loop yang saya gunakan:

# 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

Catatan:

  • lltag dan mp3info tidak menemukan judul, karena file yang saya gunakan memiliki tag ID3v2, lihat komentar oleh @s-prasanth:Bagaimana cara membaca tag mp3 di shell?
  • eyeD3 bermasalah untuk digunakan secara terprogram, karena menggunakan kode warna (tebal).
  • eyeD3 dan juga id3v2 (tetapi hanya untuk tag ID3 v1) mengembalikan judul dan artis pada baris yang sama, yang semakin memperumit masalah; oleh karena itu getTitleEyed dan terkadang getTitleId3 kembalikan judul dan artisnya, jadi jangan salin-tempel fungsi tersebut.
  • getTitleId3 hanya akan berfungsi untuk tag ID3 v2, karena id3v2 memiliki format berbeda untuk tag ID3v1- dan ID3v2, yaitu

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Sebagai satu-satunya program dari 5 eyeD3 ini mencetak peringatan merah untuk dua file:

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

    Sepertinya kedua file tersebut memiliki tag ID3v1, karena hanya kedua file tersebut yang memiliki lltag dan mp3info bisa mendapatkan gelar. Saya ingin tahu apakah ini bug di eyeD3 karena tidak ada program lain yang disebutkan di sini yang memiliki masalah dengan file-file ini ...

Terkait:Pengikat kosong (hilang) (tt, ti, fi, ff dll.) di FF ketika font Cambria / Calibri digunakan?

Hasil (waktu nyata):

 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

Dari segi waktu, pemenangnya adalah id3tool (mp3info lebih cepat, tetapi tidak bekerja dengan ID3 v2). id3v2 juga cukup cepat, tetapi getTitleId3 fungsi akan membutuhkan penyesuaian untuk juga bekerja dengan tag ID3v1, yang mungkin paling buruk memperlambatnya dengan faktor 2.


Ubuntu
  1. Cara membuat Tag Git

  2. Bagaimana Cara Menginstal Zsh di Ubuntu 20.04?

  3. Bagaimana Cara Membaca Variabel Dari File?

  1. Bagaimana Cara Membaca Seluruh Script Shell Sebelum Mengeksekusinya?

  2. Bagaimana cara membaca kode sumber perintah shell?

  3. Cara menambahkan pengguna ke Linux melalui skrip shell

  1. Bagaimana Cara Membaca Hasil “service –status-all”?

  2. Menambahkan Tag Replaygain?

  3. Cara Mengganti Shell di Linux