Android:ffmpeg,文件名包含空格

我想从Android应用程序执行ffmpeg,非常如下所述: 将FFmpeg与Android-NDK配合使用 。

执行以下命令可以正常工作:

Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i infile.mp4 outfile.mp4"); 

要么

 Process p = Runtime.getRuntime().exec(new String[]{"/data/data/yourpackagename/ffmpeg", "-i", "infile.mp4", "outfile.mp4"); 

但是当输入或输出文件名包含空格时,ffmpeg会因“找不到文件”错误而失败:

 Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i \"in space file.mp4\" outfile.mp4"); // fails Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i 'in space file.mp4' outfile.mp4"); // fails Process p = Runtime.getRuntime().exec(new String[]{"/data/data/yourpackagename/ffmpeg", "-i", "\"in space file.mp4\"", "outfile.mp4"); //fails 

对于没有空格但引用的文件,FFMPEG也会失败:

 Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i \"infile.mp4\" outfile.mp4"); // fails 

如何正确地将包含空格的文件名传递给ffmpeg命令?

问候,

猜测,但是当您希望ffmpeg打开名称中包含空格的文件时,您可能希望java进程将“\”读取“反斜杠空间”传递给底层操作系统。

它不是java用字符串fileName做的。 它的底层操作系统和ffmpeg进程接收它将用作’文件名’。 你想要“foo bar.input”

“foo \ bar.input”

因此,底层表达式“ffmpeg -i foo \ bar.input”应该有效。

你只需要弄清楚如何构造你的java字符串,以便进程将上面的表达式提供给运行“ffmpeg”命令的NDK /进程层。

更多在这里

我终于明白了。 我忘记了一种可能性,而且这个可能性正在发挥作用:

 Process p = Runtime.getRuntime().exec(new String[]{"/data/data/yourpackagename/ffmpeg", "-i", "in space file.mp4", "outfile.mp4"); //OK