Capture Electron's window and export as video
-
ffmpeg
if you have FFmpeg installed, make sure to set the
FFMPEG_PATH
environment variable;Or, install @ffmpeg-installer/ffmpeg
-
electron
npm i electron-video-recorder
With Electron's Offscreen API, you can export videos in the background:
const fs = require("fs");
const { capture } = require("electron-video-recorder");
const { app, BrowserWindow } = require("electron");
const win = new BrowserWindow({
webPreferences: { offscreen: true },
show: false,
});
capture(win, { savePath: 'capture.mp4', fps: 25 }).then(handle => {
handle.stop().then(() => {
const buffer = fs.readFileSync('capture.mp4');
win.close();
win.destroy();
});
})
Or with async func:
const fs = require("fs");
const { capture } = require("electron-video-recorder");
const { app, BrowserWindow } = require("electron");
const win = new BrowserWindow({
webPreferences: { offscreen: true },
show: false,
});
const handle = await capture(win, { savePath: 'capture.mp4', fps: 25 });
// Set up your custom stop event
await new Promise((r) => setTimeout(r, 10000));
const buffer = fs.readFileSync('capture.mp4');
win.close();
win.destroy();
win
<BrowserWindow>: window to be capturedoptions
<Object>savePath
<String>: path to save the exported video;fps
<Number>: The frames per secord, defaluts to25
;format
<mp4
|gif
>: output format, default tomp4
;niceness
<Number>: config of fluent-ffmpeg;
- returns: <Promise<VideoCapture>>
Core class of capture, created when call capture(win)
, and return an instance;
Manually stop capturing.
This method will automatically be called when BrowserWindow
is closed
or destroyed
const capture = await capture(win, { savePath: "capture.mp4" });
await new Promise(r => setTimeout(r, 5000));
await capture.stop();
There's an Electron example in project, Clone the project and run:
yarn dev
This library is referenced from playwright-video