我正在尝试在我的java程序中运行一个命令,该命令允许我使用外部软件ffmpeg从视频文件中提取字幕。
在我的 cmd 上,该命令工作正常,但是当我从流程构建器从 IDE 运行它时,它会执行但永远不会完成。
只有当我停止我的应用程序时,字幕文件才会出现在指定的文件夹中,这意味着命令正确执行但永远不会停止。
有人可以帮忙吗?
由 DeepL.com 翻译(免费版)
这里有一些代码来说明我的意思
List<String> command = new ArrayList<>();
command.add("ffmpeg");
command.add("-i");
command.add(fileName);
command.add("-c:s");
command.add("srt");
command.add(subfile);
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command(command);
processBuilder.directory(new File(UPLOAD_MOVIE_DIR_disc + movie.getTitle() ));
processConvert.waitFor(); //never finish
当我得到答案时,我不得不在它旁边使用一个新线程,这会在一段时间后停止进程执行,但这不适合应用程序。
您的代码问题与您处理流程输出流的方式有关。默认情况下,
ProcessBuilder
使用管道进行通信,如果流未耗尽,这可能会导致 waitFor()
方法无限期挂起。
您可以通过重定向标准错误或使用流程流来修复代码