¿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:
lltagymp3infono 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?eyeD3es problemático de usar programáticamente, porque usa códigos de color (negrita).eyeD3y 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 tantogetTitleEyedy a vecesgetTitleId3devuelva tanto el título como el artista, así que no copie y pegue esas funciones.-
getTitleId3 solo funcionará para etiquetas ID3 v2, porque
id3v2tiene 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
eyeD3imprime 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
lltagymp3infopuede obtener un título. Me pregunto si esto es un error eneyeD3como 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.