我有一个在Playframework上运行的应用程序,它需要对一些视频文件进行编码.我用了
Process pr = Runtime.getRuntime().exec(execCode)
Run Code Online (Sandbox Code Playgroud)
为此(它完美地工作),但由于我需要输出流和错误流,我试图使用ProcessBuilder(也建议使用).
但我无法让它工作(在MacBook上测试).Runtime方法和ProcessBuilder之间有根本区别吗?
这是我的ProcessBuilder代码(替换时完全相同的代码Runtime.getRuntime().exec())
String execCode = "/opt/local/bin/ffmpeg -i file [...]";
ProcessBuilder pb = new ProcessBuilder(execCode);
pb.redirectErrorStream(true);
pb.directory(new File("/Users/[...]/data/"));
Process pr = pb.start();
Run Code Online (Sandbox Code Playgroud)
这是控制台输出:
11:00:18,277 ERROR ~ There was a problem with with processing MediaFile[13] with error Error during coding process: Cannot run program "/opt/local/bin/ffmpeg -i /Users/[...]/data/media/1/1/test.mov [...] /Users/[...]/data/media/1/13/encoded.mp3" (in directory "/Users/[...]/data"): error=2, No such file or directory
java.lang.Exception: Error during coding process: Cannot run program "/opt/local/bin/ffmpeg -i /Users/Luuk/Documents/Java/idoms-server/data/media/1/1/test.mov -y -f mpegts -acodec libmp3lame …Run Code Online (Sandbox Code Playgroud)