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

xha*_*sin 0 java ffmpeg

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

Process ffmpeg = new ProcessBuilder("ffmpeg", ...).start();
ffmpeg.waitFor();
Run Code Online (Sandbox Code Playgroud)

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

ProcessBuilder ffmpeg = new ProcessBuilder("ffmpeg", ...);
ffmpeg.redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.INHERIT);
ffmpeg.start().waitFor();
Run Code Online (Sandbox Code Playgroud)

这个过程运行良好.

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

Kay*_*man 5

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

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