Salida de etiquetas ID3 de un grupo de archivos MP3 como un archivo CSV

Me gustaría exportar todas las etiquetas ID3 (tanto ID3v1 como ID3v2) en un grupo de archivos MP3 como un archivo CSV o algo similar. Actualmente uso Mp3tag para etiquetar, pero su función de exportación requiere que especifique qué etiquetas quiero exportar; Simplemente me gustaría exportar todas las etiquetas que existen (e idealmente solo las que existen) en cualquiera de los archivos MP3 (incluidas las etiquetas "TXXX" definidas por el usuario). Para las etiquetas "APIC" que almacenan imágenes incrustadas, sería suficiente mostrar que la etiqueta existe (o incluso mejor, contar la cantidad de imágenes incrustadas).

Estoy usando Microsoft Windows y estoy buscando una solución gratuita. Estoy feliz de usar herramientas de línea de comandos (de hecho, a menudo las prefiero).

Gracias

Respuestas (3)

Sugeriría echar un vistazo a EyeD3 , que es tanto una herramienta de línea de comandos como una biblioteca de Python para hacer exactamente el tipo de cosas que está buscando. Por sí solo, hará mucho de lo que necesita: con un script de python trivial, debería poder hacer exactamente lo que está buscando usando pythons integrados en la biblioteca csv.

Tanto EyeD3 como Python son gratuitos, multiplataforma y línea de comandos.

Primero instale python en su sistema y luego utilícelo pip install eyeD3para obtener EyeD3.

Para referencia futura, (capturado de los comentarios) :

El OP, que tiene más experiencia en Perl que Python, usó la biblioteca perl MP3::Tag para realizar la tarea, también hay bibliotecas similares para otros idiomas, por ejemplo, taglib-ruby

Solo para hacer un seguimiento, no pude hacer que EyeD3 funcionara, no tengo experiencia con Python. Pero me diste la idea de probarlo con Perl, con el que tengo más experiencia. Utilicé el módulo MP3::Tag de Perl y escribí mi propia secuencia de comandos, que ahora tengo funcionando y generando la información que necesito.
@osullic, Dado que perl MP3::Tag resolvió su problema, y ​​esta respuesta lo empujó en la dirección correcta, sugeriría aceptarlo como su respuesta. Alternativamente, podría hacer una auto-respuesta y aceptar eso.

Herramientas de línea de comandos para generar lotes de etiquetas ID3

Aquí está mi colección de visores de etiquetas ID3. Los coleccioné durante los últimos meses para otro proyecto en el que estoy trabajando actualmente. Puede manipular el script de PowerShell para procesar tantos archivos como desee. Pero para facilitar la comprensión, lo demostré con un solo archivo de entrada en un primer paso.

  1. taglib » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar
    • Contra: sin dimensiones de la cubierta
  2. Exiftool » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar
    • Contra: sin dimensiones de la cubierta
  3. FFProbe » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar, muestra las dimensiones de la cubierta
    • Contra: No se puede leer la etiqueta de comentario
  4. FFMpeg » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar, muestra las dimensiones de la cubierta
    • Contra: No se puede leer la etiqueta de comentario
  5. HandBrake » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar, muestra las dimensiones de la cubierta
    • Contra: No se puede leer la etiqueta de comentario
  6. Mediainfo » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar
    • Contra: sin dimensiones de la cubierta
  7. MetaMP3 » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar
    • Contra: sin dimensiones de la cubierta
  8. gettags » Ejemplo de salida

    • Pro: muestra todas las etiquetas, incluidas las no estándar
    • Contra: muestra etiquetas TXXX sin contenido
  9. Etiquetador » Salida de ejemplo

    • Pro: puede leer la etiqueta de comentarios a diferencia de otros
    • Contra: sin etiquetas TXXX
  10. mpgtx » Ejemplo de salida

    • Pro: muestra las etiquetas TXXX y replay_gain
    • Contra: sin álbum, género, etiquetas de comentarios
  11. etiqueta » Ejemplo de salida

  12. sox » Ejemplo de salida

  13. MP3info » Ejemplo de salida

    • Contra: no hay etiquetas ID3V2 en absoluto

Los siguientes scripts de Powershell demuestran la sintaxis más útil para cada herramienta para ver solo las etiquetas ID3. Tienes que descargar todas las herramientas y cambiar todas las rutas en el script o curso.

Sintaxis

# Choose mp3 file to view ID3 tags from
$input     = "D:\_input\musicfile.mp3"
$outDir    = "D:\_output"

# Set correct paths to downloaded ID3 tools
$taglib    = "D:\tag-lib\taglib-sharp.dll"
$exiftool  = "D:\exiftool\exiftool.exe"
$ffprobe   = "D:\ffmpeg\ffprobe.exe"comment)
$ffmpeg    = "D:\ffmpeg\ffmpeg.exe"
$handbrake = "D:\handbrake\handbrakeCLI.exe"
$mediainfo = "D:\MediaInfo\MediaInfo.exe"
$metamp3   = "D:\metamp3\metamp3.exe"
$gettags   = "D:\gettags\gettags_mingw.exe"
$tagger    = "D:\Tagger\TaggerSharp.exe"
$mpgtx     = "D:\mpgtx\mpgtx.exe"
$tag       = "D:\Tag\Tag.exe"
$sox       = "D:\sox\sox.exe"
$mp3info   = "D:\mp3info\mp3info.exe"    

# Load taglib library, read ID3 tags and save output to specified folder
[void][system.reflection.assembly]::loadfile($taglib)     
$media = [taglib.MPEG.file]::create($input)    
[TagLib.Id3v2.Tag] $Id3v2 = $media.GetTag([TagLib.TagTypes]::Id3v2)
$Id3v2.GetFrames()                                                 | Out-File "$outDir\taglib.txt"

# Run all external CMD utilities and save their output to specified folder
& $exiftool -ee -e -a -f -g1 -s  $input 2>&1                       | Out-File "$outDir\exiftool.txt"
& $ffprobe -loglevel quiet -show_streams -show_format -print_format flat=h=1 $input 2>&1 | Out-File "$outDir\ffprobe.txt"
[string](& $ffmpeg -hide_banner -i $input -f NULL nul 2>&1 )       | Out-File "$outDir\ffmpeg.txt" 
[string](& $handbrake -v0 --scan --input $input 2>&1)              | Out-File "$outDir\handbrake.txt"
& $mediainfo --full $input 2>&1                                    | Out-File "$outDir\mediainfo.txt"
& $metamp3 --info $input 2>&1                                      | Out-File "$outDir\metamp3.txt"
& $gettags $input 2>&1                                             | Out-File "$outDir\gettags.txt"
& $tagger $input 2>&1                                              | Out-File "$outDir\tagger.txt"
(& $mpgtx -i $input 2>&1 ) -replace "`0"                           | Out-File "$outDir\mpgtx.txt" 
& $tag --test $input 2>&1                                          | Out-File "$outDir\tag.txt"
& $sox --info $input 2>&1                                          | Out-File "$outDir\sox.txt"
& $mp3info $input 2>&1                                             | Out-File "$outDir\mp3info.txt"

Mi favorito personal es taglib-sharpque genera la mayor cantidad de información. Después de que llega ExifToolyffprobe

Creo que esta respuesta es mejor que la seleccionada. Lo único que me falta aquí es algún ejemplo para responder realmente a la pregunta, es decir, la sintaxis de la línea de comandos para poner etiquetas ID3 de muchos archivos en el .csvarchivo. Si bien muestra una gran variedad de herramientas que se pueden usar para resolver un problema determinado, parece que se está enfocando en descargar etiquetas ID3 como una salida de línea de comandos. En mi humilde opinión, su respuesta sería realmente valiosa, si tuviera al menos un ejemplo de volcado de datos de etiquetas ID3 en un .csvarchivo. Pero gracias, de todos modos, por todo el esfuerzo. Lástima que pueda votar esta respuesta solo una vez.

Llego un poco tarde al juego, pero mi respuesta puede ayudar a alguien más.

Creo que estás vendiendo Mp3tag un poco corto para esta tarea. Su función de exportación es bastante sólida y le permitirá crear casi cualquier formato basado en texto que elija: html, xml, csv, tsv y json, por mencionar algunos.

Por ejemplo, uso lo siguiente para volcar todos los campos de todos los archivos por álbum. Vaya a Archivo > Exportar > Nuevo (botón) > ingrese un nombre significativo > reemplace el estándar con lo siguiente:

$filename(%_folderpath%__Tags, All.txt,utf-8)$loop(%_path%)^%_parent_directory%|%_directory%|$regexp($list(,:'',''|),\r \n,U+000DU+000A)$$$char(13)$char(10)$loopend() Creado: %_datetime%

Seleccione la casilla de verificación "un archivo por directorio" y ejecute. Obtendrá un csv con tubería "|" como delimitador en cada directorio procesado. Y uno puede procesar miles de directorios de una sola vez.

El foro allí tiene otros ejemplos (la búsqueda es tu amigo) y la gente está dispuesta a ayudarte a que te ayudes a ti mismo.