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 停止记录。
要解决此问题,您可以执行以下两项操作之一:
- 生成一个新线程,该线程读取消息以清空流缓冲区
- 使用
-loglevel quiet
来抑制输出消息。如果您需要在流中查找特定消息,这可能是不需要的
我正在尝试使用采集卡录制视频。因为我想让我的程序控制 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 停止记录。
要解决此问题,您可以执行以下两项操作之一:
- 生成一个新线程,该线程读取消息以清空流缓冲区
- 使用
-loglevel quiet
来抑制输出消息。如果您需要在流中查找特定消息,这可能是不需要的