如何改变音频频率?


12

我想更改音频文件的频率。意思是:整个文件听起来(说)高或低八度。怎么做?使用ffmpeg或其他命令行开源工具会更好。

Answers:


13

使用ffmpeg:

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

此处,螺距系数为0.5。或查看其他答案以获取更多详细信息。


如果您需要GUI,请使用Audacity,它是一个免费的开源跨平台音频编辑工具。

特点:改变音高而不改变速度,反之亦然。


或者,尝试sox。像这样:

sox <infile> <outfile> pitch <shift>

其中给出的音高变化为正或负“分”(即半音的百分之一)。一个八度有12个半音,因此这意味着将± 1200作为参数。


太棒了……袜子就是我所需要的!
tanon 2011年

使用ffmpeg的方法会改变音频的持续时间吗?
mrgloom

@mrgloom不,不应该。
slhck

使用后,ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wav我会看到ffmpeg -i原始的wav Duration: 00:00:01.95, bitrate: 3080 kb/s和修改的wav Duration: 00:00:02.60, bitrate: 1536 kb/s。据我了解Duration,长度以秒为单位。
mrgloom

@mrgloom请发布一个新问题,并包括完整的命令行输出。
slhck

8

预先找到输入音频率,因此:

ffmpeg -i input.mp4

假设输入音频率为44,100 Hz,此命令将完成以下工作:

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

3/4的因数会将大多数女性和“瘦”(花栗鼠)声音变成男性和“胖”声音。相反使用4/3:

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

注意滤波器顺序相反,以防止信号降级。只要有可能,应在有损操作之前进行无损操作。我不确定100%是否会因误解FFmpeg过滤器而在此处犯错。

FFmpeg过滤器asetrate应该有一个ir用于输入音频率的变量,类似于某些视频过滤器中的iw× ih,但是我在文档中找不到任何提及。

对于大于2的因数(例如4/1或1/4),必须使用多个atempo过滤器(1/4 = 1/2 * 1/2或4/1 = 2/1 * 2/1):

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

我不知道如何获得“瘦”男声和“胖”女声。

相反-af,您可以编写-filter:audio-filter:a

参考文献

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.