pipe screenshots from puppeteer to ffmpeg

Mei*_*ang 7 node.js puppeteer

I'm trying to pipe screenshots generated by puppeteer to an ffmpeg process to make a video without writing to intermediate files first.

From the command line, I know ffmpeg has an option to make videos from raw data from stdin, for example this works:

cat img/*.png | ffmpeg -f image2pipe -i - output.mp4

我想得到基本相同的结果,但将数据直接从 puppeteer 发送到 ffmpeg 进程。这是我尝试通过管道将一些帧从 puppeteer 发送到 ffmpeg,但它不起作用。该程序甚至没有退出,我怀疑我在滥用管道或其他东西。我怎样才能让它正常工作?

const puppeteer = require("puppeteer");
const { spawn } = require("child_process");

async function main() {
    let browser = await puppeteer.launch({});
    let page = await browser.newPage();
    await page.goto("http://google.com");

    let ffmpeg = spawn("ffmpeg", ["-f", "image2pipe", "-i", "-", "output.mp4"], {
        stdio: ["pipe", process.stdout, process.stderr]
    });
    for (let i = 0; i < 10; i++) {
        let screenshot = await page.screenshot();
        ffmpeg.stdin.write(screenshot);
    }
    await browser.close();
}

main();
Run Code Online (Sandbox Code Playgroud)

小智 2

嘿,我从来没有遇到过这样的事情,但我查看了puppeteer 文档。如果您不指定保存路径,它将不会保存到文件,如果您指定 base64,它将返回原始数据。也许您会将原始数据传输到 ffmpeg 中?

所以当你调用截图时会是这样的

let screenshot = await page.screenshot({
  encoding:'base64'
})
Run Code Online (Sandbox Code Playgroud)