Como mudar a frequência de áudio?

12

Quero alterar a frequência de um arquivo de áudio. Significado: o arquivo inteiro deve soar (digamos) uma oitava acima ou abaixo. Como fazer isso? ffmpegSeria preferível o uso ou outra ferramenta de código aberto da linha de comando.

tanon
fonte

Respostas:

13

Com ffmpeg:

ffmpeg -i <input> -af asetrate=44100*0.5,aresample=44100 <output>

Aqui, 0,5 é o fator de afinação. Ou veja a outra resposta para mais detalhes.


Se você precisar de uma GUI, use o Audacity , é uma ferramenta de edição de áudio gratuita, de código aberto e multiplataforma.

Características: Altere o tom sem alterar o andamento ou vice-versa.


Como alternativa, tente sox . Algo parecido:

sox <infile> <outfile> pitch <shift>

onde dá a mudança de tom como "centavos" positivos ou negativos (ou seja, centésimos de semitom). Existem 12 semitons para uma oitava, o que significa ± 1200como parâmetro.

slhck
fonte
impressionante ... sox é exatamente o que eu preciso!
tanon
O método usando ffmpeg altera a duração do áudio?
Mrgloom 22/05/19
@ Mrgloom Não, não deveria.
slhck 22/05/19
Após o uso ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wav, vejo por ffmpeg -iwav original Duration: 00:00:01.95, bitrate: 3080 kb/se wav modificado Duration: 00:00:02.60, bitrate: 1536 kb/s. Pelo que entendi Durationé a duração em segundos.
Mrgloom 22/05/19
@mrgloom Por favor, poste uma nova pergunta e inclua a saída completa da linha de comando.
slhck 22/05/19
8

Encontre a taxa de entrada de áudio de antemão assim:

ffmpeg -i input.mp4

Assumindo a taxa de áudio de entrada 44.100 Hz, este comando fará o trabalho:

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

O fator 3/4 mudará a maioria das vozes femininas e "magras" (esquilos) para vozes masculinas e "gordas". Use 4/3 para o contrário:

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

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

O filtro FFmpeg asetratedeve ter uma variável nomeada irpara taxa de áudio de entrada, em analogia a iw× ihem alguns filtros de vídeo, mas não encontrei nenhuma menção a isso na documentação.

Para fatores maiores que 2 (como 4/1 ou 1/4), você deve usar vários atempofiltros (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

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

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

Referências

7vujy0f0hy
fonte