You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg合并不同时长音频并保留背景音频时长?

解决FFmpeg合并音频时长不符的问题

问题原因

你用的amerge滤镜会自动以输入音频中时长最短的那个作为输出时长,所以30秒的voz.wav直接把3分钟的background.wav截断了,导致输出只有30秒。

两种修改方案

方案1:让voz.wav循环播放直到background.wav结束

适合需要背景语音重复播放的场景,命令如下:

$code1 = "ffmpeg -y -i voz.wav -i background.wav -filter_complex \"[0:a]aloop=loop=-1:size=2e9[a0];[a0][1:a]amerge=inputs=2,pan=stereo|c0<c0+c2|c1<c1+c3[aout]\" -c:a libmp3lame -q:a 4 -shortest somnovo2.mp3";
system($code1);

参数说明:

  • aloop=loop=-1:size=2e9:让第一个音频无限循环,size=2e9设置足够大的循环缓冲区,避免中途停止
  • pan=stereo|...:amerge会把两个立体声合并成4声道,该滤镜将其转成标准立体声输出
  • -shortest:强制输出时长等于最短的输入(即3分钟的background.wav)

方案2:voz.wav只播放一遍,剩余时间静音填充

适合只需要一次语音,后面保留纯背景音的场景,命令如下:

$code1 = "ffmpeg -y -i voz.wav -i background.wav -filter_complex \"[0:a]apad[a0];[a0][1:a]amerge=inputs=2,pan=stereo|c0<c0+c2|c1<c1+c3[aout]\" -c:a libmp3lame -q:a 4 -shortest somnovo2.mp3";
system($code1);

参数说明:

  • apad:自动给voz.wav末尾填充静音,直到和另一个输入音频时长一致
  • 其他参数作用与方案1一致

内容的提问来源于stack exchange,提问作者Prinple Vrlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:46:37