¿Cómo leer etiquetas mp3 en shell?

53

¿Hay alguna manera de leer las etiquetas mp3 de un archivo desde el shell? Algo así como: mp3tags MyFile.mp3 authordebería generar la etiqueta de autor de un archivo mp3.

red_trumpet
fuente

Respuestas:

47

También puedes usar ffprobecuál es parte de ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Si no desea otra información, como la longitud 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 bucle que utilicé:

# 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:

  • lltagy mp3infono encuentro un título, porque los archivos que estaba usando tenían etiquetas ID3v2, vea el comentario de @ s-prasanth: ¿Cómo leer etiquetas mp3 en shell?
  • eyeD3 Es problemático de usar mediante programación, ya que utiliza códigos de color (negrita).
  • eyeD3y 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, getTitleEyedy a veces getTitleId3devuelve 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 etiquetas ID3v1 e ID3v2, es decir

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Como el ú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 en los que lltage mp3infopueden obtener un título. Me pregunto si esto es un error eyeD3ya que ningún otro programa mencionado aquí tiene un problema con estos archivos ...

Resultados (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). id3v2también es bastante rápido, pero la getTitleId3función necesitaría un ajuste para funcionar también con etiquetas ID3v1, lo que en el peor de los casos puede ralentizarlo por el factor 2.

mxmlnkn
fuente
1
Guau. ¡He sido un usuario avanzado de Exiftool durante años y no tenía idea de que también podía leer metadatos para archivos de sonido! La solución ffprobe (o avprobe en mi caso) también es excelente, gracias. ¡Esta es la mejor respuesta!
Marlar
1
¡Gracias por tu gigantesco trabajo! Algunas de estas herramientas no están disponibles desde mi administrador de paquetes en Fedora. ¿Podría incluir id3infoen su comparación?
Vytenis Bivainis
ffmpegtiene otra ventaja: funciona con aac/ m4afiles. Otras herramientas no parecen (¿o sabes lo contrario?). También sugeriré buscar en su FORMATsección, para evitar casos en los que una secuencia también tenga un titleetc ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'. : .
Jonathan Y.
@JonathanY. Tiene razón, el audio codificado AAC almacenado en un archivo M4A-containter tiene metadatos que no son ID3 y, por lo tanto, solo puede leerse con ffmpeg y, además, exiftool, fuera de la selección en mi respuesta.
mxmlnkn
Los FLAC tienen otro formato de metadatos diferente de MP4 / M4A, a saber, los metadatos de comentarios vorbis, pero las etiquetas también se pueden leer con exiftoolo ffprobe. La herramienta más especializada para este trabajo sería metaflac --listdel flacpaquete. Para ogg exiftooltambién funciona, pero también lo hay vorbiscomment -ldel vorbis-toolspaquete. Extrañamente vorbiscommenty metaflacno se puede intercambiar, a pesar de que FLAC y OGG tienen metadatos vorbis.
mxmlnkn
26

Ok, encontré un programa solo. Se llama mp3info e instalado por

sudo apt-get install mp3info

Para obtener etiquetas mp3 individuales de un archivo, hay que llamar

mp3info -p %a file.mp3

que le da al artista del archivo. El% a significa que uno quiere obtener el artista y hay otras claves para las otras etiquetas.

red_trumpet
fuente
20
Información adicional: Hay 4 estándares diferentes de etiquetas mp3 id3v1, id3v2.2 (obsoleto), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . Un archivo puede tener etiquetas v1 y / o v2 (Sí, v1 y v2 pueden coexistir, pero v2.xy v2.y no pueden coexistir). Creo que v2.3 es el más utilizado. Según ibiblio.org/mp3info (Ver todo), las etiquetas v2 no son compatibles mp3info. Es posible que desee ver id3v2: puede editar / agregar v2 y mostrar v1 y v2. Si no le gusta la forma en que muestra las etiquetas, puede escribir un script que se ejecute id3v2y procese la salida de manera adecuada.
S Prasanth
@SPrasanth cómo hacer que se muestre una etiqueta específica. Por ejemplo: ¿solo el artista de un archivo mp3?
Gowtham Gopalakrishnan
@SPrasanth Lo tengo. Gracias estoy usando -Rflag con greppara obtener la salida especificada.
Gowtham Gopalakrishnan
Cuando imprime el título de la pista con% t, lo imprime recortado.
Tulains Córdova
1
Desafortunadamente: Only ID3 versions 1.0 and 1.1 are supported.
simlev
11

Puedes usar eyed3 . Primero, desde una terminal, instale:

sudo apt-get install eyed3

Entonces corre:

eyeD3 song.mp3

Combina eso con greppara obtener etiquetas específicas en una línea.

eyeD3 song.mp3 | grep artist

(para quitar todas las etiquetas mp3, ver AQUÍ )

philshem
fuente
1
Intenté esto, y el comando para usar es eyeD3, con una D mayúscula;). Pero encontré otra herramienta, que mejor se adapta a mis necesidades, llamada mp3info. Esto puede generar etiquetas mp3 sin la necesidad de usar grep, que prefiero.
red_trumpet
eyeD3 trabaja mejor para mí, ya que funciona con id3v2 pero @red_trumpet correcto, el comando debe ser eyeD3noeyed3
bmaupin
Utilizar el plug-in de visualización de etiquetas de salida en el formato deseado: eyeD3 --plugin display -p "%t% by %a%" *.
simlev
Esto no muestra TODAS las etiquetas, por ejemplo, no ISRC. El programa mencionado a continuación id3v2 también devuelve el ISRC, pero no tiene duración ...
minyves
8

Prefiero usar id3v2, solo escriba id3v2 -l somefile.mp3. También puede ver la página del manual id3v2 para un uso más específico.

Psddp
fuente
Esto es genial y funciona muy bien
jpo38
Definitivamente debería ser la mejor respuesta, todas las otras herramientas tienen problemas de dependencias en algunas distribuciones.
Sergio
Aquí se recomienda en su mid3v2lugar debido a la falta de soporte Unicode. También la última actualización de id3v2 fue en 2013 .
Pablo A
2

Puede probar exiftool (leer y escribir metainformación en archivos).

"ExifTool es una biblioteca Perl independiente de la plataforma más una aplicación de línea de comandos para leer, escribir y editar metainformación en una amplia variedad de archivos. ExifTool admite muchos formatos de metadatos diferentes, incluidos EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP e ID3, así como las notas del fabricante de muchas cámaras digitales de Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon y Sony ". - ExifTool por Phil Harvey

Aquí hay un ejemplo del comando:

exiftool test.mp3 
ExifTool Version Number         : 10.00
File Name                       : test.mp3
Directory                       : .
File Size                       : 8.2 MB
File Modification Date/Time     : 2016:03:02 21:44:58+01:00
File Access Date/Time           : 2016:04:06 21:34:01+02:00
File Inode Change Date/Time     : 2016:03:02 21:45:36+01:00
File Permissions                : rw-rw-r--
File Type                       : MP3
File Type Extension             : mp3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Sample Rate                     : 44100
Channel Mode                    : Stereo
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : False
Emphasis                        : None
VBR Frames                      : 9544
VBR Bytes                       : 8467680
ID3 Size                        : 115419
Band                            : Tech N9ne Collabos
Album                           : Strangeulation (Deluxe Edition)
Composer                        : Tech N9ne Collabos
Genre                           : Rap & Hip-Hop
Copyright                       : 2014 Strange Music, Inc
Title                           : American Horror Story (feat. Ces Cru)
Artist                          : Tech N9ne Collabos
Track                           : 10
Year                            : 2014
Comment                         : 
Lyrics                          : 
Private                         : (Binary data 8192 bytes, use -b option to extract)
Picture MIME Type               : image/jpeg
Picture Type                    : Front Cover
Picture Description             : 
Picture                         : (Binary data 104371 bytes, use -b option to extract)
Audio Bitrate                   : 272 kbps
Date/Time Original              : 2014
Duration                        : 0:04:09 (approx)
cuchilla19899
fuente
1

Compruebe lltagsi está buscando una solución que soporte más que solo mp3 / ID3.

Instalarlo con:

sudo apt-get install lltag

para ver todas las etiquetas con él: ( -Ses para mostrar)

lltag -S somefile.mp3

para ver ciertas etiquetas con él:

lltag --show-tags artist,album,title,number somefile.mp3
0xcaff
fuente