2012-03-27 184 views
2

我试图构建一个调用ffmpeg二进制文件的ProcessBuilder。 我的问题是,调用它,它完全在MacOs,Ubuntu和WindowsXp, 下返回,但在Windows7下waitFor()永远不会返回。从Java的processbuilder执行的ffmpeg不会在windows 7下返回

在windows 7下有类似的经验吗?任何帮助,将不胜感激!

我的命令:

ProcessBuilder pb = new ProcessBuilder(); 

pb.command("C:\\Windows\\System32\\cmd.exe", "/c", "c:\\ffmpeg\\bin\\ffmpeg.exe", "-version"); 

尝试这些辈:

pb.command("c:\\ffmpeg\\bin\\ffmpeg.exe", "-version"); 
pb.command("C:\\Windows\\System32\\cmd.exe", "/c", "start c:\\ffmpeg\\bin\\ffmpeg.exe -version"); 

结果是一样的。 :(

回答

5

看起来像你的进程写在了和/或犯错流的东西。他们的缓冲区溢出过程块。你应该读出你犯错的过程流,以避免这一点。

请参阅“When Runtime.exec() won't”有关更多信息,

+1

+1“单行调用”得到'Process'作品很少一个人不应该不知道为什么它打破直到在[Wh Runtime.exec()不会](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。 – 2012-03-27 08:29:50

+1

你对,修正了链接:) – yggdraa 2012-03-27 08:33:27

2

如果您使用的是Java 7,你可以做这样的事情:

File encodingFile = new File(outfile + ".encoding"); 
ProcessBuilder pb = new ProcessBuilder(vars.config.ffmpeg, "-i", file, "-y", "-s", width + "x" + height, "-vcodec", "libvpx", outfile); //or other command.... 
encodingFile.createNewFile(); 
pb.redirectErrorStream(true); 
pb.redirectInput(ProcessBuilder.Redirect.PIPE); //optional, default behavior 
pb.redirectOutput(encodingFile); 
Process p = pb.start(); 

// if you want to wait for the process to finish 
p.waitFor(); 
encodingFile.delete(); 
相关问题