Flutter ffmpeg_kit_flutter:获取 FFmpegKit.executeAsync 错误

Pit*_*rno 6 android ffmpeg flutter

我准备了一个测试程序来运行 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
Run Code Online (Sandbox Code Playgroud)

(注:双%是转义Windows批处理文件中的%)

这就是我在 android 上的 flutter 中所做的:

  1. 创建临时文件夹。
  2. 执行:
    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
        }
    });
Run Code Online (Sandbox Code Playgroud)

散文不起作用(总是转到错误部分)。我的问题是:

  1. 在 Windows 和 Android 上运行该命令有什么区别?为什么在windows上可以用,但在android上就不行呢?
  2. 如何获得有关 FFMPEG 错误的解释?就我而言,我只知道这不起作用,但我不知道为什么。

小智 0

在命令字符串中使用空格字符

FFmpegKit 和 FFprobeKit 中的execute() 和executeAsync() 方法使用空格字符作为分隔符将命令拆分为参数。如果您的命令参数之一包含空格字符,那么它将被分成两个参数,并且您的命令执行将失败。为了防止这种情况,请使用单引号或双引号将该参数括起来。环绕将防止参数被分割。

或者,您可以自己将命令拆分为参数,并调用接受参数数组的重载的executeWithArguments()/executeWithArgumentsAsync() 方法之一。