Android:ffmpeg,文件名包含空格

时间:2014-05-16 14:10:58

标签: java android process ffmpeg exec

我想从Android应用程序执行ffmpeg,如此处所述:Using FFmpeg with 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命令?

此致

2 个答案:

答案 0 :(得分:0)

狂野猜测,但您可能希望java进程通过" \"读"反斜杠空间"当您希望ffmpeg打开名称中包含空格的文件时,到底层操作系统。

它不是java用字符串fileName做的。它是底层操作系统和ffmpeg进程收到的,它将用作' filename'。你想要" foo bar.input"是

" foo \ bar.input"

所以,基础表达式" ffmpeg -i foo \ bar.input"应该工作。

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

more here

答案 1 :(得分:0)

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

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