Fusiona muchos archivos de audio con posiciones específicas

Fusiona muchos archivos de audio con posiciones específicas

Tengo varios archivos de audio que representan la sesión. Entonces, en una carpeta puedo tener:

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

El nombre del archivo es la fecha y hora en que se creó este archivo. Por ejemplo, el primer archivo se creó el 22 de junio a las 15:59. El segundo a las 16:59.

La duración del audio puede variar, no hay una duración fija. Por ejemplo, el usuario puede conectarse a la sesión durante 5 segundos o durante 10 minutos. Entonces la primera duración será 00:05 y la segunda 10:00.

Estos archivos juntos representan la sesión; es por eso que deben fusionarse. Puede considerarlo como si varias personas llamaran al mismo número de teléfono que se utiliza para la audioconferencia.

Por ejemplo, Alice, Bob y John quieren hablar de algo. Alice llama al número 555-111-22-33 y Bob llama al mismo número 1 minuto después. Hablan juntos durante 5 minutos. Y 30 minutos después Bob y John llaman al mismo número a la misma hora. Y luego Alice se une 1 minuto después.

Entonces, en este caso tenemos múltiples transmisiones de audio. Estas corrientes normalmente se superpondrán, pero no siempre. Por ejemplo, cuando Alice está esperando a Bob al principio, ya la estamos grabando y no hay nadie más en esta sesión, por lo que esta transmisión de audio no se superpone con otras.

Estoy buscando la mejor manera de fusionar grabaciones de audio de cada persona en un solo archivo. Entonces en este expediente debemos escuchar a todos. Y entre llamadas, cuando Alice, Bob y John no están en la sesión, debería haber simplemente silencio.

Estoy mirando el documento ffmpeg y no puedo encontrar opciones que pueda usar para crear transmisiones superpuestas y especificar la hora exacta en la que debe comenzar la transmisión.

¿Saben cuál sería la mejor manera de hacerlo? ¿Tal vez necesito mejores herramientas que solo ffmpeg, tal vez solo necesito usar bibliotecas y lenguaje de programación para crear mi propio programa para hacer eso? Gracias

Respuesta1

Asignemos el tiempo relativo del inicio del primer audio como t=0. Entonces, si la primera grabación de audio comenzó a las 16:59:23y la tercera grabación comenzó a las 17:14:13, entonces la hora de inicio relativa de la tercera es 14:50.

Teniendo esto en cuenta, la estructura de mando básica es

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

Lo que hace el comando es retrasar el inicio relativo de cada archivo de audio, excepto el primero, para que coincida con sus tiempos de inicio relativos de la vida real. Luego, todas las transmisiones de audio retrasadas se mezclan. El amixfiltro inserta silencio donde sea necesario.

adelayrequiere valor en milisegundos, por lo que 3 minutos, 4 segundos son 184 segundos son 184000ms. Se debe proporcionar un valor para cada canal de una transmisión de audio, por lo que si se trata de transmisiones mono, esa [1]adelay=184000[b]es la sintaxis.

información relacionada