我编写了一个运行FFMPEG命令的测试程序,它成功地运行了-i "/data/user/0/com.example.test/cache/file_picker/test.mp4" -c:v mpeg4 "/data/user/0/com.example.test/cache/test-1639310478143.mp4"
命令。这只是为了确保正确地加载了ffmpeg_kit_flutter并获得了所有权限。
但是,执行-i "source.mp4" -vf fps=30 "thumb%03d.jpg" -hide_banner
命令时有问题。例如,当我在windows上运行该命令时,它本身运行良好:
md frame1
ffmpeg -i "test.mp4" -vf fps=30 frame1/thumb%%04d.jpg -hide_banner
(注意: double %是指在windows批处理文件中转义%)
这就是我在android上所做的事:
创建临时folder.
的
String command = '-i "/data/user/0/com.example.test/cache/file_picker/test.mp4" -vf fps=30 "/data/user/0/com.example.test/cache/tmp-1639309602536/thumb%03d.jpg" -hide_banner';
FFmpegKit.executeAsync(command, (session) async {
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)) {
//ok
} else if (ReturnCode.isCancel(returnCode)) {
//cancelled
} else {
//error
}
});
散文不工作(总是到错误部分)。我的问题是:
发布于 2022-08-02 05:55:07
使用命令字符串中的空格字符
FFmpegKit和FFprobeKit中的execute()和FFprobeKit()方法使用空格字符作为分隔符,将命令拆分为参数。如果您的命令参数中包含一个空格字符,那么它将被拆分为两个参数,您的命令执行将失败。若要防止这种情况,请使用单引号或双引号包装该参数。包装将防止参数被分割。
或者,您可以自己将命令拆分为参数,并调用一个重载的接受参数数组的executeWithArguments()/executeWithArgumentsAsync()方法。
https://stackoverflow.com/questions/70323567
复制相似问题