ID3-Tags aus einer Gruppe von MP3-Dateien als CSV-Datei ausgeben

Ich möchte alle ID3-Tags (sowohl ID3v1 als auch ID3v2) in einer Gruppe von MP3-Dateien als CSV-Datei oder ähnliches exportieren. Ich verwende derzeit Mp3tag zum Taggen, aber für die Exportfunktion muss ich angeben, welche Tags ich exportieren möchte. Ich möchte einfach alle vorhandenen Tags (und idealerweise nur die vorhandenen) in einer der MP3-Dateien exportieren (einschließlich benutzerdefinierter „TXXX“-Tags). Für "APIC"-Tags, die eingebettete Bilder speichern, würde es ausreichen, die Existenz des Tags auszugeben (oder noch besser, die Anzahl der eingebetteten Bilder zu zählen).

Ich verwende Microsoft Windows und suche nach einer Freeware-Lösung. Ich verwende gerne Kommandozeilen-Tools (tatsächlich bevorzuge ich sie oft).

Vielen Dank

Antworten (3)

Ich würde vorschlagen, einen Blick auf EyeD3 zu werfen , das sowohl ein Befehlszeilentool als auch eine Python- Bibliothek ist, um genau das zu tun, wonach Sie suchen. Alleine wird es eine Menge von dem tun, was Sie brauchen - mit einem trivialen Python-Skript sollte es in der Lage sein, genau das zu tun, wonach Sie suchen, indem Sie Pythons verwenden, die in der CSV-Bibliothek integriert sind.

Sowohl EyeD3 als auch Python sind kostenlos, plattform- und befehlszeilenübergreifend.

Installieren Sie zuerst Python auf Ihrem System und verwenden Sie dann, pip install eyeD3um EyeD3 zu erhalten.

Für zukünftige Referenz (aus Kommentaren erfasst) :

Das OP, das mehr Erfahrung mit Perl als mit Python hat, verwendete die Perl MP3::Tag- Bibliothek, um die Aufgabe auszuführen, es gibt auch ähnliche Bibliotheken für eine Reihe anderer Sprachen, z. B. taglib-ruby

Nur um nachzufassen - ich konnte EyeD3 nicht zum Laufen bringen - ich habe keine Python-Erfahrung. Aber Sie haben mich auf die Idee gebracht, es mit Perl zu versuchen, womit ich mehr Erfahrung habe. Ich habe das Perl-Modul MP3::Tag verwendet und ein eigenes Skript geschrieben, das ich jetzt zum Laufen gebracht habe, um die benötigten Informationen auszugeben.
@osullic, da das perl MP3::Tag Ihr Problem gelöst hat und diese Antwort Sie in die richtige Richtung gedrängt hat, würde ich vorschlagen, es als Ihre Antwort zu akzeptieren. Alternativ könnten Sie eine Selbstantwort geben und diese akzeptieren.

Befehlszeilentools zur Stapelausgabe von ID3-Tags

Hier ist meine Sammlung von ID3-Tag-Viewern. Ich habe sie in den letzten Monaten für ein anderes Projekt gesammelt, an dem ich gerade arbeite. Sie können das PowerShell-Skript bearbeiten, um so viele Dateien zu verarbeiten, wie Sie möchten. Aber zum leichteren Verständnis habe ich es in einem ersten Schritt mit einer einzelnen Eingabedatei demonstriert.

  1. taglib » Beispielausgabe

    • Pro: Zeigt alle Tags an, einschließlich Nicht-Standard-Tags
    • Contra: keine Deckelmaße
  2. Exiftool » Beispielausgabe

    • Pro: Zeigt alle Tags an, einschließlich Nicht-Standard-Tags
    • Contra: keine Deckelmaße
  3. FFProbe » Beispielausgabe

    • Pro: zeigt alle Tags, einschließlich Nicht-Standard-Tags, zeigt Abdeckungsabmessungen
    • Contra: Kommentar-Tag kann nicht gelesen werden
  4. FFMpeg » Beispielausgabe

    • Pro: zeigt alle Tags, einschließlich Nicht-Standard-Tags, zeigt Abdeckungsabmessungen
    • Contra: Kommentar-Tag kann nicht gelesen werden
  5. HandBrake » Beispielausgabe

    • Pro: zeigt alle Tags, einschließlich Nicht-Standard-Tags, zeigt Abdeckungsabmessungen
    • Contra: Kommentar-Tag kann nicht gelesen werden
  6. Mediainfo » Beispielausgabe

    • Pro: Zeigt alle Tags an, einschließlich Nicht-Standard-Tags
    • Contra: keine Deckelmaße
  7. MetaMP3 » Beispielausgabe

    • Pro: Zeigt alle Tags an, einschließlich Nicht-Standard-Tags
    • Contra: keine Deckelmaße
  8. gettags » Beispielausgabe

    • Pro: Zeigt alle Tags an, einschließlich Nicht-Standard-Tags
    • Contra: zeigt TXXX-Tags ohne Inhalt
  9. Tagger » Beispielausgabe

    • Pro: Kann im Gegensatz zu einigen anderen Kommentar-Tags lesen
    • Contra: keine TXXX-Tags
  10. mpgtx » Beispielausgabe

    • Pro: Zeigt TXXX- und replay_gain-Tags an
    • Contra: kein Album, Genre, Kommentar-Tags
  11. tag » Beispielausgabe

  12. sox » Beispielausgabe

  13. MP3info » Beispielausgabe

    • Contra: überhaupt keine ID3V2-Tags

Die folgenden Powershell-Skripts demonstrieren die nützlichste Syntax für jedes Tool, um nur ID3-Tags anzuzeigen. Sie müssen alle Tools herunterladen und alle Pfade im Skript oder Kurs ändern.

Syntax

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

Mein persönlicher Favorit ist taglib-sharp, dass es die meisten Informationen ausgibt. Danach kommt ExifToolundffprobe

Ich denke, diese Antwort ist besser als die ausgewählte. Das einzige, was mir hier fehlt, ist ein Beispiel, um die Frage tatsächlich zu beantworten - dh Befehlszeilensyntax, um ID3-Tags vieler Dateien tatsächlich in die .csvDatei einzufügen. Während Sie eine Vielzahl von Tools vorführen, mit denen ein bestimmtes Problem gelöst werden kann, scheinen Sie sich darauf zu konzentrieren, ID3-Tags als Befehlszeilenausgabe auszugeben. IMHO wäre Ihre Antwort wirklich wertvoll, wenn sie mindestens ein Beispiel für das Ablegen von ID3-Tag-Daten in eine .csvDatei enthalten würde. Aber trotzdem danke für die ganze Mühe. Schade, dass ich diese Antwort nur einmal hochstimmen kann.

Ich komme etwas spät zum Spiel, aber meine Antwort kann jemand anderem helfen.

Ich denke, dass Sie Mp3tag für diese Aufgabe etwas zu kurz verkaufen . Seine Exportfunktion ist ziemlich robust und ermöglicht es Ihnen, fast jedes textbasierte Format Ihrer Wahl zu erstellen: html, xml, csv, tsv und json, um nur einige zu nennen.

Zum Beispiel verwende ich Folgendes, um alle Felder aus allen Dateien pro Album zu sichern. Gehen Sie zu Datei > Exportieren > Neu (Schaltfläche) > geben Sie einen aussagekräftigen Namen ein > ersetzen Sie den Standard durch Folgendes:

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

Aktivieren Sie das Kontrollkästchen "eine Datei pro Verzeichnis" und führen Sie es aus. Sie erhalten eine CSV-Datei mit Pipe "|" als Trennzeichen in jedem verarbeiteten Verzeichnis. Und man kann Tausende von Verzeichnissen auf einmal verarbeiten.

Das Forum dort hat andere Beispiele (Suche ist dein Freund) und Leute dort sind bereit, dir zu helfen, dir selbst zu helfen.