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

Java调用FFmpeg并行混合音频文件并支持下载异常问题求助

解决Java调用FFmpeg并行混合音频的问题

你的代码仅添加了两个音频输入,但未配置音频混合逻辑,FFmpeg默认只会取用第一个输入(audioInputPath2)的音频流,因此输出文件只是该音频的副本。要实现并行混合,需借助FFmpeg的amix音频滤镜,以下是修正方案:

核心修改点

  • 添加amix滤镜,明确指定参与混合的音频流数量
  • 修复编码格式冲突:当前设置输出格式为wav,但音频编码用了MP3专用的libmp3lame,两者不匹配,需统一格式
  • 修正代码中变量名不一致的问题(outputFilePath1未使用、outputFilePath2未定义)

修正后的代码

String audioInputPath1 = "sample_audio1.wav";
String audioInputPath2 = "sample_audio2.wav";
String outputFilePath = "mixed_audio.wav"; // 统一输出路径变量
FFmpeg ffmpeg = new FFmpeg("C:\\filePath\\ffmpeg-master-latest-win64-gpl\\ffmpeg-master-latest-win64-gpl\\bin\\ffmpeg.exe");
FFmpegExecutor executor = new FFmpegExecutor(ffmpeg);
FFprobe ffprobe = new FFprobe("C:\\filePath\\ffmpeg-master-latest-win64-gpl\\ffmpeg-master-latest-win64-gpl\\bin\\ffprobe.exe");

// 可选:探测音频信息,用于后续统一采样率、声道数等参数
FFmpegProbeResult probeResult1 = ffprobe.probe(audioInputPath1);
FFmpegProbeResult probeResult2 = ffprobe.probe(audioInputPath2);

FFmpegBuilder builder = new FFmpegBuilder()
        .overrideOutputFiles(true)
        .addInput(audioInputPath1)
        .addInput(audioInputPath2)
        .addOutput(outputFilePath)
        .setFormat("wav") // 输出WAV格式
        .setAudioCodec("pcm_s16le") // WAV对应的PCM编码,替换libmp3lame
        .setAudioBitRate(256000)
        // 添加amix滤镜:混合2个音频流,输出时长取最长输入的时长
        .addExtraArgs("-filter_complex", "[0:a][1:a]amix=inputs=2:duration=longest")
        .done();

executor.createJob(builder).run();

关键说明

  • amix=inputs=2:duration=longest:指定混合2个音频流,输出时长取两个音频中较长的那个,避免截断;若需取较短时长,可改为duration=shortest
  • 如果两个音频的采样率、声道数不一致,FFmpeg会自动转换,若需精确控制,可额外添加aresample滤镜统一参数
  • 若要输出MP3格式,只需将setFormat("wav")改为setFormat("mp3"),同时保留setAudioCodec("libmp3lame")即可

内容的提问来源于stack exchange,提问作者JoonSeo Yang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:37