求Linux下支持非恒定速率变速且不改变音调的命令行音频工具
Linux命令行实现渐变变速(保音调)的音频方案
针对你需要的线性/动态变速、不改变音调、命令行可用、无需分割片段的需求,推荐使用ffmpeg结合rubberband滤镜的方案——你之前可能只用到了ffmpeg的固定变速参数,其实它支持通过表达式实现随时间变化的动态tempo。
核心实现命令
以下命令可以直接实现从开头100%速率线性增长到结尾150%的效果,同时保持音调不变:
ffmpeg -i input.wav -filter_complex "[0:a]rubberband=tempo='1.0 + 0.5*t/duration':pitch=1.0[aout]" -map "[aout]" output.wav
参数解释
tempo='1.0 + 0.5*t/duration':t代表当前处理的音频时间点,duration是输入音频的总时长,这个表达式实现了tempo从1.0(100%)到1.5(150%)的线性增长。pitch=1.0:强制保持原音调,避免变速导致的音调偏移。- 支持输入输出格式:wav、mp3、ogg等ffmpeg兼容的所有常见音频格式,只需替换文件名后缀即可。
额外变速模式
除了线性增长,还可以轻松实现其他变速曲线:
- 指数增长(速率增长越来越快):
ffmpeg -i input.wav -filter_complex "[0:a]rubberband=tempo='1.0 * pow(1.5, t/duration)':pitch=1.0[aout]" -map "[aout]" output.wav
- 分段变速(比如前半段100%,后半段线性增长到150%):
ffmpeg -i input.wav -filter_complex "[0:a]rubberband=tempo='if(lt(t, duration/2), 1.0, 1.0 + 0.5*(t-duration/2)/(duration/2))':pitch=1.0[aout]" -map "[aout]" output.wav
优势说明
- 无需分割音频片段,一次性处理,效率远高于分段变速方案,音质和rubberband独立工具一致。
- 完全命令行友好,可直接嵌入Bash脚本执行。
内容的提问来源于stack exchange,提问作者Skab
相关产品推荐
相关产品推荐

