MP3's zusammen führen

  • Moin zusammen,

    hier mal was in privater Sache, ich würde gerne MP3's zusammenführen von Hörspielen um, wenn diese in mehrere unterteilt sind, später in einer MP3 (in der richtigen Reihenfolge) sind.

    Problem dabei, was ich bisher gemacht habe, fügt sie zwar zusammen aber nicht in der Reihenfolge wie sie sollten. Hat da noch jemand eine Idee?

    Ich habe hier bereits von der Quellenangabe (*.mp3) geändert, die MP3's in der richtigen Reihenfolge anzugeben (1.mp3 + 2.mp3 + ...) aber leider scheint die CMD da ihre ganz eigenen Ideen zu haben diese zusammen zu setzen.

  • Wenn die Dateien, die zusammengesetzt werden sollen, nicht riesig sind, dann kannst du doch die Dateien in eine Struct laden und dann die Struct in einer Datei speichern.

    Du müsstest dann n Pointer auf die gesamte Struct erstellen und sie dann mit _WinAPI_ReadFile() für die n Dateien nutzen.

    Zumindest so die Theorie...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi Moombas 👋 ,

    wie sieht denn dein $Command string (Zeile 26) aus?
    Damit ist es einfacher, anstatt das ich erst Testdaten zusammen bastel - habe gerade keine MP3 herumliegen lokal.

    Wenn die Dateien, die zusammengesetzt werden sollen, nicht riesig sind, dann kannst du doch die Dateien in eine Struct laden [...]

    Warum sollten die Daten nicht zu groß sein? Ich habe mit Structs nur bedingt Erfahrung, doch ich könnte mir vorstellen das das "copy" command line Tool eine ähnliche Begrenzung haben könnte, wie die Variante über den Struct. Ist aber nur eine Annahme ohne jegliches testen/ausprobieren. Vielleicht hast du kurz Zeit um darauf einzugehen UEZ 😅 . Wenn nicht, nicht schlimm.

    Viele Grüße
    Sven

  • Für mich funktioniert dein Skript, wenn ich paar Testdaten (mp3s) nutze. Hast du dir dein Array der Mp3s vor und nach dem _ArraySort mal angeschaut? Mit Sicherheit, richtig? Das "copy" Tool übernimmt die Reihenfolge die du vorgibst ... deine Kette von Dateien. Daher wäre es wichtig, wie genau deine Dateinamen aussehen. Wenn wirklich irgendwas mit 1.mp3, 2.mp3. 10.mp3 durcheinander kommt, dann eher im _ArraySort anstatt beim copy tool.

    #annahme

    Viele Grüße
    Sven

  • Scheint so zu funzen:

    Natürlich sollte das Array mit den Files entsprechend sortiert sein, aber das überlasse ich Moombas. ;)

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    4 Mal editiert, zuletzt von UEZ (27. Februar 2025 um 17:37)

  • Hi Moombas !

    (für deine Anforderung wahrscheinlich mit "Kanonen auf Spatzen" geschossen ;))

    Falls man viel mit Video-, Audio- oder Bildformaten zu tun hat, ist das freie Multimediaprojekt FFmpeg sehr leistungsfähig : https://de.wikipedia.org/wiki/FFmpeg

    Dies enthält u.a. auch Kommandozeilenoptionen um .mp3-Dateien zu verbinden.

    Auszug : https://trac.ffmpeg.org/wiki/Concatenate

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich denke, dass Musashi recht hat für MP3 Dateien, denn laut ChatGPT

    Zitat

    wenn du mehrere MP3-Dateien programmatisch zu einer einzigen Datei zusammenfügen möchtest, gibt es einige Dinge zu beachten:

    1. Gleiche Audioeigenschaften

    • Alle MP3-Dateien sollten dieselbe Bitrate, Sample-Rate und Kanäle (Mono/Stereo) haben, um Qualitätsverluste oder unerwartete Verzerrungen zu vermeiden.
    • Falls die Dateien unterschiedliche Formate haben, musst du sie zuerst umwandeln (z. B. mit ffmpeg).

    2. Metadaten & ID3-Tags

    • Beim Zusammenfügen können ID3-Tags verloren gehen oder vermischt werden. Es ist ratsam, die Metadaten nach dem Zusammenfügen neu zu setzen.

    3. Frames korrekt verbinden

    • MP3-Dateien bestehen aus Frames. Ein einfaches Aneinanderhängen von Dateien kann zu hörbaren Störungen führen, falls nicht sauber geschnitten wird.
    • Programme wie ffmpeg oder sox können die Dateien korrekt ohne Fehler zusammenführen.

    4. Korrekte Methoden zum Zusammenfügen

    • Mit ffmpeg (empfohlen):
    • Code
      ffmpeg -i "concat:file1.mp3|file2.mp3|file3.mp3" -acodec copy output.mp3
    • Falls das nicht funktioniert, kann man die Dateien erst in eine Textdatei schreiben:
    • Code
      shCopyEditecho "file 'file1.mp3'" > mylist.txt
      echo "file 'file2.mp3'" >> mylist.txt
      ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3

    was plausibel klingt.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Moin, schon mal danke für das ganze feedback ;)

    also ich habe natürlich bei den ersten Tests gemerkt das manchmal die Reihenfolge passt, manchmal nicht.

    Ich werde mir aber eure Vorschläge mal alle in Ruhe anschauen und zuhause testen.
    Das Problem ist halt das es hier um ca. 140 Ordner á ~40 Dateien geht, die final (nach dem zusammensetzen) 90-110MB groß sind.

    Für mich funktioniert dein Skript, wenn ich paar Testdaten (mp3s) nutze. Hast du dir dein Array der Mp3s vor und nach dem _ArraySort mal angeschaut? Mit Sicherheit, richtig? Das "copy" Tool übernimmt die Reihenfolge die du vorgibst ... deine Kette von Dateien. Daher wäre es wichtig, wie genau deine Dateinamen aussehen. Wenn wirklich irgendwas mit 1.mp3, 2.mp3. 10.mp3 durcheinander kommt, dann eher im _ArraySort anstatt beim copy tool.

    Ich werde mir das beim entsprechenden Ordner nochmal anschauen (wo ich definitiv sofort feststellen konnte das die Reihenfolge nicht passt) aber eigentlich habe ich bei den Namensgebungen per mp3tag alles gleich gesetzt (incl. führender Nullen etc.) für Tags und Dateinamen.

    Ich habe auch drüber nachgedacht mir alternativ m3u-Dateien zu bauen (ich glaube das geht relativ einfach) und wenn ich mir das hier so anschaue, schon fast das bevorzugen werde, da dann wenigstens die "Kapitel" erhalten bleiben.

    Wenn ich mich nicht irre müsste ich diese dann per
    ..\Unterordner\Titel_1.mp3
    ..\Unterordner\Titel_2.mp3
    ...
    als reine "textdatei" mit der m3u Endung anlegen.

    Ich muss mir da nochmal Gedanken machen ;)

    Einmal editiert, zuletzt von Moombas (28. Februar 2025 um 09:35)