¿Hay alguna forma de leer las etiquetas mp3 de un archivo desde el shell? Algo como:mp3tags MyFile.mp3 author
debe generar la etiqueta de autor de un archivo mp3.
Mejor respuesta
También puede usar ffprobe
que es parte de ffmpeg
.
sudo apt-get install ffmpeg
ffprobe file.mp3
Si no desea otra información, como la duración de la pista, etc., puede combinar la salida con grep:
ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'
O para obtener solo el autor:
ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3
Puede seleccionar otras etiquetas separándolas con una coma, como format_tags=title,album
.
Quería buscar una palabra clave en todos los archivos mp3 en una carpeta. La carpeta tenía 486 archivos, por lo que se volvió interesante saber cuál de las soluciones mencionadas aquí es la más rápida. Aquí está el ciclo que usé:
# 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
Notas:
lltag
ymp3info
no encuentro un título, porque los archivos que estaba usando tenían etiquetas ID3v2, vea el comentario de @s-prasanth:How to read mp3 tags in shell?eyeD3
es problemático de usar programáticamente, porque usa códigos de color (negrita).eyeD3
y tambiénid3v2
(pero solo para etiquetas ID3 v1) devolver el título y el artista en la misma línea, lo que complica aún más las cosas; por lo tantogetTitleEyed
y a vecesgetTitleId3
devuelva tanto el título como el artista, así que no copie y pegue esas funciones.-
getTitleId3 solo funcionará para etiquetas ID3 v2, porque
id3v2
tiene diferentes formatos para las etiquetas ID3v1 e ID3v2, es decir,Title : Artist:
frente a ID3v2:
TIT2 (Title/songname/content description):
-
Como único programa de estos 5
eyeD3
imprime una advertencia roja para dos de los archivos:Invalid mode/bitrate combination for layer II No ID3 v1.x/v2.x tag found!
Parece que esos dos archivos tienen etiquetas ID3v1, porque esos dos archivos son los únicos donde
lltag
ymp3info
puede obtener un título. Me pregunto si esto es un error eneyeD3
como ningún otro programa mencionado aquí tiene un problema con estos archivos…
Resultados (en tiempo 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
En cuanto al tiempo, el ganador aquí es id3tool
(mp3info es más rápido, pero no funciona con ID3 v2). id3v2
también es bastante rápido, pero el getTitleId3
la función necesitaría un ajuste para funcionar también con etiquetas ID3v1, lo que en el peor de los casos puede ralentizarla en un factor 2.