Você também pode usar ffprobe
, que faz parte de ffmpeg
.
sudo apt-get install ffmpeg
ffprobe file.mp3
Se você não quiser outras informações, como o tamanho da trilha e assim por diante, você pode combinar a saída com o grep:
ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'
Ou para obter apenas o autor:
ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3
Você pode selecionar outras tags separando-as com uma vírgula, como format_tags=title,album
.
Eu queria pesquisar uma palavra-chave em todos os arquivos mp3 em uma pasta. A pasta tinha 486 arquivos, então ficou interessante saber qual das soluções mencionadas aqui é a mais rápida. Aqui está o loop que usei:
# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool
keyword='fill_me_in'
getTitleFF() { ffprobe "" 2>&1 | sed -E -n 's/^ *title *: (.*)//p'; }
getTitleLL() { lltag --show-tags title "" | sed -nE 's/^ TITLE=(.*)//p'; }
getTitleEyed() { eyeD3 2>&1 "" | grep 'title'; }
getTitleInfo() { mp3info -p %t ""; }
getTitleId3() { id3v2 -l "" | sed -nE 's/^TIT2 \([^)]*\): (.*)//p'; }
getTitleExif() { exiftool -title -b ""; }
getTitleId3i() { id3info "" | sed -n 's/^=== TIT2 \(.*\): //p'; }
getTitleTool() { id3tool "" | 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
Notas:
-
lltag
e mp3info
não encontram um título, porque os arquivos que eu estava usando tinham tags ID3v2, veja o comentário de @ s-prasanth: Como ler tags de mp3 no shell?
-
eyeD3
é problemático para usar programaticamente, porque ele usa códigos de cores (negrito).
-
eyeD3
e também id3v2
(mas apenas para tags ID3 v1) retornam o título e o artista na mesma linha, o que complica ainda mais as coisas; portanto, getTitleEyed
e, às vezes, getTitleId3
retornam o título e o artista, portanto, não copie e cole essas funções.
-
getTitleId3 funcionará apenas para tags ID3 v2, porque id3v2
tem formatos diferentes para tags ID3v1 e ID3v2, ou seja,
Title : Artist:
vs. ID3v2:
TIT2 (Title/songname/content description):
-
Como o único programa desses 5 eyeD3
imprime um aviso vermelho para dois dos arquivos:
Invalid mode/bitrate combination for layer II
No ID3 v1.x/v2.x tag found!
Parece que esses dois arquivos têm tags ID3v1, porque esses dois arquivos são os únicos em que lltag
e mp3info
podem obter um título. Eu estou querendo saber se isso é um bug em eyeD3
como nenhum outro programa mencionado aqui tem um problema com esses arquivos ...
Resultados (tempo real):
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
Por tempo, o vencedor aqui é id3tool
(o mp3info é mais rápido, mas não funciona com o ID3 v2).
id3v2
também é bastante rápido, mas a função getTitleId3
precisaria de ajuste para funcionar também com tags ID3v1, o que pode, na pior das hipóteses, atrasá-lo pelo fator 2.