node.js - 从 puppeteer 到 ffmpeg 的管道截图

标签 node.js puppeteer

我正在尝试将 puppeteer 生成的屏幕截图通过管道传输到 ffmpeg 进程以制作视频,而无需先写入中间文件。

从命令行,我知道 ffmpeg 可以选择从标准输入的原始数据制作视频,例如这有效:
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();

最佳答案

嘿,我从来没有遇到过这样的事情,但我查看了 puppeteer docs .如果不指定保存路径,则不会保存到文件,如果指定 base64,则返回原始数据。也许您会将原始数据通过管道传输到 ffmpeg 中?
所以当你调用屏幕截图时,它会是这样的

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

关于node.js - 从 puppeteer 到 ffmpeg 的管道截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342168/

相关文章:

javascript - 如何将本指南实现到 headless 浏览器 https ://www. npmjs.com/package/user-agents#contributing

javascript - Node Sequelize - 插入日期 "as is"而不转换为 UTC

node.js - npm WARN bootstrap@4.2.1 需要 jquery@1.9.1 - 3 的对等体,但没有安装

javascript - json嵌套查找在javascript中使用基于字符串的键

javascript - 带有 Node 、ES7、puppeteer 的页面对象模式

javascript - 无法在React应用程序中运行puppeteer,找不到模块: Can't resolve 'ws' when compiling

javascript - 如何在 Puppeteer 中查找 document.activeElement

asynchronous - async nodejs查询和处理结果

php - 如何使用node.js获取SSL证书信息?

javascript - 找不到指定 id 未定义的上下文