Mehrere Audiodateien mit bestimmten Positionen zusammenführen

Mehrere Audiodateien mit bestimmten Positionen zusammenführen

Ich habe mehrere Audiodateien, die die Sitzung darstellen. In einem Ordner kann ich also Folgendes haben:

2016-06-22-15-59-59-000.mka
2016-06-22-16-59-59-001.mka
2016-06-22-17-59-59-002.mka

Der Dateiname ist das Datum und die Uhrzeit der Erstellung dieser Datei. Beispielsweise wurde die erste Datei am 22. Juni um 15:59 Uhr erstellt. Die zweite um 16:59 Uhr.

Die Audiodauer kann variieren, es gibt keine feste Dauer. Der Benutzer kann sich beispielsweise 5 Sekunden oder 10 Minuten lang mit der Sitzung verbinden. Die erste Dauer beträgt also 00:05 und die zweite 10:00.

Diese Dateien stellen zusammen die Sitzung dar – deshalb sollten sie zusammengeführt werden. Sie können es sich so vorstellen, als würden mehrere Personen dieselbe Telefonnummer anrufen, die für die Audiokonferenz verwendet wird.

Beispiel: Alice, Bob und John möchten etwas besprechen. Alice ruft die Nummer 555-111-22-33 an, und Bob ruft dieselbe Nummer eine Minute später an. Sie sprechen fünf Minuten lang miteinander. Und 30 Minuten später rufen Bob und John zur selben Zeit dieselbe Nummer an. Und dann kommt Alice eine Minute später dazu.

In diesem Fall haben wir also mehrere Audiostreams. Diese Streams überlappen sich normalerweise, aber nicht immer. Wenn Alice beispielsweise ganz am Anfang auf Bob wartet, zeichnen wir sie bereits auf und es ist sonst niemand in dieser Sitzung, sodass sich dieser Audiostream nicht mit anderen überlappt.

Ich suche nach der besten Möglichkeit, Audioaufnahmen aller Personen in einer einzigen Datei zusammenzufügen. In dieser Datei müssen wir also jeden hören. Und zwischen den Anrufen, wenn Alice, Bob und John nicht in der Sitzung sind, sollte einfach Stille herrschen.

Ich sehe mir die ffmpeg-Dokumentation an und kann keine Optionen finden, mit denen ich überlappende Streams erstellen und die genaue Uhrzeit angeben kann, zu der der Stream starten soll.

Wisst ihr, wie man das am besten macht? Vielleicht brauche ich bessere Tools als nur ffmpeg, vielleicht muss ich einfach Bibliotheken und Programmiersprachen verwenden, um mein eigenes Programm dafür zu erstellen? Danke

Antwort1

Lassen Sie uns die relative Zeit des Starts der ersten Audioaufnahme als festlegen t=0. Wenn also die erste Audioaufnahme um 16:59:23und die dritte Aufnahme um begonnen hat 17:14:13, dann ist die relative Startzeit der dritten Aufnahme 14:50.

Vor diesem Hintergrund ist die grundlegende Befehlsstruktur

ffmpeg -i first.mka -i second.mka -i third.mka -i fourth.mka
       -filter_complex
         "[1]adelay=184000|184000[b];
          [2]adelay=360000|360000[c];
          [3]adelay=962000|962000[d];
          [0][b][c][d]amix=4"
merged.mka

Der Befehl verzögert den relativen Start jeder Audiodatei außer der ersten, um ihre tatsächlichen relativen Startzeiten anzupassen. Dann werden alle verzögerten Audiostreams zusammengemischt. Der amixFilter fügt bei Bedarf Stille ein.

adelayerfordert einen Wert in Millisekunden, also sind 3 Minuten, 4 Sekunden 184 Sekunden und 184000ms. Für jeden Kanal eines Audiostreams muss ein Wert angegeben werden, wenn Sie also mit Monostreams arbeiten, [1]adelay=184000[b]ist dies die Syntax.

verwandte Informationen