WinAmp Plugin um einen Song x Sek. anzuspielen

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:

  1. 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.
  2. 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 -acrossfade Befehl bietet diese Möglichkeit leider nicht, deshalb muss man sehr aufwändig die Dateien einzeln für den Batch-Parameter ShortFiles angeben.
  3. 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: :innocent:
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.

Du meinst natürlich ohne viel Arbeit und nahezu automatisch? Da hat Lyricslover ja schon ffmpeg genannt.
Ansonsten geht das mit viel manueller Arbeit natürlich auch in Audacity.
Und es gibt sogar Audiosoftware, die das online im Browser macht:
https://audio-joiner.com/de/

Sehr schöne Möglichkeit, danke für den Hinweis:


Diese Online-Variante crossfadet die Songs automatisch und bietet auch die Möglichkeit Stille am Anfang und Ende visuell zu erkennen und allenfalls manuell zu beschneiden.

Hinweis: Das downloadbare Ergebnis enthält neu ID3v2.4 Werbetags + ein Werbecover und löscht allenfalls in den Quellstücken vorhandene Metadaten. Das kann man aber ja bei Bedarf wieder korrigieren:
image

Audacity war meine erste Anlaufstelle, was bei mehr als 10 Songs nicht wirklich praktikabel ist.
Danke für den Tip es online zu machen. Ich werde es jetzt testen

Das klappt mit den bereits gekürzten Dateien aus Deinem bisherigen Batch erstaunlich gut.
Die URL aufrufen, 1 x 10 gekürzte Musikstücke drag & droppen, unten rechts auf den Button "Zusammenführen" klicken und nach Abschluss den Download-Button anlicken.

Wie siehst Du das?

(Bleibt nur die Frage offen, was die mit den hochgeladenen (Kurz-) Stücken machen. Auf Anhieb konnte ich keine diesbezüglichen Infos finden.)

ich hab meine 53 x 7-sekunden Teststücke durchlaufen lassen. das Ergebnis: Es werden alle Stücke überblendet
Jedoch scheinen ist die 7sekunden-Kürzungen zu kurz zu sein. Ich werde es mal mit 10 Sekunden versuchen.

Soweit ich das sehe, sind 35 Stücke pro Tag Kostenfrei (wobei sicher auch die Dateigröße eine Rolle spielt, denn ich hatte mit meinen 53 keine Probleme).

Ansonsten macht es einen sehr soliden Eindruck!

Die 53x 10 Sekunden wurden wieder problemlos überblendet.

wie bekannt ist, vermeide ich englischsprachige Erklärungen da wo es geht.

in meinem Ursprünglichen Ansatz wollte ich die ersten x-Sekunden eines Songs in eine neue Datei geschrieben haben.
Dank der hiesigen Experten ist das Thema erfolgreich abgeschlossen.
es gibt aber immer ein ABER ...
Ich hab erkannt, dass die Song mehr oder weniger lange 'Intros' haben. Also sind die x-sekündigen Anfänge der mp3s wenig hilfreich.
Im www hab ich folgende Seite gefunden: FFMpeg_Erklärung
Hier ist beschrieben, wie ich auch die Anfänge setzen kann.
Beispiel:
Startet das Kürzen bei Sekunde 30 (-ss 30) und gibt dann 25 Sekunden (-t 25) aus.
So dass sich die Batchdatei jetzt wie folgt aufbaut:

rem KurzFile-Verzeichnis leeren
CD /D "D:\zumLoeschen\Ziel"
del *.mp3

rem Quellverzeichnis a) per MP3File b) per ACCESS c) manuell füllen, danach ....
CD /D "D:\zumLoeschen\Quelle"

rem Verbingung zu ffmpeg.exe
SET FFMPEG="D:\portableApps\ffmpeg\bin\ffmpeg.exe"

rem Verbingung zum Zielordner
SET SubDir="D:\zumLoeschen\Ziel"

rem Falls Zielodner nicht vorhanden, erstellen
MD %SubDir%

rem .mp3 kürzen
for %%A in ("*.mp3") do %FFMPEG% -ss 30 -t 25 -i "%%A" -acodec copy "%SubDir%\%%~nA.mp3"

Ich hoffe irgend jemand kann es gebrauchen :slight_smile:
Bernd

Danke für Deinen Vorschlag mit dem 25 sekündigen Ausschnitt ab der dreissigsten Sekunde eines Stückes.

Genau, das ist eines der Probleme, wie hier vor 13 Tagen erwähnt.

Der Vollständigkeit halber noch die offizielle Erklärung für -ss

-ss position (input/output)

When used as an input option (before -i), seeks in this input file to position.
Note that in most formats it is not possible to seek exactly, so ffmpeg will seek to the closest seek point before position...

When used as an output option (before an output url), decodes but discards input until the timestamps reach position.

position must be a time duration specification

und -t

-t duration (input/output)

When used as an input option (before -i), limit the duration of data read from the input file.

When used as an output option (before an output url), stop writing the output after its duration reaches duration.

duration must be a time duration specification

-to and -t are mutually exclusive and -t has priority.

Quelle: FFmpeg-Dokumentation

In der deutschen Erklärung wird erwähnt, mit dem -ss Befehl würden "wie viele Sekunden vom Anfang entfernt". Das ist eigentlich nicht ganz richtig.
Der -ss Befehl gibt an, ab welcher Position das angegebene Stück gelesen wird. Damit überspringt man die angegebene Zeit im Stück.
Weil dieser Teil im neu ausgegebenen Stück fehlt, kann man aber sinngemäss von "entfernen" sprechen.