Я пытаюсь записать видео с веб-сайта, используя способ, аналогичный puppeteer-рекордер , но я хочу остановить запись самостоятельно, а затем сохранить ее в файл (после того, как я остановил его). Для этого я написал простой веб-сервис:
var express = require('express');
var app = express();
const { spawn } = require('child_process');
const puppeteer = require('puppeteer');
var record = true;
app.get('/startRecord', function (req, res)
{
const frun_record = async () => {
console.log("Start recording");
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://worldfoodclock.com/', { waitUntil: 'networkidle2' });
var ffmpegPath = 'ffmpeg';
var fps = 60;
var outFile = 'E:\\Code\\video-record\\output.webm';
const args = ffmpegArgs(fps);
args.push(outFile);
const ffmpeg = spawn(ffmpegPath, args);
const closed = new Promise((resolve, reject) => {
ffmpeg.on('error', reject);
ffmpeg.on('close', resolve);
});
console.log("Entering loop");
while (record) {
let screenshot = await page.screenshot({ omitBackground: true });
await write(ffmpeg.stdin, screenshot);
}
ffmpeg.stdin.end();
console.log("Recording stopped");
await closed;
};
frun_record();
res.end( "starting recording" );
})
app.get('/stopRecord', function (req, res) {
record = false;
res.end( "stopped" );
})
const ffmpegArgs = fps => [
'-y',
'-f',
'image2pipe',
'-r',
`${+fps}`,
'-i',
'-',
'-c:v',
'libvpx',
'-auto-alt-ref',
'0',
'-pix_fmt',
'yuva420p',
'-metadata:s:v:0',
'alpha_mode="1"'
];
const write = (stream, buffer) =>
new Promise((resolve, reject) => {
stream.write(buffer, error => {
if (error) reject(error);
else resolve();
});
});
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Но он всегда записывает только 1 секунду видео, похоже, что поток просто перезаписывается. Я попытался просто сохранить скриншоты на диске, и это было более 1 секунды видео. Итак, главный вопрос - как поместить все скриншоты в поток, а затем сохранить их на диск? И еще одна вещь, которую я хотел бы знать: с какой частотой снимаются скриншоты с веб-страницы?