我想用采集卡录一段视频。由于我希望我的程序控制ffmpeg,我在java中启动了一个进程,让ffmpeg运行30秒,然后通过向进程发送“q”来关闭它。然而视频只有6秒长。我在代码中找不到任何错误,希望能得到帮助
我的代码:
import java.io.*;
public class FfmpegTest {
public static void main(String[] args) throws Exception {
Process process = Runtime.getRuntime().exec("E:\\ffmpeg\\bin\\ffmpeg.exe -y -f dshow -i video=\"The video card\" bla.mp4");
PrintWriter pw = new PrintWriter(process.getOutputStream(),true);
Thread.sleep(30000);
System.out.println("recording done");
pw.println("q");
Thread.sleep(2000);
}
}
1条答案
按热度按时间eivnm1vs1#
好吧,我想出来了。视频只有6秒长的原因是ffmpeg有很多输出,6秒后就满了。由于输出没有到达任何地方,它们阻塞了缓冲区,ffmpeg停止了录制。
要解决此问题,可以执行以下两种操作之一:
跨越一个新线程,该线程读取消息以清空流缓冲区
使用
-loglevel quiet
抑制输出消息。如果您需要在流中查找特定的消息,这可能是不需要的