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

Flutter中如何将AppDirectory路径加入FFmpeg执行命令以转图片为视频

如何在Flutter FFmpeg中指定App目录下的图片路径生成视频

要解决这个问题,你需要先获取App目录的绝对路径,再将其拼接到FFmpeg命令的图片输入路径中。以下是具体步骤和修改后的代码:

1. 依赖准备

首先确保你已经添加了path_provider包(用于获取App目录)和path包(用于安全拼接路径)到pubspec.yaml:

dependencies:
  flutter_ffmpeg: ^0.4.0 # 根据你实际使用的版本调整
  path_provider: ^2.0.15
  path: ^1.8.3

2. 获取App目录路径

通过path_provider获取你的App文档目录(也就是你存储图片的AppDirectory):

import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;

Future<String> getAppDirectoryPath() async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

3. 修改FFmpeg命令,拼接完整路径

原命令中的-i img%03d.png是相对路径,现在需要替换为App目录下的绝对路径。修改_onCreateVideoFromImages方法:

void _onCreateVideoFromImages() async {
  // 获取App目录路径
  String appDirPath = await getAppDirectoryPath();
  
  // 构造图片的完整输入路径
  String inputPath = path.join(appDirPath, "img%03d.png");
  
  // 构造完整的FFmpeg命令
  String command = "ffmpeg -r 1/5 -start_number 2 -i '$inputPath' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4";
  
  // 可选:如果想把输出视频也存在App目录,同样拼接路径
  // String outputPath = path.join(appDirPath, "out.mp4");
  // String command = "ffmpeg -r 1/5 -start_number 2 -i '$inputPath' -c:v libx264 -r 30 -pix_fmt yuv420p '$outputPath'";
  
  execute(command).then((rc) {
    if (rc == 0) {
      print("Video completed");
    } else {
      print("FFmpeg执行失败,返回码:$rc");
    }
  });
}

关键说明

  • 用单引号包裹路径是为了避免路径中出现特殊字符(比如空格)导致FFmpeg解析错误。
  • 确保你的图片命名严格符合img002.png、img003.png...这样的格式,因为命令中使用了img%03d.png(%03d表示3位数字序号)和-start_number 2(从序号2开始)。
  • 如果需要将输出视频也保存到App目录,同样可以用path.join拼接输出路径,替换命令中的out.mp4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:37:57