Audio no sincronizado al usar ffmpeg, adelay y amix

Audio no sincronizado al usar ffmpeg, adelay y amix

Tengo una serie de archivos mp3 con una hora de inicio desplazada.

Estoy intentando fusionarlos con adelay y amix.

Los siguientes códigos se ejecutan y crean el MP3 combinado, pero cuando escucho el archivo de salida final hay momentos en los que las personas hablan entre sí, no en el sentido de que estén siendo groseros, sino en el sentido de que el audio no está sincronizado.

Aquí están los archivos con las compensaciones de tiempo de inicio y finalización:

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

Aquí está el comando que utilicé para convertir el archivo webm a MP3 dividido en líneas para facilitar la lectura:

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

Aquí está el comando roto para combinar todos los mp3 en líneas para facilitar la lectura:

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

¿Alguna idea sobre lo que estoy haciendo mal?

Respuesta1

necesita retrasar todos los canales de audio con el mismo valor usandoun retraso = milisegundos: todo = verdadero, y use-asíncrono 1al final de su comando para que ffmpeg simplemente corrija el inicio de la transmisión de audio en lugar de estirarlo/comprimirlo.

entonces en tu caso:

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

como dice la documentación:

-async muestras_por_segundo

Método de sincronización de audio. "Estira/comprime" el flujo de audio para que coincida con las marcas de tiempo, el parámetro son las muestras máximas por segundo en las que se cambia el audio.-async 1 es un caso especial en el que solo se corrige el inicio de la transmisión de audio sin ninguna corrección posterior.

información relacionada