jak*_*ake 1 audio ffmpeg tempo pitch
我知道如何用atempo改变速度,但是音频文件有点失真,而且我找不到改变音调的可靠方法。(例如,将速度和音调提高140%)
Sox有一个速度选项,但会截断音量,并且不如ffmpeg广泛可用。mplayer有一个速度选项,可以很好地运行,但是如果没有其他库,我将无法输出。
我似乎了解ffmpeg没有办法改变音调(也许最近才这样做?),但是有办法改变频率或其他一些标志来模仿改变音调吗?看起来很远,找不到合适的解决方案。
编辑:asetrate:48k * 1.4(假设最初为48k)似乎不起作用,但是失真和音高实际上并没有太大变化。
Edit2:https ://superuser.com/a/1076762 这个答案有点奏效,但是质量比sox speed 1.4选项低得多
截至 2022 年(尽管在 2015 年做出了贡献),FFmpeg 拥有一个rubberband开箱即用的过滤器,没有任何上述丑陋、据称缓慢、质量差和不直观的解决方法。
要使用橡皮带滤波器更改音高,您必须使用半音的频率比来指定音高。这是基于使用公式 (2^x/12),其中 x 代表您想要移调的半音数。
例如,要向上移调一个半音,您可以使用以下命令:
ffmpeg -i my.mp3 -filter:a "rubberband=pitch=1.059463094352953" -acodec copy my-up.mp3
Run Code Online (Sandbox Code Playgroud)
要向下转置,只需对 x 使用负数即可。
要同时更改这两个属性,请指定tempo和pitch值。该tempo值被指定为原始速度的倍数。
以下命令向下移调一个半音并将速度提高 4 倍:
ffmpeg -i slow.mp3 -filter:a "rubberband=pitch=0.9438743126816935, rubberband=tempo=4" -acodec copy fast.mp3
Run Code Online (Sandbox Code Playgroud)
除非进行统计测量,否则质量下降是难以察觉的。
ffmpeg -i <input file name> -filter:a "asetrate=<new frequency>" -y <output file name>似乎为我工作。我使用ffprobe检查了输入文件和输出文件的属性,似乎没有任何差异可以影响其质量。尽管确实运行了几次,并且其中某些文件上的结果文件确实有些伪造,即使代码行相同,也可能是由ffmpeg错误引起的;如果您对质量不满意,请尝试再次运行它。