GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo leer etiquetas Mp3 en Shell?

¿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 y mp3info 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én id3v2 (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 tanto getTitleEyed y a veces getTitleId3 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 y mp3info puede obtener un título. Me pregunto si esto es un error en eyeD3 como ningún otro programa mencionado aquí tiene un problema con estos archivos…

Relacionado:¿Ligaduras en blanco (faltantes) (tt, ti, fi, ff, etc.) en FF cuando se usan fuentes Cambria / Calibri?

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.


Ubuntu
  1. Cómo crear etiquetas Git

  2. ¿Cómo instalar Zsh en Ubuntu 20.04?

  3. ¿Cómo leer todo el script de Shell antes de ejecutarlo?

  4. ¿Agregar etiquetas Replaygain?

  5. Cómo cambiar Shell en Linux

Cómo escribir un script de Shell en Ubuntu

Cómo reproducir MP3 en Ubuntu

Cómo instalar ZSH (Z Shell) en Ubuntu 20.04

¿Cómo dividir un archivo Mp3?

¿Cómo leer los sensores Lm en Amd Fx 6300?

¿Cómo leer argumentos de línea de comando en scripts de Shell?