ffmpeg只录制6秒的视频

rkkpypqq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(728)

我想用采集卡录一段视频。由于我希望我的程序控制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);
    }
}
eivnm1vs

eivnm1vs1#

好吧,我想出来了。视频只有6秒长的原因是ffmpeg有很多输出,6秒后就满了。由于输出没有到达任何地方,它们阻塞了缓冲区,ffmpeg停止了录制。
要解决此问题,可以执行以下两种操作之一:
跨越一个新线程,该线程读取消息以清空流缓冲区
使用 -loglevel quiet 抑制输出消息。如果您需要在流中查找特定的消息,这可能是不需要的

相关问题