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

FlutterFFmpeg执行报错File:: Protocol not found的解决方法

问题:Flutter中使用FFmpeg转视频为音频时出现File:: Protocol not found错误

这段Flutter代码用于初始化文件目录并通过FFmpeg将视频转成音频,但运行时出现以下错误:

File:: Protocol not found
Did you mean file:File:?

原代码如下:

Directory direc = (await getApplicationDocumentsDirectory());
Directory directory = Directory(direc.path+"/check");
print(directory.path);  
String command = "-i input_video.mp4 -vn -acodec copy output_audio.mp3";  
print(HomePage.pickedvideo);  
File file = File(directory.path+"/out.mp3");  
print(file);  
print(HomePage.pickedvideo);    

final FlutterFFmpeg FFmpeg = FlutterFFmpeg();    

FFmpeg.execute("ffmpeg -i ${HomePage.pickedvideo}"
    " -map 0:a "
    "-acodec ${file}")
    .then((rc)=>{
  print("FFmpeg process exited with rc $rc");
});

解决方案

错误根源

  1. FFmpeg命令参数逻辑错误:你错误地将File对象直接拼接到-acodec参数后,-acodec需要的是音频编码格式(比如copy或libmp3lame),而非输出文件路径;输出文件路径需要单独作为命令的最后一个参数指定。
  2. 路径处理不规范:FFmpeg解析本地文件路径时,若路径含空格或格式不符合要求,会触发协议错误;同时原代码未确保目标目录存在,可能导致输出失败。

修复后的代码

Directory direc = await getApplicationDocumentsDirectory();
Directory directory = Directory('${direc.path}/check');
// 确保目标目录存在,递归创建父目录
await directory.create(recursive: true);

print(directory.path);
print(HomePage.pickedvideo);

// 构造正确的输出文件路径
String outputPath = '${directory.path}/out.mp3';
print(outputPath);

final FlutterFFmpeg ffmpeg = FlutterFFmpeg();
// 修正FFmpeg命令:输入路径 + 音频流选择 + 编码格式 + 输出路径
// 路径加双引号避免空格解析问题,若pickedvideo是本地路径且平台要求,可添加file://前缀
String command = '-i "${HomePage.pickedvideo}" -map 0:a -acodec copy "$outputPath"';

ffmpeg.execute(command).then((rc) {
  print("FFmpeg process exited with rc $rc");
});

关键修复点

  • 提前创建目标目录:调用create(recursive: true)确保输出目录存在,避免路径不存在的错误。
  • 修正FFmpeg命令结构:将输出文件路径移至命令末尾,-acodec参数指定正确的编码格式(copy表示直接复制原音频流,无需转码,效率更高)。
  • 路径包裹双引号:避免路径中包含空格时FFmpeg解析失败。
  • (可选)添加协议头:如果HomePage.pickedvideo是本地文件路径且在iOS等平台报错,可尝试将输入路径改为'file://${HomePage.pickedvideo}'。

内容的提问来源于stack exchange,提问作者momin mobologics

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:35:21