ffmpeg & codecs
ffmpeg is optional. It only affects which video formats you can export.
What works without it
| Without ffmpeg | Additionally, with ffmpeg |
|---|---|
| PNG sequence | MP4 (H.264 + AAC) |
| JPEG sequence | WebM (VP9 + Opus) |
| Still frame (PNG) | GIF |
| Lottie (JSON) | MOV (ProRes 4444) |
| Project (JSON) |
The browser build is a special case: it can encode WebM through WebCodecs without ffmpeg, muxed by a small built-in Matroska muxer.
Video export tells you plainly when ffmpeg is missing. It does not fail vaguely, and it does not write a broken file.
Where it is looked for
In this order:
$FFMPEG_PATH, if set and pointing at the executable.<app resources>/ffmpeg/ffmpeg[.exe], if it was bundled with the build.ffmpegon yourPATH.
Installing it
Windows
winget install Gyan.FFmpegOr download a static build, unzip it, and add its bin folder to your PATH.
Verify:
ffmpeg -versionPointing at a specific build
If you have several, or one in a non-standard place:
export FFMPEG_PATH=/path/to/ffmpegThat takes priority over everything else.
Bundling it into your own build
extraResources:
- from: <path-to-folder-containing>/ffmpeg # ffmpeg or ffmpeg.exe
to: ffmpegThe Electron main process checks <resources>/ffmpeg before falling back to
PATH.
ffmpeg’s own licence terms travel with the binary — LGPL or GPL depending on which build you bundle. That is your obligation to satisfy if you distribute it, not Premation’s.
Why a child process
On the desktop, frames are written to a temp directory and ffmpeg encodes the sequence in a child process. Two things follow:
- The encode never competes with the editor’s UI thread or GPU context, so a long export leaves the app usable.
- Peak memory is one frame. The finished file is moved into place, so a multi-gigabyte export never passes through the app’s memory.