You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

flutter_ffmpeg音视频转换时出现No such file or directory错误如何解决

问题根因

你的问题核心是FFmpeg命令的路径参数格式错误。flutter_ffmpeg的execute方法会按空格拆分解析传入的命令字符串,你为$imagePath、$audioPath外侧包裹的单引号'会被识别为路径的一部分,导致FFmpeg实际查找的是带单引号的路径,自然触发文件不存在报错。

修复方案
  • 优先移除路径外侧的单引号,将命令中的'$imagePath'替换为$imagePath、'$audioPath'替换为$audioPath即可直接解决当前报错。
  • 如果你的路径存在空格、特殊字符等场景,更稳妥的方案是使用executeWithArguments方法传递参数数组,完全避免参数解析错误,示例如下:
// 调用FFmpeg前先校验文件存在性
if (!await File(imagePath).exists()) {
  print("图片文件不存在:$imagePath");
  return "";
}
if (!await File(audioPath).exists()) {
  print("音频文件不存在:$audioPath");
  return "";
}

final ffmpegArgs = [
  '-loop', '1',
  '-framerate', '2',
  '-i', imagePath,
  '-i', audioPath,
  '-vf', 'scale=2*trunc(iw/2):2*trunc(ih/2),setsar=1',
  '-c:v', 'libx264',
  '-preset', 'medium',
  '-tune', 'stillimage',
  '-crf', '18',
  '-c:a', 'copy',
  '-shortest',
  '-pix_fmt', 'yuv420p',
  videoPath
];
// 注意添加await等待执行完成
int runCode = await _flutterFFmpeg.executeWithArguments(ffmpegArgs);
if (runCode == 0) {
  print("视频生成成功");
} else {
  print("视频生成失败,错误码:$runCode");
}
  • 你当前代码没有给_flutterFFmpeg.execute添加await,会导致函数提前返回videoPath,此时FFmpeg任务还未执行完成,后续读取视频的操作会报错,需要补充异步等待逻辑。
  • 文件名使用DateTime.now().millisecond重复概率很高,建议改用DateTime.now().millisecondsSinceEpoch生成文件名降低冲突风险。

内容的提问来源于stack exchange,提问作者Aryan Shandilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:51:02