Video export
The editor renders the open level into a video file through ffmpeg installed on your computer. Rendering is offline, one frame at a time, so the video is exact however slow the machine is
Export works on Windows, macOS and Linux. It is not available on phones
Where to find it
Export Videoin the side column of the level settings- the command
Export Videoin the command palette
The window opens over the editor. While a video renders, the window cannot be closed: Stop ends the render
Installing ffmpeg
ffmpeg is not part of the game. Install it once, and the window finds it by itself. Version 7.0 or newer is needed. An older one is refused, and the window names the version it found
| System | Install command |
|---|---|
| Windows | winget install ffmpeg |
| macOS | brew install ffmpeg |
| Linux | your distribution's package, for example sudo apt install ffmpeg |
Some Linux distributions ship an ffmpeg older than 7.0 (Ubuntu 24.04 ships 6.1). Then install a newer build from the ffmpeg site and point the window at it
The window looks for ffmpeg in this order:
- the file you chose with
Choose ffmpeg.... Then nothing else is searched - the path in the environment variable
BH_FFMPEG tools/ffmpeginside the game's data folder- every folder in
PATH - the folders the usual installers write to
Search automatically forgets the chosen file and searches again. Check again repeats the check, for example right after installing
Your ffmpeg may contain hardware encoders (NVIDIA, AMD, Intel, Apple). The window tries each one on a tenth of a second of black and uses only the ones that actually work on this computer
Window options
| Option | What it does |
|---|---|
Container, Codec | the kind of file and how it is compressed, see the formats below |
Resolution | the size of the video. Width and height are even numbers from 16 to 7680 |
Frame rate | frames per second of the video, up to 240. It does not depend on the level's own frame rate. Below 60 every frame is simulated in several steps, so the bot plays as it does in the game |
Range | the whole level, the loop range of the timeline, or your own start and end frame |
Quality | how much space the video takes. Hidden for formats that are lossless anyway |
Full colour (4:4:4) | colour for every pixel instead of every second one. Sharper thin coloured lines, a bigger file |
Seed (0 = as in the editor) | the seed of the level's randomness. 0 keeps the seed the editor is using |
Pre-roll, seconds | how many seconds before the start are played but not recorded, so effects already have their history. 2 by default, up to 10 |
Who plays | Reflex Bot v1 by default, Warm Bot v1, or No Bot for a video without an avatar. Hits do nothing during an export |
Post-processing, Effects | the same switches as in the editor, for the video only |
Audio | the level's tracks in the video |
Every option has its own ? in the window.
The editor UI, the grid, gizmos, the selection and the camera bounds never get into the video. The camera of the level frames the picture, and black bars fill whatever its aspect does not cover
Rendering speed
The video does not depend on how fast your computer is. Level time and the bot both advance by exactly one frame of the video per rendered frame, so a slow machine renders the same video, only later
Warm Bot v1 works its whole route out before the first frame, and the window shows how far it has got. If it finds no route, the export stops and asks for another bot
Formats
A format is two choices: Container and Codec. Only the pairs your ffmpeg can make are listed. The line under them says which sound goes with the pair and what file you get
Container | Codec | Sound | Good for |
|---|---|---|---|
MP4 | H.264, HEVC, AV1 | AAC, 320 kbit/s | sending and uploading anywhere |
MKV (Matroska) | H.264, HEVC, AV1, VP9, FFV1 | FLAC, lossless | archiving, FFV1 without any loss |
MOV (QuickTime) | H.264, HEVC, ProRes | PCM 16-bit, uncompressed | editing in Premiere, DaVinci Resolve, Final Cut |
WebM | VP9, AV1 | Opus, 256 kbit/s | the web |
GIF, WebP (animated), APNG | - | no sound | short looping clips for chats and pages |
Image sequence | PNG, JPEG, WebP, TIFF | audio.wav beside the frames | any editor imports it |
Sound only | WAV, FLAC, MP3, Opus | the format itself | the level's sound alone, nothing is rendered |
GIF takes one palette of 256 colours for the whole clip. Keep it short and small: a GIF of a whole level weighs far more than an MP4 of it
Where the video goes
By default the video goes to recordings/<level id>/ in the game's data folder, named after the level and the time of the export. Open recordings folder opens that folder. Choose... saves the next video anywhere else
Recordings stay when you delete the level. They are not part of a profile transfer unless you tick Video recordings
Sound
The video's sound is not recorded from the speakers, and you hear nothing during an export.
With Sound through the engine (with effects) on (the default) and effects on the tracks, the level's sound plays in real time while the frames render, and the game's own sound is recorded, effects included. The export lasts at least the length of the range: a fast computer waits for the sound to finish. Off, the tracks are mixed separately, with their volume and pan keyframes but without their effects. Sound only always mixes separately
Under the preview the window shows two timelines, Frames and Sound: they move independently. On a heavy level the parallel sound can stutter. Then turn on Record the sound after the frames: the sound is recorded after the last frame, and the export takes longer by the length of the range
Do not close the game while a video renders. The window says so for the whole run
What is not in the video
- the effects on audio tracks, but only with
Sound through the engine (with effects)off or inSound only. The window warns when the level has them - a transparent background
- a recording of how you played: only the bot can play in the video
Read next: Export and protection, Audio