我为它制作了一个简单的程序和UI。 它有一个按钮,用于启动ffmpeg.exe解码视频:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ProcessBuilder pb = new ProcessBuilder("D:\\ffmpeg.exe", "-i", "\"D:\\video\\input.mp4\"", "\"output.mp4\"");
try {
Process p = pb.start();
} catch (IOException error) {
//
}
}
}
问题是点击按钮后ffmpeg启动但它没有做任何事情(在任务管理器中它没有使用cpu - 0%),直到我关闭程序(UI)然后ffmpeg进程开始解码视频(仅在关闭程序后ffmpeg开始使用cpu - 例如24%)
不重复: Andy Thomas 提出的旧问题对我的问题没有答案(解决方案)
答案 0 :(得分:2)
您的Process
屏蔽event dispatch thread。相反,请在ProcessBuilder
的后台运行SwingWorker
,如完整example所示。
@Override
protected Integer doInBackground() {
try {
ProcessBuilder pb = new ProcessBuilder(
"D:\\ffmpeg.exe", "-i", "\"D:\\video\\input.mp4\"", "\"output.mp4\""));
…
}
请注意,该示例会调用redirectErrorStream(true)
,因此您应该能够看到来自ffmpeg.exe
的任何错误或提示。