Skip to Content
Export & renderingffmpeg & codecs

ffmpeg & codecs

ffmpeg is optional. It only affects which video formats you can export.

What works without it

Without ffmpegAdditionally, with ffmpeg
PNG sequenceMP4 (H.264 + AAC)
JPEG sequenceWebM (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:

  1. $FFMPEG_PATH, if set and pointing at the executable.
  2. <app resources>/ffmpeg/ffmpeg[.exe], if it was bundled with the build.
  3. ffmpeg on your PATH.

Installing it

winget install Gyan.FFmpeg

Or download a static build, unzip it, and add its bin folder to your PATH.

Verify:

ffmpeg -version

Pointing at a specific build

If you have several, or one in a non-standard place:

export FFMPEG_PATH=/path/to/ffmpeg

That takes priority over everything else.

Bundling it into your own build

electron-builder.yml
extraResources: - from: <path-to-folder-containing>/ffmpeg # ffmpeg or ffmpeg.exe to: ffmpeg

The 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.
Last updated on