Como usar o sox ou ffmpeg para detectar intervalos de silêncio em um arquivo de áudio longo e substituí-los por zeros (também conhecido como suprimir ruído de fundo)?

3

Eu tenho um longo arquivo de áudio que foi criado pela concatenação de muitos arquivos curtos. Eu gostaria de detectar o silêncio entre os segmentos de fala (apenas um limiar é suficiente para os meus propósitos) e substituí-los por zeros absolutos, de modo que não haja "ruído" de fundo. É importante para mim manter a duração da gravação.

Eu sei que o sox pode detectar o silêncio no início e no final de um arquivo e posso usar silence , reverse , pad etc. para remover as amostras e preencher os zeros. Existe uma maneira de fazer isso em todos os lugares no arquivo, não apenas iniciar + terminar?

UPD: esta é provavelmente uma maneira bem complicada de perguntar se existem ferramentas para detecção de atividade de voz no Linux

    
por Pavel 27.03.2015 / 14:02

1 resposta

1

Use a opção sox silence :

sox [input] [output] silence 1 1 2% -1 0.5 2%

reduzirá o silêncio na frente para 1 segundo e reduzirá as lacunas para meio segundo no arquivo. 2% no meu caso ignora o noise floor. 0% pode funcionar para você.

-1 diz ao sox para lidar com cada instância.

    
por 17.04.2016 / 06:23