Como alterar a frequência de áudio?

8

Eu quero mudar a frequência de um arquivo de áudio. Significado: o arquivo inteiro deve soar (digamos) uma oitava acima ou abaixo. Como fazer isso? Usar ffmpeg ou outra ferramenta de código aberto de linha de comando seria preferível.

    
por tanon 04.06.2011 / 11:55

2 respostas

9

Se você precisar de uma GUI, use o Audacity , é uma ferramenta de edição de áudio de plataforma cruzada gratuita e gratuita.

Features: Change the pitch without altering the tempo, or vice-versa.

Se você quiser usar a linha de comando, tente sox :

SoX is a cross-platform (Windows, Linux, MacOS X, etc.) command line utility that can convert various formats of computer audio files in to other formats. It can also apply various effects to these sound files, and, as an added bonus, SoX can play and record audio files on most platforms.

Algo assim:

sox <infile> <outfile> pitch <shift>

onde dá a mudança de tom como "centavos" positivos ou negativos (ou seja, 100 de um semitom). Existem 12 semitons a uma oitava, então isso significaria ± 1200 como parâmetro.

    
por 04.06.2011 / 12:06
4

Encontre antecipadamente a taxa de áudio de entrada:

ffmpeg -i input.mp4

Supondo uma taxa de áudio de entrada de 44.100 Hz, este comando fará o trabalho:

ffmpeg -i input.mp4 -af asetrate=44100*3/4,atempo=4/3 output.mp4

O fator de 3/4 mudará a maioria das vozes femininas e “magras” (esquilos) para vozes masculinas e “gordas”. Use 4/3 para o oposto:

ffmpeg -i input.mp4 -af atempo=3/4,asetrate=44100*4/3 output.mp4

Observe a ordem do filtro invertida para evitar a degradação do sinal. Sempre que possível, a operação sem perdas deve vir antes da operação com perdas. Não tenho 100% de certeza se não estou cometendo algum erro aqui por entender mal os filtros do FFmpeg.

O filtro FFmpeg asetrate deve ter uma variável chamada ir para taxa de entrada de áudio, em analogia a iw × ih em alguns filtros de vídeo, mas não consegui encontrar nenhuma menção na documentação.

Para fatores maiores que 2 (como 4/1 ou 1/4), você deve usar vários filtros atempo (1/4 = 1/2 * 1/2 ou 4/1 = 2/1 * 2 / 1):

ffmpeg -i input.mp4 -af asetrate=44100*4,atempo=1/2,atempo=1/2 output.mp4

Eu não sei como obter voz masculina "magra" e voz feminina "gorda".

Em vez de -af , você pode escrever -filter:audio ou -filter:a .

Referências

por 14.05.2016 / 07:37