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
相关产品推荐
相关产品推荐

