FFmpeg 使用 Java 运行时从 Mac 上的 PNG 制作视频,目录名称中有空格

FFmpeg Using Java Runtime to Make Video From PNG on Mac with Spaces in Directory Names

我 运行 在 Mac OSX 上遇到问题,我正在尝试从 PNG 制作视频,例如:

String command = "ffmpeg -r 30 -i " + outputFileName + fileName + "_%d.png -i "+
    outputFileName + fileName + ".wav -r 30 -pix_fmt yuv420p " +
    outputFileName + videoName;

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);

不幸的是,我对这些文件名没有任何控制权,它们以 space 的形式出现在我面前。在 Windows 上,我只是用引号将命令括起来,一切都按预期工作。但是,在 Mac 上,我尝试了那个和许多其他方法都无济于事。一旦在文件名中遇到 space,FFmpeg 报告无法找到该文件并且 t运行 将字符串分类到第一个 space 的位置。当我用引号将文件名括起来时,FFmpeg 告诉我它找不到文件并显示文件周围的引号。如:

String command = "ffmpeg -r 30 -i \" + outputFileName...\"

假设文件名为:

/Users/me/Application 文件夹/...

FFmpeg 将报告:“/Users/me/Application:没有这样的文件或目录。

没有引号,它会出错:/Users/me/Application: 没有那个文件或目录。

我已经尝试了所有我能想到的转义序列。我还尝试将转义字符仅放在出现 space 的文件名中,例如:

outputFileName = outputFileName.replace(" ", "\" \"");

在那种情况下,FFmpeg 说:/Users/me/Application": 没有那个文件或目录。

除了用引号转义外,我还尝试过:

outputFileName = outputFileName.replace(" ", "\");

我也试过:

outputFileName = outputFileName.replace(" ", "\ ")

在那些情况下,我得到:/Users/me/Application:没有那个文件或目录。

[编辑:在预览中我看到应用程序末尾的反斜杠,但在最后的 post 中它不存在......你应该看到一个反斜杠,例如 '/.../Application \']

有人能告诉我如何在目录名称中包含 space 时让 FFmpeg 执行 运行 我的命令吗?当他们来找我时,我无法控制目录名称。 Java 能够很好地找到这些目录,目录名称中没有任何类型的转义字符。我需要做什么才能让 FFmpeg 做同样的事情?

感谢您的帮助。

改用ProcessBuilder。另外,不要使用一个长命令字符串。将您的命令分解为单独的参数:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");