Bagaimana cara membaca tag mp3 di shell?


53

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

Jawaban:


47

Anda juga dapat menggunakan ffprobebagian mana 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 hanya untuk mendapatkan penulis:

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 di folder. Folder ini memiliki 486 file, jadi menarik untuk mengetahui solusi mana yang disebutkan di sini yang tercepat. Inilah 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:

  • lltagdan mp3infotidak 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 pemrograman, karena menggunakan kode warna (tebal).
  • eyeD3dan juga id3v2(tetapi hanya untuk tag ID3 v1) mengembalikan judul dan artis pada baris yang sama, yang semakin memperumit masalah; karena itu getTitleEyeddan kadang-kadang getTitleId3mengembalikan judul dan artisnya, jadi tolong jangan salin-tempel fungsi-fungsi itu.
  • getTitleId3 hanya akan berfungsi untuk tag ID3 v2, karena id3v2memiliki format berbeda untuk tag ID3v1- dan ID3v2, yaitu

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Karena satu-satunya program dari 5 ini eyeD3mencetak 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 kedua file tersebut adalah satu-satunya tempat lltagdan mp3infodapat memperoleh judul. Saya bertanya-tanya apakah ini bug eyeD3karena tidak ada program lain yang disebutkan di sini memiliki masalah dengan file-file ini ...

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 id3toolsegi waktu, pemenang di sini adalah (mp3info lebih cepat, tetapi tidak berfungsi dengan ID3 v2). id3v2juga cukup cepat, tetapi getTitleId3fungsinya perlu penyesuaian untuk juga bekerja dengan ID3v1-tag, yang mungkin paling lambat memperlambatnya dengan faktor 2.


1
Wow. Saya telah menjadi pengguna daya exiftool selama bertahun-tahun dan saya tidak tahu itu bisa membaca metadata untuk file suara! Solusi ffprobe (atau avprobe dalam kasus saya) juga bagus, terima kasih. Ini jawaban terbaik!
marlar

1
Terima kasih atas kerja raksasa Anda! Beberapa alat ini tidak tersedia dari manajer paket saya di Fedora. Bisakah Anda memasukkan id3infodalam perbandingan Anda?
Vytenis Bivainis

ffmpegmemiliki kelebihan lain: ia bekerja dengan aac/ m4afile. Alat-alat lain sepertinya tidak (atau Anda tahu sebaliknya?). Saya juga akan menyarankan mencari FORMATbagiannya, untuk menghindari kasus di mana aliran juga memiliki titledll ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'.:
Jonathan Y.

@ JonathanY. Anda benar, audio yang disandikan AAC yang disimpan dalam file mengandung M4A mengandung metadata non-ID3 dan karenanya hanya dapat dibaca oleh ffmpeg dan juga exiftool, di luar pilihan dalam jawaban saya.
mxmlnkn

FLAC memiliki format metadata lain yang berbeda dari MP4 / M4A yaitu vorbis comment metadata, tetapi tag juga dapat dibaca dengan exiftoolatau ffprobe. Alat yang lebih khusus untuk pekerjaan ini berasal metaflac --listdari flacpaket. Untuk ogg exiftooljuga berfungsi, tetapi ada juga vorbiscomment -ldari vorbis-toolspaket. Aneh vorbiscommentdan metaflactidak dapat dipertukarkan, meskipun FLAC dan OGG keduanya memiliki metadata coment vorbis?
mxmlnkn

26

Ok, saya menemukan sebuah program sendiri. Ini disebut mp3info dan diinstal oleh

sudo apt-get install mp3info

Untuk mendapatkan tag mp3 tunggal dari suatu file, seseorang harus menelepon

mp3info -p %a file.mp3

yang memberi artis file. % A berarti seseorang ingin mendapatkan artis dan ada beberapa kunci lain untuk tag lainnya.


20
Info tambahan: Ada 4 standar berbeda dari tag mp3 id3v1, id3v2.2 (usang), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . File dapat memiliki tag v1 dan / atau v2 (Ya v1 dan v2 dapat hidup berdampingan, tetapi v2.x dan v2.y tidak dapat hidup berdampingan). Saya percaya v2.3 adalah yang paling banyak digunakan. Menurut tag ibiblio.org/mp3info (See Todo) v2 tidak didukung oleh mp3info. Anda mungkin ingin melihat id3v2- Ini dapat mengedit / menambah v2 dan menampilkan v1 dan v2. Jika Anda tidak suka caranya menampilkan tag, Anda dapat menulis skrip yang menjalankan id3v2dan memproses output dengan tepat.
S Prasanth

@SPrasanth cara membuatnya menampilkan tag tertentu. Misalnya: hanya artis file mp3?
Gowtham Gopalakrishnan

@Rasanth saya mengerti. Terima kasih saya menggunakan -Rflag dengan grepuntuk mendapatkan output yang ditentukan.
Gowtham Gopalakrishnan

Ketika Anda mencetak judul lagu dengan% t, ia mencetaknya terpotong.
Tulains Córdova

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

11

Anda bisa menggunakan eyed3 . Pertama, dari terminal, instal:

sudo apt-get install eyed3

Lalu lari:

eyeD3 song.mp3

Gabungkan dengan grepuntuk mendapatkan tag tertentu dalam satu baris.

eyeD3 song.mp3 | grep artist

(untuk menghapus semua tag mp3, lihat DI SINI )


1
Saya mencoba ini, dan perintah untuk digunakan adalah eyeD3, dengan huruf besar D;). Tetapi saya menemukan alat lain, yang lebih sesuai dengan kebutuhan saya, bernama mp3info. Ini dapat menampilkan tag mp3 tanpa harus menggunakan grep, yang saya sukai.
red_trumpet

eyeD3 berfungsi lebih baik untuk saya karena ia bekerja dengan id3v2, tetapi @red_trumpet benar, perintahnya seharusnya eyeD3tidakeyed3
bmaupin

Menggunakan tampilan plugin untuk tag output dalam format yang diinginkan: eyeD3 --plugin display -p "%t% by %a%" *.
simlev

Ini tidak menampilkan SEMUA tag, misalnya tidak ada ISRC. Program yang disebutkan di bawah id3v2 juga mengembalikan ISRC, tetapi tidak ada durasi ...
minyves

8

Saya lebih suka menggunakan id3v2, cukup ketik id3v2 -l somefile.mp3. Anda juga dapat melihat halaman manual id3v2 untuk penggunaan yang lebih spesifik.


Ini hebat dan bekerja sangat baik
jpo38

Pasti menjadi jawaban terbaik, semua alat lain memiliki masalah ketergantungan pada beberapa distribusi.
Sergio

Di sini direkomendasikan mid3v2sebagai gantinya karena kurangnya dukungan Unicode. Juga id3v2 pembaruan terakhir adalah pada 2013 .
Pablo A

2

Anda dapat mencoba exiftool (Baca dan tulis informasi meta dalam file).

"ExifTool adalah perpustakaan Perl platform-independen plus aplikasi baris perintah untuk membaca, menulis, dan mengedit informasi meta dalam berbagai file. ExifTool mendukung banyak format metadata yang berbeda termasuk EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profil, Photoshop IRB, FlashPix, AFCP dan ID3, serta catatan pembuat banyak kamera digital oleh Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Fase Satu, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon dan Sony. " - ExifTool oleh Phil Harvey

Ini adalah contoh dari perintah:

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

Periksa lltagapakah Anda mencari solusi yang mendukung lebih dari sekadar mp3 / ID3.

Instal dengan:

sudo apt-get install lltag

untuk melihat semua tag dengan itu: ( -Suntuk pertunjukan)

lltag -S somefile.mp3

untuk melihat tag tertentu dengannya:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.