Android使用ffmpeg拼接不同分辨率视频时出现ffmpeg无效参数报错
问题原因
- 核心错误:Mobile FFmpeg 执行命令时不需要传入
"ffmpeg"作为首个参数。Mobile FFmpeg的封装接口内部已经默认指定了二进制执行入口,额外传入的"ffmpeg"会被识别为普通输入/输出参数,FFmpeg无法解析该参数对应的格式,因此抛出“无法为'ffmpeg'找到合适的输出格式”错误。 - 隐藏错误:当前
-map参数重复映射了视频流[outv],没有映射生成的音频流[outa],即使第一个问题解决,也会出现音频丢失或参数报错问题。
解决方案
- 移除命令数组里的第一个
"ffmpeg"元素,参数数组开头直接接"-y"等执行参数 - 修正
-map参数配置,把第二个"-map"对应的"[outv]"改为"[outa]",分别映射视频流和音频流 - 可选优化:拼接视频时补充
setsar=1参数,避免不同源视频像素宽高比不一致导致拼接后画面变形;将-b改为-b:v明确指定为视频码率,减少参数歧义。
修正后的完整命令示例:
String[] complexCommand = { "-y","-i", paht_1, "-i", path_2, "-filter_complex", "[0:v]scale=720:1280,setsar=1,setdar=720/1280[outv0];[1:v]scale=720:1280,setsar=1,setdar=720/1280[outv1];[outv0][outv1]concat=n=2:v=1:a=0[outv];[0:a][1:a]concat=n=2:v=0:a=1[outa]", "-map", "[outv]", "-map", "[outa]", "-r", "25", "-b:v", "10M", "-preset", "superfast", filePath_video_out };
内容的提问来源于stack exchange,提问作者Farhad VahediAref
相关产品推荐
相关产品推荐

