ffmpeg 只录制 6 秒的视频

ffmpeg only records 6 seconds of video

我正在尝试使用采集卡录制视频。因为我想让我的程序控制 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);
    }
}

好的,我明白了。视频只有 6 秒长的原因是因为 ffmpeg 有很多输出,6 秒后就满了。由于输出无处可去,它们堵塞了缓冲区,ffmpeg 停止记录。

要解决此问题,您可以执行以下两项操作之一:

  1. 生成一个新线程,该线程读取消息以清空流缓冲区
  2. 使用-loglevel quiet 来抑制输出消息。如果您需要在流中查找特定消息,这可能是不需要的