我想从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命令?
此致
答案 0 :(得分:0)
狂野猜测,但您可能希望java进程通过" \"读"反斜杠空间"当您希望ffmpeg打开名称中包含空格的文件时,到底层操作系统。
它不是java用字符串fileName做的。它是底层操作系统和ffmpeg进程收到的,它将用作' filename'。你想要" foo bar.input"是
" foo \ bar.input"
所以,基础表达式" ffmpeg -i foo \ bar.input"应该工作。
你只需要弄清楚如何构造你的java字符串,以便进程将上面的表达式提供给运行" ffmpeg"的NDK /进程层。命令。
答案 1 :(得分:0)
我终于明白了。我忘记了一种可能性,而且这一种可能正在发挥作用:
Process p = Runtime.getRuntime().exec(new String[]{"/data/data/yourpackagename/ffmpeg", "-i", "in space file.mp4", "outfile.mp4"); //OK