gpt4 book ai didi

Java 8不等待ffmpeg进程输出缓冲区读取完成

转载 作者:行者123 更新时间:2023-11-30 06:18:16 25 4
gpt4 key购买 nike

我们需要从视频创建多个剪辑,为此,我们使用 ProcessBuilder 创建一个新进程,请在下面细化代码

Process clipProcess = new ProcessBuilder("bash","-c",
"ffmpeg -i input.mp4 -ss 0:36:00.000 -codec copy -t 0:03:00.200 -threads 0 -y output.mp4").start();
clipProcess.waitFor();

我们需要对剪辑执行一些操作,因为处理已完成并且文件已完全写入磁盘。但是程序将控制权返回到下一条语句,即使文件尚未完全写入磁盘。有什么建议吗,我做错了什么?

编辑:我们能够处理 45 分钟以下的任何视频生成的剪辑,但在此之后生成的剪辑在处理之前不会完全写入磁盘

最佳答案

我建议您执行类似以下操作 - 与 pr.getErrorStream() 相同。

waitFor() 是一个不错的功能,但不起作用 - 他们在文档中承认这一点。

只需读取流即可查看进程何时结束。

    try {
Runtime rt=Runtime.getRuntime();
Process pr=rt.exec(" ...... "");
final InputStreamReader isr=new nputStreamReader(pr.getInputStream());
Thread th=new Thread() {
public void run() {
try {
BufferedReader br=new BufferedReader(isr);
String line=null;
while((line=br.readLine())!=null) {
System.out.println(line);
}
}
catch (Exception ex) { }
}
};
th.start();
int exitVal=pr.waitFor();
System.out.println("ExitValue: " + exitVal);
}
catch (Exception ex) { ex.printStackTrace(); }

关于Java 8不等待ffmpeg进程输出缓冲区读取完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com