Da mich "der Hafer gestochen" hat, habe ich weiter versucht, via FFmpeg ein crossfading hinzubekommen.
Die folgenden Zeilen sind nur ein "Proof of Concept". Das vereinfacht oder verkürzt aufgrund der vielen nötigen manuellen Eingaben nicht wirklich den Ablauf.
Es soll aufzeigen, dass es technisch möglich wäre, z.B. rund ein Dutzend bestehender MP3 Songs in einem Batch zu kürzen (machst Du bereits) und anschliessend die gekürzten einzelnen Songs in 1 Gesamt-Song zu crossfaden.
Der sehr komplex aussehende Einzeiler-Befehl dafür lautet für 11 Beispiel-Dateien wie folgt:
%ffmpeg% -v debug %ShortFiles% -filter_complex "[0a][1a]%CF%[A];[A][2a]%CF%[B];[B][3a]%CF%[C];[C][4a]%CF%[D];[D][5a]%CF%[E];[E][6a]%CF%[F];[F][7a]%CF%[G];[G][8a]%CF%[H];[H][9a]%CF%[I];[I][10a]%CF%" -c:a libmp3lame -b:a %Bitrate%k 11_Merged_7_Seconds_Songs_Crossfaded_%Bitrate%k.mp3
Damit dieser Befehl so funktioniert, braucht es vorgängig noch die Definitionen für
SET Bitrate=320
SET CF=acrossfade=d=1:c1=tri:c2=tri
SET ShortFiles=-i "01 - Legendary.mp3" -i "02 - We Made It Look Easy.mp3" -i "03 - Living Proof.mp3" -i "04 - Waves.mp3" -i "05 - Seeds.mp3" -i "06 - Kiss the Bride.mp3" -i "08 - Walls of Jericho.mp3" -i "09 - I Wrote You a Song.mp3" -i "10 - Living in Paradise.mp3" -i "11 - My First Guitar.mp3" -i "12 - Hollow Man.mp3"
Folgende Probleme/Pendenzen verhindern eine vollständige Automatisierung:
- Wenn nicht alle Songs die gleiche Bitrate haben (im Beispiel 320 kbit/s) kann das unter Umständen zu Audio-Verzerrungen und einer Qualitätsverschlechterung führen. Man kann aus einem schlechten 128kbit/s Song keinen qualitativ besseren 320kbit/s errechnen.
- Es gibt anscheinend keine saubere Variante, um FFmpeg mit einer Liste von Dateien zu füttern die man crossfaden will. Es gibt andere Befehle wie
concat(der einfach nur einzelne Dateien nahtlos aneinanderklebt), dort ist die Verwendung einer Fileliste möglich. Der-acrossfadeBefehl bietet diese Möglichkeit leider nicht, deshalb muss man sehr aufwändig die Dateien einzeln für den Batch-Parameter ShortFiles angeben. - Ein grundlegendes Problem mit Batch-Dateien sind Sonderzeichen in Dateinamen. Wenn in einem Dateinamen wie dem Track "07 - The People’s House.mp3" von Bon Jovis "Forever"-Album ein Hochkomma steckt dann führt das unweigerlich zu Verarbeitungsproblemen. Da der Aufwand sämtliche möglichen Fehlerquellen in einem Batch abzufangen zu gross ist, muss man auch hier manuell Hand anlegen und solche Dateinamen vorgängig korrigieren.
Ein allgemeines Problem tritt zusätzlich erschwerend in den Songs selber auf. Es gibt Songs, die haben ein ellenlanges Intro, dass im dümmsten Fall erst nach 10 Sekunden überhaupt hörbar ist. Das kann man nur mit Testhören überhaupt erkennen.
Erklärung des FFmpegs-Befehls:
Bei einer Verarbeitung könnte man den Parameter -v debug weglassen, er dient nur einer ausführlicheren Fehlerausgabe.
Ansonsten ist der FFmpeg-Befehl eigentlich gar nicht so komplex: ![]()
Er nimmt den ersten und den zweiten Song, führt den acrossfade=d=1 Befehl aus (die letzte Sekunde des ersten Songs wird ausgefadet und die erste Sekunde des zweiten Stücks wird eingefadet) und macht daraus einen neuen Song mit dem Namen [A].
Zu diesem neuen Song [A] wird der dritte Song neu hinzu "crossgefadet" und das gibt den neuen Song [B]. Und so weiter und so fort.
Damit alle einzelnen Stücke während dem Vorgang nicht in der Qualität verändert werden, wird die Audioqualität mit -c:a libmp3lame -b:a %Bitrate%k auf die vorgegebene Bitrate berechnet.
Am Schluss wird der eine neue Gesamtsong (mit allen crossgefadeten Kurzstücken) in eine neue Datei namens 11_Merged_7_Seconds_Songs_Crossfaded_%Bitrate%k.mp3 geschrieben.
Wie gesagt, das ist ein "Proof of Concept" und keine Allerweltslösung die immer und überall funktoniert.

