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
danmp3info
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 jugaid3v2
(tetapi hanya untuk tag ID3 v1) mengembalikan judul dan artis pada baris yang sama, yang semakin memperumit masalah; oleh karena itugetTitleEyed
dan terkadanggetTitleId3
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, yaituTitle : 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
danmp3info
bisa mendapatkan gelar. Saya ingin tahu apakah ini bug dieyeD3
karena tidak ada program lain yang disebutkan di sini yang 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 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.