变声效果实现需要使用三个滤镜分别是:asetrate、aresample和atempo。asetrate在保持PCM数据不变的情况下调节采样率,这会导致语速和语调发生变化,语速和音调发生变化之后,再使用aresample滤镜将采样率恢复。这样一来音频数据的语速和音调就发生变化了,由于我们只想改变音调不想改变语速,所以我们通过atempo滤镜将语速恢复正常。
公式:
./ffmpeg -i in.wav -af asetrate=采样率*倍率,aresample=采样率,atempo=1/倍率 out.wav
比如in.wav的采样率是48KHz,希望变调的比例是0.8,则:
asetrate=48000*0.8
aresample=48000
atempo=1/0.8
./ffmpeg -i in.wav -af asetrate=38400,aresample=48000,atempo=1.25 out.wav
其他方案:
SoundTouch
开源,用于改变音频文件(WAV)的节奏、音调和播放速率。不支持实时音频流
官网:http://soundtouch.surina.net
使用事例:
# -tempo=-25.3:降速25.3%
# -pitch=1.5:升高音调1.5个半音
soundstretch orig.wav dest.wav -tempo=-25.3 -pitch=1.5