FFmpeg:如何使用 ffmpeg 在 mp3 中创建旋转 3D (haas) 效果?

FFmpeg : How to create rotating 3D (haas) effect in mp3 using ffmpeg?

我想在 mp3 中添加旋转 3d 效果(哈斯效果)。我的意思是,当通过耳机收听时,音频似乎会周期性地从左到右改变方向,反之亦然(如下所示)。为此,我在网上搜索了一下,尝试通过以下方式实现:

  1. 首先,我想,如果我定期改变左右声道的音频(比如当右声道音量最大(100%),左声道音量小(20%,反之亦然)然后我可以实现,但它不像3D。
  2. 其次,当我研究更多时发现它是通过在两个通道之间创建延迟来完成的。我发现我可以根据需要创建 0.0 到 0.8 毫秒的延迟。 为此,我在 FFmpeg 中使用以下命令:

第 1 步:拆分音频通道:

ffmpeg -i D:\ffmpeg\Down.mp3 -map_channel 0.0.0 D:\ffmpeg\L.mp3 -map_channel 0.0.1 D:\ffmpeg\R.mp3

Stem 2:将左声道拆分为多个部分:

Note: We will only change the speed of Left channel so we split left channel into 4 seconds parts.

ffmpeg -i D:\ffmpeg\L.mp3 -f segment -segment_time 4 D:\ffmpeg\Split\%03d.mp3

第 3 步:改变每个部分的速度

Now We change the tempo (speed) of each part so it may feel like the sound is moving from left to right and vice versa

ffmpeg -y -i D:\ffmpeg\Split[=12=]0.mp3 -af atempo=1.0008 D:\ffmpeg\Modi[=12=]0.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi[=12=]1.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]2.mp3 -af atempo=0.9992 D:\ffmpeg\Modi[=12=]2.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi[=12=]3.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]4.mp3 -af atempo=1.0008 D:\ffmpeg\Modi[=12=]4.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]5.mp3 -af atempo=1.0000 D:\ffmpeg\Modi[=12=]5.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]6.mp3 -af atempo=0.9992 D:\ffmpeg\Modi[=12=]6.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]7.mp3 -af atempo=1.0000 D:\ffmpeg\Modi[=12=]7.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]8.mp3 -af atempo=1.0008 D:\ffmpeg\Modi[=12=]8.mp3
ffmpeg -y -i D:\ffmpeg\Split[=12=]9.mp3 -af atempo=1.0000 D:\ffmpeg\Modi[=12=]9.mp3
ffmpeg -y -i D:\ffmpeg\Split0.mp3 -af atempo=0.9992 D:\ffmpeg\Modi0.mp3
ffmpeg -y -i D:\ffmpeg\Split1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi1.mp3
ffmpeg -y -i D:\ffmpeg\Split2.mp3 -af atempo=1.0008 D:\ffmpeg\Modi2.mp3
ffmpeg -y -i D:\ffmpeg\Split3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi3.mp3
ffmpeg -y -i D:\ffmpeg\Split4.mp3 -af atempo=0.9992 D:\ffmpeg\Modi4.mp3
ffmpeg -y -i D:\ffmpeg\Split5.mp3 -af atempo=1.0000 D:\ffmpeg\Modi5.mp3
ffmpeg -y -i D:\ffmpeg\Split6.mp3 -af atempo=1.0008 D:\ffmpeg\Modi6.mp3
ffmpeg -y -i D:\ffmpeg\Split7.mp3 -af atempo=1.0000 D:\ffmpeg\Modi7.mp3
ffmpeg -y -i D:\ffmpeg\Split8.mp3 -af atempo=0.9992 D:\ffmpeg\Modi8.mp3
ffmpeg -y -i D:\ffmpeg\Split9.mp3 -af atempo=1.0000 D:\ffmpeg\Modi9.mp3
ffmpeg -y -i D:\ffmpeg\Split0.mp3 -af atempo=1.0008 D:\ffmpeg\Modi0.mp3
ffmpeg -y -i D:\ffmpeg\Split1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi1.mp3
ffmpeg -y -i D:\ffmpeg\Split2.mp3 -af atempo=0.9992 D:\ffmpeg\Modi2.mp3
ffmpeg -y -i D:\ffmpeg\Split3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi3.mp3
ffmpeg -y -i D:\ffmpeg\Split4.mp3 -af atempo=1.0008 D:\ffmpeg\Modi4.mp3
ffmpeg -y -i D:\ffmpeg\Split5.mp3 -af atempo=1.0000 D:\ffmpeg\Modi5.mp3
ffmpeg -y -i D:\ffmpeg\Split6.mp3 -af atempo=0.9992 D:\ffmpeg\Modi6.mp3
ffmpeg -y -i D:\ffmpeg\Split7.mp3 -af atempo=1.0000 D:\ffmpeg\Modi7.mp3
ffmpeg -y -i D:\ffmpeg\Split8.mp3 -af atempo=1.0008 D:\ffmpeg\Modi8.mp3
ffmpeg -y -i D:\ffmpeg\Split9.mp3 -af atempo=1.0000 D:\ffmpeg\Modi9.mp3
ffmpeg -y -i D:\ffmpeg\Split0.mp3 -af atempo=0.9992 D:\ffmpeg\Modi0.mp3
ffmpeg -y -i D:\ffmpeg\Split1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi1.mp3
ffmpeg -y -i D:\ffmpeg\Split2.mp3 -af atempo=1.0008 D:\ffmpeg\Modi2.mp3
ffmpeg -y -i D:\ffmpeg\Split3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi3.mp3
ffmpeg -y -i D:\ffmpeg\Split4.mp3 -af atempo=0.9992 D:\ffmpeg\Modi4.mp3
ffmpeg -y -i D:\ffmpeg\Split5.mp3 -af atempo=1.0000 D:\ffmpeg\Modi5.mp3
ffmpeg -y -i D:\ffmpeg\Split6.mp3 -af atempo=1.0008 D:\ffmpeg\Modi6.mp3
ffmpeg -y -i D:\ffmpeg\Split7.mp3 -af atempo=1.0000 D:\ffmpeg\Modi7.mp3
ffmpeg -y -i D:\ffmpeg\Split8.mp3 -af atempo=0.9992 D:\ffmpeg\Modi8.mp3
ffmpeg -y -i D:\ffmpeg\Split9.mp3 -af atempo=1.0000 D:\ffmpeg\Modi9.mp3
ffmpeg -y -i D:\ffmpeg\Split0.mp3 -af atempo=1.0008 D:\ffmpeg\Modi0.mp3
ffmpeg -y -i D:\ffmpeg\Split1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi1.mp3
ffmpeg -y -i D:\ffmpeg\Split2.mp3 -af atempo=0.9992 D:\ffmpeg\Modi2.mp3
ffmpeg -y -i D:\ffmpeg\Split3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi3.mp3
ffmpeg -y -i D:\ffmpeg\Split4.mp3 -af atempo=1.0008 D:\ffmpeg\Modi4.mp3
ffmpeg -y -i D:\ffmpeg\Split5.mp3 -af atempo=1.0000 D:\ffmpeg\Modi5.mp3
ffmpeg -y -i D:\ffmpeg\Split6.mp3 -af atempo=0.9992 D:\ffmpeg\Modi6.mp3
ffmpeg -y -i D:\ffmpeg\Split7.mp3 -af atempo=1.0000 D:\ffmpeg\Modi7.mp3
ffmpeg -y -i D:\ffmpeg\Split8.mp3 -af atempo=1.0008 D:\ffmpeg\Modi8.mp3
ffmpeg -y -i D:\ffmpeg\Split9.mp3 -af atempo=1.0000 D:\ffmpeg\Modi9.mp3
ffmpeg -y -i D:\ffmpeg\Split0.mp3 -af atempo=0.9992 D:\ffmpeg\Modi0.mp3
ffmpeg -y -i D:\ffmpeg\Split1.mp3 -af atempo=1.0000 D:\ffmpeg\Modi1.mp3
ffmpeg -y -i D:\ffmpeg\Split2.mp3 -af atempo=1.0008 D:\ffmpeg\Modi2.mp3
ffmpeg -y -i D:\ffmpeg\Split3.mp3 -af atempo=1.0000 D:\ffmpeg\Modi3.mp3
ffmpeg -y -i D:\ffmpeg\Split4.mp3 -af atempo=1.0000 D:\ffmpeg\Modi4.mp3

Here I used 1.0000 for normal speed and 1.0008 for increased speed and 0.9992 for decreased speed

Spet 4:合并小段音频

ffmpeg -f concat -safe 0 -i D:\ffmpeg\f.txt -c copy D:\ffmpeg\output.mp3

其中 f.txt 包含:

file 'D:\ffmpeg\Modi[=14=]0.mp3'
file 'D:\ffmpeg\Modi[=14=]1.mp3'
file 'D:\ffmpeg\Modi[=14=]2.mp3'
file 'D:\ffmpeg\Modi[=14=]3.mp3'
file 'D:\ffmpeg\Modi[=14=]4.mp3'
file 'D:\ffmpeg\Modi[=14=]5.mp3'
file 'D:\ffmpeg\Modi[=14=]6.mp3'
file 'D:\ffmpeg\Modi[=14=]7.mp3'
file 'D:\ffmpeg\Modi[=14=]8.mp3'
file 'D:\ffmpeg\Modi[=14=]9.mp3'
file 'D:\ffmpeg\Modi0.mp3'
file 'D:\ffmpeg\Modi1.mp3'
file 'D:\ffmpeg\Modi2.mp3'
file 'D:\ffmpeg\Modi3.mp3'
file 'D:\ffmpeg\Modi4.mp3'
file 'D:\ffmpeg\Modi5.mp3'
file 'D:\ffmpeg\Modi6.mp3'
file 'D:\ffmpeg\Modi7.mp3'
file 'D:\ffmpeg\Modi8.mp3'
file 'D:\ffmpeg\Modi9.mp3'
file 'D:\ffmpeg\Modi0.mp3'
file 'D:\ffmpeg\Modi1.mp3'
file 'D:\ffmpeg\Modi2.mp3'
file 'D:\ffmpeg\Modi3.mp3'
file 'D:\ffmpeg\Modi4.mp3'

第 5 步:最后一个操作是合并两个通道:

ffmpeg -i D:\ffmpeg\L.mp3 -i D:\ffmpeg\output.mp3 -filter_complex [0:a][1:a]amerge=inputs=2[aout] -map [aout] D:\ffmpeg\LRM.mp3

但即使那样结果也很差。看起来 FFmpeg 在步骤 4 中组合音频在每个音频之后都有延迟。

我认为我的解决方案中可能存在一些错误。我不认为我可以在不分割音频的情况下像这样改变音频中的速度(如果我错了请告诉我)。

有没有人有不同的解决方案来实现这个目标? 请帮助我。提前致谢...

您需要 apulsator filter or the eponymous Haas 过滤器。

ffmpeg -i D:\ffmpeg\Down.mp3 -af apulsator=hz=0.125 out.mp3

这将在 8 秒内将音频从左向右旋转并向后旋转 (1/0.125)。