将屏幕快照从puppeteer传输到ffmpeg

时间:2019-01-24 08:22:27

标签: node.js puppeteer

我正在尝试将puppeteer生成的屏幕截图通过ffmpeg进程传输到ffmpeg进程中,而不先写入中间文件。

在命令行中,我知道ffmpeg可以从stdin的原始数据中制作视频,例如,可以这样工作:

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();

1 个答案:

答案 0 :(得分:0)

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

所以当你调用屏幕截图时,它会是这样的

let screenshot = await page.screenshot({
  encoding:'base64'
})