我正在尝试将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();
答案 0 :(得分:0)
嘿,我从来没有遇到过这样的事情,但我查看了 puppeteer docs。如果不指定保存路径,则不会保存到文件,如果指定 base64,则返回原始数据。也许您会将原始数据通过管道传输到 ffmpeg 中?
所以当你调用屏幕截图时,它会是这样的
let screenshot = await page.screenshot({
encoding:'base64'
})