使用stdin将图像管道化到FFMPEG会导致伪影

使用stdin将图像管道化到FFMPEG会导致伪影,ffmpeg,Ffmpeg,我将图像作为base64缓冲区从Puppeter发送到stdinchildProcess.stdin.write(frame)图像在循环中一次传输一帧 这工作得很好,除了我得到奇怪的工件和帧闪烁-这里是一个例子 我发现,当硬编码传输的每个帧之间的延迟时,伪影/闪烁会减少 await new Promise((resolve) => { setTimeout(() => { resolve("done"); }, 3000); }); // the

我将图像作为base64缓冲区从Puppeter发送到stdin
childProcess.stdin.write(frame)图像在循环中一次传输一帧

这工作得很好,除了我得到奇怪的工件和帧闪烁-这里是一个例子

我发现,当硬编码传输的每个帧之间的延迟时,伪影/闪烁会减少

await new Promise((resolve) => {
  setTimeout(() => {
    resolve("done");
  }, 3000);
});

// then after 3s pipe the buffer
childProcess.stdin.write(frame);
我发现的另一个解决方案是将其编码为.h264,然后将其转换为.mp4。问题是,视频计时功能被彻底关闭了

// The ffmpeg command
const childProcess = spawn(ffmpeg, [
  "-y",
  "-f",
  "image2pipe",
  "-pix_fmt",
  "argb",
  "-s",
  "1920x1080",
  "-r",
  `${fps ? `${fps}` : 100}`,
  "-i",
  "async:cache:pipe:0",
  "-an",
  "-vcodec",
  "libx264",
  "-pix_fmt",
  "yuv420p",
  "-r",
  `${fps ? `${fps}` : 100}`,
  "-y",
  `/tmp/${renderId}.mp4` // using .h264 seems to solve flicker but causes a weird framerate
]);

注意:我使用的是Lambda,它似乎不一致。有时它工作平稳,然后其他闪烁发生。我想知道这是否是由于系统资源造成的。我没有注意到示例中有什么太不寻常的地方,但我不知道我应该寻找什么。很难用示例来说明,因为生产中有几个变量,即使用Lambda和机器规格,另外,木偶演员的截图太快可能会有一些奇怪的事情。如果你有30分钟的时间,我很乐意付钱给你,然后运行安装程序。。。我们是一家最近获得资助的初创公司,我正在开发一个名为“我不再做咨询”的工具(由于白天的工作负荷、太多的计算机时间和不断变化的兴趣),但我做了,也许他能帮上忙。