我不确定这是否是一个新问题,但搜索 5 分钟不会产生任何结果。我想使用 ffmpeg 将 10 秒的 mp4 block 捕获到文件中,以便我的其他程序进行后期分析。现在,在下面的代码中。我会看到生成的 mp4 之间有 1-1.5 秒的间隔。只有一个进程可以戳/dev/video0 设备。我知道执行进程、打开/关闭设备和文件 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
关于node.js - execSync 和 ffmpeg 执行差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66961829/