Flutter使用ffmpeg合并视频时出现单视频重复拼接、音频失效问题
问题根因
- 视频重复拼接:你的concat滤镜输入流声明为
[0:v][0:v],两次都调用了第一个输入文件的视频流,没有用到第二个视频的内容,自然会出现第一个视频重复拼接两次的问题。 - 输出无音频:concat参数中的
a=0代表关闭音频流输出,同时你也没有将两个输入文件的音频流传入滤镜处理,最终输出自然没有音频。
修复后的实现代码
final appDir = await getExternalStorageDirectory(); String rawDocumentPath = appDir!.path; final outputPath = '$rawDocumentPath/videomerge.mp4'; final FlutterFFmpeg _flutterFFmpeg = FlutterFFmpeg(); // 修正后的ffmpeg命令 String commandToExecute = '-y -i ${VideoFiles[0].path} -i ${VideoFiles[1].path} ' '-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" ' '-map "[outv]" -map "[outa]" $outputPath'; _flutterFFmpeg.execute(commandToExecute).then((rc) => print("FFmpeg process exited with rc $rc"));
可选优化说明
- 如果两个待拼接的视频编码、分辨率、帧率完全一致,可以在命令末尾加上
-c:v copy -c:a copy,直接复用原有编码无需转码,大幅提升拼接速度。 - 如果两个视频参数不一致,不要添加copy参数,让ffmpeg自动转码统一参数,避免出现拼接后画面异常、音画不同步的问题。
内容的提问来源于stack exchange,提问作者Madhusri J
相关产品推荐
相关产品推荐

