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
相关产品推荐
相关产品推荐

