Mescla muitos arquivos de áudio com posições específicas

3

Eu tenho vários arquivos de áudio que representam a sessão. Então, em uma pasta, posso ter:

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

Nome do arquivo é a data e a hora em que esse arquivo foi criado. Por exemplo, o primeiro arquivo foi criado em 22 de junho, às 15:59. Segundo, às 16:59.

A duração do áudio pode variar, não há duração fixa. Por exemplo, o usuário pode se conectar à sessão por 5 segundos ou por 10 minutos. Então a primeira duração será 00:05 e a segunda 10:00.

Esses arquivos juntos representam a sessão - é por isso que eles devem ser mesclados. Você pode pensar nisso como várias pessoas estão chamando no mesmo número de telefone que é usado para a conferência de áudio.

Por exemplo, Alice, Bob e John querem discutir alguma coisa. Alice está ligando para o número 555-111-22-33 e o Bob está chamando o mesmo número 1 minuto depois. Eles conversam por 5 minutos. E 30 minutos depois Bob e John ligam para o mesmo número ao mesmo tempo. E então Alice está se juntando 1 minuto depois.

Portanto, neste caso, temos vários fluxos de áudio. Esses fluxos geralmente se sobrepõem, mas nem sempre. Por exemplo, quando Alice está esperando pelo Bob no começo, já estamos gravando ela, e não há mais ninguém nessa sessão, então esse fluxo de áudio não está se sobrepondo aos outros.

Estou procurando a melhor maneira de mesclar gravações de áudio de cada pessoa em um único arquivo. Portanto, neste arquivo, devemos ouvir todos. E entre as ligações, quando Alice, Bob e John não estão na sessão, deve haver apenas silêncio.

Estou olhando para o ffmpeg doc e não consigo encontrar opções que eu possa usar para criar fluxos sobrepostos e especificar o horário exato em que o fluxo deve começar.

Vocês sabem qual seria a melhor maneira de fazer isso? Talvez eu precise de ferramentas melhores do que apenas ffmpeg, talvez eu só precise usar bibliotecas e linguagem de programação para criar meu próprio programa para fazer isso? Obrigado

    
por user337085 22.06.2016 / 17:35

1 resposta

6

Vamos atribuir o tempo relativo do início do primeiro áudio como t=0 . Então, se a primeira gravação de áudio começou em 16:59:23 e a terceira gravação começou em 17:14:13 , então a hora de início relativa da terceira é 14:50 .

Com isso em mente, a estrutura básica de comando é

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

O que o comando faz é atrasar o início relativo de cada arquivo de áudio, exceto o primeiro a corresponder aos tempos de início relativos reais. Então todos os fluxos de áudio atrasados são misturados. O filtro amix insere o silêncio onde necessário.

adelay requer valor em milissegundos, portanto, 3 minutos, 4 segundos é 184 segundos é 184000 ms. Um valor tem que ser fornecido para cada canal de um fluxo de áudio, então se você está lidando com fluxos mono, então [1]adelay=184000[b] é a sintaxe.

    
por 22.06.2016 / 19:29

Tags