Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:ffmpeg,文件名包含空格_Java_Android_Process_Ffmpeg_Exec - Fatal编程技术网

Java Android:ffmpeg,文件名包含空格

Java Android:ffmpeg,文件名包含空格,java,android,process,ffmpeg,exec,Java,Android,Process,Ffmpeg,Exec,我想从Android应用程序执行ffmpeg,非常像这里描述的那样: 执行以下命令可以正常工作: Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i infile.mp4 outfile.mp4"); 或 但当输入或输出文件名包含空格时,ffmpeg将失败,并出现“未找到文件”错误: FFMPEG对于没有空格但被引用的文件也会失败: Process p = Runtime.getRuntime(

我想从Android应用程序执行ffmpeg,非常像这里描述的那样:

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

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

但当输入或输出文件名包含空格时,ffmpeg将失败,并出现“未找到文件”错误:

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

Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i \"infile.mp4\" outfile.mp4"); // fails
如何将包含空格的文件名正确传递给ffmpeg命令


关于,

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

这不是java对字符串文件名所做的。底层操作系统和ffmpeg进程接收到的内容将用作“文件名”。您希望“foo-bar.input”出现在这里

“foo\bar.input”

因此,底层表达式“ffmpeg-ifoo\bar.input”应该可以工作

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


我终于拿到了。我忘记了一种可能性,而正是这种可能性在起作用:

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

可能将空格更改为:%20我扩展了我的问题:因为如果我引用文件(即使它们没有空格),ffmpeg也会失败,所以在从java向ffmpeg传递参数时似乎出现了问题。感谢您的提示。我已经试过了,但是当我在\space\file.mp4中传递
时,ffmpeg抱怨它无法在“in”中打开(这之后它会截断)。你是在根手机上吗?如果是的话,你可以得到一个外壳,直接尝试所有这些排列,直到你找到一个有效的。然后,你必须在java/进程包装器中重新创建这个shell表达式…这两个命令(引号和反斜杠)都可以在命令行中正常工作。我正在尝试转换视频,用户可以从gallary中进行选择,但我面临的问题是uri包含“/storage/simulated/0/WhatsApp/Media/WhatsApp video/VID-20150108-WA0008.mp4”和vk.run这样的空间(GeneralUtils.utilConvertToComplex(commandStr),workFolder,getApplicationContext());此命令不起作用。您可以帮助我解决uri路径中的问题以及如何解决它。只是猜测一下,但您可以尝试在传递url之前对其进行url编码。
Process p = Runtime.getRuntime().exec("/data/data/yourpackagename/ffmpeg -i \"infile.mp4\" outfile.mp4"); // fails
Process p = Runtime.getRuntime().exec(new String[]{"/data/data/yourpackagename/ffmpeg", "-i", "in space file.mp4", "outfile.mp4"); //OK