Flutter中使用FFmpeg Kit通过TXT合并多视频失败问题排查
问题排查与解决步骤
针对你用ffmpeg_kit_flutter通过TXT文件合并视频时出现的错误码1、输出文件不存在问题,按以下步骤排查:
严格检查TXT文件格式
FFmpeg的concat demuxer对TXT格式有硬性要求:- 每行必须以
file '路径'格式书写,比如file '/storage/emulated/0/video1.mp4',不能直接写裸路径 - 路径含空格或特殊字符时,必须用单引号包裹
- TXT编码需为UTF-8,不能带BOM头,行尾不能有多余空格或空行
- 每行必须以
验证TXT文件的可访问性
先确认$rawDocumentPath/my_file.txt是绝对路径,且FFmpeg能读取该文件。可以在执行命令前用Flutter代码验证:final txtFile = File('$rawDocumentPath/my_file.txt'); print('TXT文件存在:${txtFile.existsSync()}'); print('TXT内容:${txtFile.readAsStringSync()}');如果文件不存在或内容为空,直接导致命令失败。
检查输出路径的合法性
$outputPath必须满足:- 是应用有写入权限的路径(Android需申请存储权限,iOS用Documents目录)
- 是具体文件名而非文件夹(比如
/storage/emulated/0/output.mp4,不能只写目录)
修正命令参数的写法
路径含空格时会被FFmpeg拆分参数,建议给路径加双引号包裹:-f concat -i "$rawDocumentPath/my_file.txt" -c copy "$outputPath"部分设备可尝试给路径加
file:前缀,比如file:"$rawDocumentPath/my_file.txt"获取详细错误日志定位问题
错误码1是通用错误,需查看具体日志:FFmpegKit.execute(command).then((session) async { final errorLog = await session.getErrorOutput(); print('FFmpeg错误日志:$errorLog'); });日志会明确提示是找不到TXT文件、格式错误还是输出路径无权限,这是排查核心。
测试简化命令缩小范围
先手动创建符合规范的TXT文件,用硬编码绝对路径测试命令:-f concat -i "/storage/emulated/0/test_list.txt" -c copy "/storage/emulated/0/test_output.mp4"若成功,说明动态生成的TXT文件或变量替换有问题;若失败,需检查
ffmpeg_kit_flutter版本是否支持concat demuxer。
内容的提问来源于stack exchange,提问作者Muhammad Hassan
相关产品推荐
相关产品推荐

