ffmpeg_kit_flutter添加视频水印返回码1,需获取成功返回码
解决ffmpeg_kit_flutter加水印返回码1的问题
返回码1意味着FFmpeg命令执行失败,以下是几个常见排查方向和修复方案:
资产路径无法直接访问
Flutter的assets/目录是应用打包后的内部资源,ffmpeg_kit_flutter无法直接读取这个路径。需要先将资产文件复制到设备本地可读写目录(比如临时缓存目录),再用本地路径作为输入源。
示例逻辑:通过rootBundle读取资产文件,写入到getTemporaryDirectory()生成的本地文件中,再替换命令里的路径。命令语法存在疏漏
原命令缺少流映射参数,且filter_complex的写法可以更明确:
修正后的命令模板:-i /本地路径/1.mp4 -i /本地路径/poster_Watermark.png -filter_complex "[0:v][1:v]overlay=10:10[v]" -map "[v]" -map 0:a -codec:a copy $outPath其中
[0:v][1:v]明确指定用第一个输入的视频流和第二个输入的图片流做叠加,-map参数告诉FFmpeg要输出处理后的视频流和原音频流。输出路径无写入权限
确保$outPath指向应用有权限写入的目录,比如Android的getExternalFilesDir()、iOS的应用沙盒目录,避免直接写入公共存储(需要额外权限申请)。查看详细错误日志定位问题
不要只依赖返回码,获取FFmpeg的错误输出能精准找到问题:FFmpegKit.execute(yourCommand).then((session) async { final returnCode = await session.getReturnCode(); if (!ReturnCode.isSuccess(returnCode)) { final errorLogs = await session.getAllLogsAsString(); print(errorLogs); // 打印错误日志,比如文件不存在、滤镜参数错误等 } });
内容的提问来源于stack exchange,提问作者DHRUV PATEL
相关产品推荐
相关产品推荐

