使用stdin将图像管道化到FFMPEG会导致伪影
我将图像作为base64缓冲区从Puppeter发送到stdin使用stdin将图像管道化到FFMPEG会导致伪影,ffmpeg,Ffmpeg,我将图像作为base64缓冲区从Puppeter发送到stdinchildProcess.stdin.write(frame)图像在循环中一次传输一帧 这工作得很好,除了我得到奇怪的工件和帧闪烁-这里是一个例子 我发现,当硬编码传输的每个帧之间的延迟时,伪影/闪烁会减少 await new Promise((resolve) => { setTimeout(() => { resolve("done"); }, 3000); }); // the
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分钟的时间,我很乐意付钱给你,然后运行安装程序。。。我们是一家最近获得资助的初创公司,我正在开发一个名为“我不再做咨询”的工具(由于白天的工作负荷、太多的计算机时间和不断变化的兴趣),但我做了,也许他能帮上忙。