【问题标题】:ffmpeg mix audio at specific timeffmpeg 在特定时间混合音频
【发布时间】:2016-01-02 04:21:50
【问题描述】:

我想将 2 个音频文件混合在一起 - 一个文件的长度为 2 分钟,另一个为 10 秒的声音。我希望将两个文件混合,以便仍然可以听到两种声音。我希望这个 10 秒的剪辑在 30 秒的 10 秒内准确出现,因此它将在 40 秒时结束。

我知道如何使用 ffmpeg 将 2 个音频文件混合在一起

ffmpeg -i input.mp3 -i input2.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 output.mp3

但是,我不知道如何在特定时间启动这 10 秒的声音。

【问题讨论】:

  • 应该移到 SuperUser.com 因为有一个类似的问题:superuser.com/questions/716320/…
  • 感谢您,但该解决方案对我不起作用,因为我需要将文件保存为 mp4 格式

标签: audio ffmpeg mp3


【解决方案1】:

自从发布此问题以来,我找到了解决此问题的方法 - 我想分享它以供其他人使用,因为我花了很多时间寻找这个。

创建一个比最长剪辑长的空白音频文件。

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t <seconds> -q:a 9 -acodec libmp3lame <blank audio>

然后您需要在您想要的时间将 10 秒剪辑添加到空白音频文件。

ffmpeg -i <blank audio> -i < audio file 2> -filter_complex "aevalsrc=0:d= <time> [s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map 0:v -map [aout] <output file>

然后你将这个现在最长的剪辑叠加到原来的较长剪辑上

ffmpeg -i <output from silent and short clip> -i <original long clip> -filter_complex "amix=inputs=2:duration=longest:dropout_transition=0, volume=2" <output audio file>

【讨论】:

  • 我可以在一行中完成所有这些吗?
  • 我试过了,但您的第二个脚本将空白音频剪辑到短音频的长度。我有很多音频文件,我想在特定时间合并。在那里循环运行你的脚本,如ffmpeg -y -i file.mp3 -i 1.mp3 -filter_complex "aevalsrc=0:d=0[s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map [aout] file.mp3
  • 我收到了这个错误:zsh: no matches found: [aout]
【解决方案2】:

我的音频采样率为 8000。我使用以下不带合成音频的命令在特定时间插入 3 个音频文件。请注意,以秒为单位的延迟必须是整数。对于精确的位置,您可以使用“S”(样本)而不是“s”(秒)来定义延迟。

ffmpeg -y -i earth.mp4 -i 1.wav -i 2.wav -i 3.wav -filter_complex "[1]adelay=delays=5s:all=1[r1]; [2]adelay=delays=8000S:all=1[r2]; [3]adelay=delays=15s:all=1[r3]; [r1][r2][r3]amix=inputs=3[a]"  -map 0:v -map "[a]" -codec:v copy output.mp4

【讨论】:

  • 错误:[Parsed_adelay_0 @ 0x558a843524c0] 未找到选项 'all' [AVFilterGraph @ 0x558a8427d600] 使用参数 'delays=5s:all=1' 初始化过滤器 'adelay' 时出错 初始化复杂过滤器时出错。未找到选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2021-09-21
  • 2012-11-19
相关资源
最近更新 更多