如何改变音频频率?

tan*_*non 17 audio ffmpeg bitrate resampling

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

slh*_*hck 21

使用 ffmpeg:

ffmpeg -i <input> -af 'asetrate=44100*1/2,atempo=2/1' <output>
Run Code Online (Sandbox Code Playgroud)

这里,1/2 是音高因数。有关更多详细信息,请参阅其他答案


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

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


作为替代方案,请尝试sox。类似的东西:

sox <infile> <outfile> pitch <shift>
Run Code Online (Sandbox Code Playgroud)

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


7vu*_*0hy 12

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

ffmpeg -i input.mp4
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i input.mp4 -af asetrate=44100*3/4,atempo=4/3 output.mp4
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i input.mp4 -af atempo=3/4,asetrate=44100*4/3 output.mp4
Run Code Online (Sandbox Code Playgroud)

注意反向滤波器顺序以防止信号衰减。只要有可能,无损操作应该先于有损操作。我不是 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
Run Code Online (Sandbox Code Playgroud)

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

取而代之的是-af,您可以编写-filter:audio-filter:a

参考