execSync 和 ffmpeg 执行差距

execSync and ffmpeg execution gap

我不确定这是否是一个新问题,但搜索了 5 分钟没有得到任何结果。我想使用 ffmpeg 将 10 秒的 mp4 块捕获到文件中,以便我的其他程序进行 post-分析。现在,在下面的代码中。我会看到生成的 mp4 之间有 1-1.5 秒的间隔。只有一个进程可以使用 /dev/video0 设备进行 poke。我知道执行进程 open/close 设备和文件 i/o 会产生开销。我怎样才能最小化差距?谢谢

const { execSync, exec } = require("child_process");

capture()

function capture() {
while(true) {
  let fileName = getNewFileName();
  let captureCmd = `ffmpeg -hide_banner -loglevel error -t 10 -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 ${fileName}.mp4 -r 1 ${fileName}-%03d.jpg`
  execSync(captureCmd)
}

}

function getNewFileName() {
let date = new Date()

let month = ("0" + date.getMonth()).slice(-2);
let day = ("0" + date.getDay()).slice(-2);
let hour = ("0" + date.getHours()).slice(-2);
let min = ("0" + date.getMinutes()).slice(-2);
let sec = ("0" + date.getSeconds()).slice(-2);

return "output/" + date.getFullYear() + month + day + hour + min + sec;

}

~

这就是分段复用器的用途

ffmpeg -hide_banner -loglevel error -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -f segment -segment_time 10 -g 250 ${fileName}-%03d.mp4 -r 1 ${fileName}-%03d.jpg