Como faço para restringir um valor à freqüência de áudio no ffmpeg?

0

Se eu quisesse criar meu próprio visualizador de áudio, por exemplo, ter uma imagem de algo expandido e contrair com a batida de um áudio, como eu faria isso? Existe alguma maneira de obter a freqüência de áudio no ffmpeg e restringi-lo a algum outro valor? Obrigado.

    
por Meme Stream 03.07.2017 / 13:37

1 resposta

3

O que você quer é alguma indicação do volume da amostra. Para sinais digitais, isso pode ser medido através do nível RMS. Você pode usar o astats filter no ffmpeg com a injeção de metadados para obter esse nível de RMS por amostra:

ffmpeg -i input.m4a -filter:a "astats=metadata=1:reset=1,ametadata=mode=print:key=lavfi.astats.Overall.RMS_level:file=stats.txt" -f null -

Aqui, metadata=1 e reset=1 ativam a geração de metadados e o ametadata filtro imprime esses valores ( mode=print ). A saída é gravada em stats.txt enquanto nenhuma codificação real é executada ( -f null - ). O log é assim:

frame:0    pts:0       pts_time:0      
lavfi.astats.Overall.RMS_level=-77.999541
frame:1    pts:1536    pts_time:0.032  
lavfi.astats.Overall.RMS_level=-68.693275
frame:2    pts:3072    pts_time:0.064  
lavfi.astats.Overall.RMS_level=-62.974396
frame:3    pts:4608    pts_time:0.096  
lavfi.astats.Overall.RMS_level=-61.259331
frame:4    pts:6144    pts_time:0.128  

Você pode filtrar as linhas com base na chave lavfi.astats.Overall.RMS_level e usar esses valores dB para visualização:

grep "lavfi.astats.Overall.RMS_level=" stats.txt | sed 's/lavfi.astats.Overall.RMS_level=//g' > stats_clean.txt

O mínimo é menos infinito, e o máximo é 0 - então você tem que redimensionar apropriadamente esses valores você mesmo. Você pode ter que filtrar esses valores com base em algum filtro de média móvel para obter uma visualização adequada.

PS: Com música, não há single frequência de áudio. O áudio que você está ouvindo é composto de diferentes frequências, que chamamos de espectro . Parece com isso, onde você vê a intensidade de certa frequência ao longo do tempo:

Ofiltroastatsdoffmpegsópodeproduzirinformaçõesnodomíniodotempo,nãonodomíniodafrequência(comomostraaimagemacima).Sevocêquisergerarumespectrocomoffmpeg,poderáfazê-locomo showspectrum filter .

    
por 03.07.2017 / 15:08

Tags