Skript für Ansagen in mp3-Dateien

Ich habe mir mit dem Programm „mp3 diags“ die resultierenden Dateien angeschaut und festgestellt, dass sie vermutlich auf ungeeignete Weise zusammengefügt werden. Zumindest mein DFPlayer kommt mit mehreren mp3 Streams innerhalb einer mp3 Datei anscheinend nicht klar.

Das Problem ist der Aufruf von ffmpeg, was in diesem Fall auf Dateiebene arbeitet. Das heißt, dass die mp3s einfach hintereinander weg aneinander gehangen werden, siehe auch hier: https://trac.ffmpeg.org/wiki/Concatenate
Besser wäre es vermutlich, den „demuxer“ und nicht das „protocol“ zu benutzen.

Bei alldem ist mir außerdem noch aufgefallen, dass die Metadaten anscheinend beim Hinzufügen der Ansagen „verschwinden“. Sie sind nicht wirklich weg, aber jeder normale Player liest wohl nur die erstbesten Metadaten, die er findet. Leider sind die in diesem Fall „richtigen“ Metadaten in der zweiten Datei innerhalb der mp3 versteckt. Auch das ist wohl ffmpeg geschuldet. Man müsste hier denke ich lediglich nach dem concat Parameter noch zusätzlich erst „-i“ und dann nochmal den Namen der zweiten Datei hinzufügen. Dann könnte auch das Mapping der Metadaten korrekt funktionieren.

Ich habe meine Dateien jetzt erstmal mittels „foobar2000“ und der Funktion „rebuild mp3 stream“ repariert und bisher sieht das gut aus. Genau weiß ich leider nicht was da passiert, aber so wie es hinterher in „mp3 diags“ aussieht, werden alle ungültigen Metadaten usw verworfen und die mp3 Streams so zusammengefügt, dass der DFPlayer damit glücklich ist und nichts mehr abgeschnitten wird. Die Metadaten sind zwar weg, aber die braucht man ja nicht zwingend.

Ich fasse nur nochmal meine Beobachtungen zusammen, um den aktuellen Stand bzw. die Probleme in die ich gelaufen bin zu dokumentieren:

  • Zumindest unter Windows akzeptiert das subprocess Modul kein byte Objekt als Parameter. Ich habe da das Encoding des json body einfach weglassen. Geschickter wäre sicher die Abhängigkeit zu curl loszuwerden wie @Til anfangs schon geschrieben hat.
  • Der Aufruf von ffmpeg zum Zusammenfügen der mp3s ist anscheinend problematisch. Möglicherweise kann man den „concat demuxer“ verwenden, so dass die mp3 Streams und nicht die Dateien zusammengefügt werden.
  • Die Metadaten gehen beim Hinzufügen der Ansagen verloren. Hier könnte beim Aufruf von ffmpeg ein zusätzlicher „-i“ Parameter (mit dem Namen der Datei die die korrekten Metadaten enthält) Abhilfe schaffen.

Ich habe momentan leider weder die Zeit den Code anzupassen, noch das Ganze auf verschiedenen Systemen auch vernünftig zu testen. Wie dem auch sei: Vielleicht hilft es ja dem ein oder anderen oder jemand fühlt sich berufen da weiter zu machen :slightly_smiling_face: