除非输出在java中重定向,否则ffmpeg不会运行

时间:2014-11-20 18:48:24

标签: java ffmpeg

我目前正在使用以下命令在java中运行ffmpeg进程:

Process ffmpeg = new ProcessBuilder("ffmpeg", ...).start();
ffmpeg.waitFor();

问题是这个过程永远不会终止。但是,如果我这样做:

ProcessBuilder ffmpeg = new ProcessBuilder("ffmpeg", ...);
ffmpeg.redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.INHERIT);
ffmpeg.start().waitFor();

这个过程运行良好。

有谁知道为什么会这样?除非我读取它的输出,否则进程不会进行似乎非常奇怪。

1 个答案:

答案 0 :(得分:5)

这是完全正常的。需要读取(或重定向到bitbucket)的输出缓冲区数量有限。

当人们开始使用ProcessBuilder并且不首先阅读文档时,这也是最常见的陷阱之一;)