Audio nicht synchron bei Verwendung von ffmpeg, adelay und amix

Audio nicht synchron bei Verwendung von ffmpeg, adelay und amix

Ich habe eine Reihe von MP3-Dateien mit einem Startzeitversatz.

Ich versuche, sie mit Adelay und Amix zusammenzuführen.

Die folgenden Codes werden ausgeführt und erstellen die kombinierte MP3-Datei. Wenn ich mir jedoch die endgültige Ausgabedatei anhöre, gibt es Stellen, an denen die Leute durcheinanderreden, nicht im Sinne von unhöflich, sondern weil der Ton nicht synchron ist.

Hier sind die Dateien mit den Start- und Stoppzeit-Offsets:

d4a19a58-790a-45c1-b96e-819bc98cd408.webm | 1720 | 3762173
ab794f92-bdfb-4bb0-821d-ba80c8a9228a.webm | 48920 | 3328385
a7df9a51-0671-4930-a14b-e7d85a562577.webm | 76220 | 3763361
5d312878-d25d-40d7-9418-bed85e22efc6.webm | 3109640 | 3267473
1cf6127d-250a-4601-a219-b1b6bbd725f8.webm | 3360980 | 3636927
c3ddd462-e05a-425f-af58-f288f930f2cb.webm | 3689600 | 3760423

Hier ist der Befehl, den ich verwendet habe, um die WebM-Datei in MP3 zu konvertieren, der besseren Lesbarkeit halber in Zeilen unterteilt:

ffmpeg 
-acodec libopus 
-i d4a19a58-790a-45c1-b96e-819bc98cd408.webm 
-b:a 320K 
-vn 
-y d4a19a58-790a-45c1-b96e-819bc98cd408.mp3

Hier ist der Befehl, um alle MP3s zur leichteren Lesbarkeit in Zeilen zusammenzufassen:

ffmpeg 
-i d4a19a58-790a-45c1-b96e-819bc98cd408.mp3 
-i ab794f92-bdfb-4bb0-821d-ba80c8a9228a.mp3 
-i a7df9a51-0671-4930-a14b-e7d85a562577.mp3 
-i 1cf6127d-250a-4601-a219-b1b6bbd725f8.mp3 
-i c3ddd462-e05a-425f-af58-f288f930f2cb.mp3 
-filter_complex "
[0]adelay=1720|1720[a0];
[1]adelay=48920|48920[a1];
[2]adelay=76220|76220[a2];
[3]adelay=3360980|3360980[a3];
[4]adelay=3689600|3689600[a4];
[a0][a1][a2][a3][a4]amix=inputs=5
" 
out.mp3 -y

Irgendwelche Ideen, was ich falsch mache?

Antwort1

Sie müssen alle Audiokanäle mit dem gleichen Wert verzögern, indem SieVerzögerung=Millisekunden:alle=trueund verwenden Sie-asynchron 1am Ende Ihres Befehls, sodass ffmpeg nur den Anfang des Audiostreams korrigiert, anstatt ihn zu strecken/stauchen.

also in deinem Fall:

ffmpeg 
-i input1.webm 
-i input2.webm
-i input3.webm
-i input4.webm
-i input5.webm
-filter_complex "
[0]adelay=1720:all=true[a0];
[1]adelay=48920:all=true[a1];
[2]adelay=76220:all=true[a2];
[3]adelay=3360980:all=true[a3];
[4]adelay=3689600:all=true[a4];
[a0][a1][a2][a3][a4]amix=inputs=5 [out]
"
-map "[out]"
out.webm -async 1 -y

wie in der Dokumentation steht:

-async Proben pro Sekunde

Methode zur Audiosynchronisierung. „Dehnt/quetscht“ den Audiostream, um ihn an die Zeitstempel anzupassen. Der Parameter ist die maximale Anzahl an Samples pro Sekunde, um die das Audio geändert wird.-async 1 ist ein Sonderfall, bei dem nur der Anfang des Audiostreams korrigiert wird, ohne dass spätere Korrekturen erfolgen.

verwandte Informationen