如何改变音频频率?

如何改变音频频率?

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

答案1

使用 ffmpeg:

ffmpeg -i <input> -af 'asetrate=44100*1/2,atempo=2/1' <output>

此处,1/2 为音高系数。请参阅其他答案更多细节。


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

特点:在不改变节奏的情况下改变音调,反之亦然。


或者,尝试袜子. 类似这样的:

sox <infile> <outfile> pitch <shift>

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

答案2

预先找到输入音频速率:

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

参考

答案3

@slhck 回答更高质量的重采样器

ffmpeg -i <input> -af 'asetrate=44100*1/2:resampler=soxr:precision=33,atempo=2/1' <output>

相关内容