Java ffmpeg进程表示出错
我正在使用FFMPEG转换音频文件。我调用命令行,然后从Java调用FFMPEG。我使用Runtime和Process Runtime.exec()来实现这一点。对于这个过程,我有一个InputStream和一个ErrorStream。出于某种原因,即使FFMPEG命令工作正常,它也会从错误流中打印出来,给人以失败的印象。有人知道为什么会这样吗?显然,这不是一个主要问题,因为它确实工作正常,但如果由于某种原因它确实出错,或者项目新手没有意识到它是如何工作的,那么可能会让人困惑。 有什么想法吗? 以下是相关代码:Java ffmpeg进程表示出错,java,process,runtime,Java,Process,Runtime,我正在使用FFMPEG转换音频文件。我调用命令行,然后从Java调用FFMPEG。我使用Runtime和Process Runtime.exec()来实现这一点。对于这个过程,我有一个InputStream和一个ErrorStream。出于某种原因,即使FFMPEG命令工作正常,它也会从错误流中打印出来,给人以失败的印象。有人知道为什么会这样吗?显然,这不是一个主要问题,因为它确实工作正常,但如果由于某种原因它确实出错,或者项目新手没有意识到它是如何工作的,那么可能会让人困惑。 有什么想法吗?
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd);
Process proc = rt.exec(cmd);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
和StreamGobbler类:
class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
您正在体验的是所有*NIX工具的标准实践:它们将“业务价值”数据发送到
stdout
,并将任何诊断输出分别发送到stderr
。这是以“小即美”范式编写的工具的一个重要标志,该范式非常重视将一个工具的输出输送到下一个工具的输入的概念,从而创建一个特殊的信息处理链。如果工具向stdout
发送“处理…完成50%”类输出,则整个方案将崩溃
请随意忽略
stderr
上的此类输出,但请确保您像现在这样使用它,以避免因输出缓冲区过满而阻塞。您没有与我们共享stderr
输出的具体原因是什么?只是来自FFMPEG的输出说它正在转换文件,以及文件的各种设置。我不认为这有什么关系。但是你认为不说发生了什么事你能得到什么帮助?当然有关系,谢谢。将来我也会发布输出!