Screen Recorder Export Benchmark IndependentReproducibleOpen data

Which screen recorder exports fastest?

Same clip, same edit, same machine. We time each app's export, then divide by what plain ffmpeg needs on that machine — so 2.08× means 108% longer than a raw re-encode, on any hardware.

7Submissions
21Runs
3Tools timed
4Machines
3Platforms
Data as of 2026-08-30 · every export re-checked in pixels and audio before it counts

01 — Ranking

Lower is faster

openscreen exports fastest across every run measured so far.

Platform
GPU

All 21 runs — 3 tools, 3 machines, 3 platforms. Combined as a graph of ratios, so no tool is the denominator.

ffmpeg 1.00×
01

openscreen

2.08×
02

cap

2.94×
03

recordly

6.62×

Bars start where ffmpeg finishes: their length is what the tool spends on top of a raw re-encode. The figure beside each is the full ratio, floor included.

Read the ratio, not the seconds. 2× means the export took twice as long as ffmpeg did on that machine — not twice as fast.

The floor does no work. ffmpeg composites nothing, so every tool that paints a wallpaper, rounds the corners and animates a zoom sits above 1×. The question is how far above.

No tool is the reference. Runs are combined as a graph of ratios, so the standing recomposes as coverage grows.

Which tool leads depends on the machine. Where a pair was measured on more than one, its ratio moves by 84.9% at the median.

cap takes 0.92× as long as recordly on Ryzen 7 5800X, and 0.18× as long on Ryzen 5 7520U. Different encoders, GPUs and drivers — not a fault in the measurement, and a tool built against one stack has no obligation to lead on another. It is also why the figure above is a consensus rather than a verdict: use the scopes to see hardware like yours. Only pairs measured on more than one platform can be compared this way, so each new submission narrows what the consensus is guessing at.

02 — Spread across machines

macOSLinuxWindows

One dot per run. Where one tool's dots straddle another's, the machine decides the order — not the tool. Hover a dot for the machine and the seconds.

1× = ffmpeg itself
openscreen
cap
recordly
10×11×12×13×14×15×16×17×

Export time ÷ the same machine's ffmpeg transcode. 2× means twice as long, not twice as fast.

03 — Every run

21 runs

Every run, with the machine that produced it. Cost compares across rows; seconds and frame rate don't — they describe one machine.

ToolMachineOSCost sw/hw floor Export sfpsCPU·s CoresRSS MiBBg load FidelityDriven
openscreen 1.10.0 Apple M1 darwin 2.023× 36.80 ±0.01 97.8 8.54 0.23 719 81% full cli
cap 0.5.9 Apple M1 darwin 1.210× 22.01 ±0.03 163.6 24.39 1.11 1485 58% full cli
recordly 1.3.3 Apple M1 darwin 2.626× 47.74 ±0.01 75.4 90.61 1.90 1232 93% full cdp
openscreen 1.10.0 Ryzen 5 7520U win32 1.582× 32.76 ±0.18 109.9 10.94 0.33 1004 77% full cli
openscreen 1.10.0 Ryzen 5 7520U win32 1.907× 39.03 ±0.78 92.2 10.50 0.27 984 50% full cli
openscreen 1.10.0 Ryzen 5 7520U linux 3.300× 1.60× 76.84 ±0.01 46.8 119.00 1.55 996 138% full cli
openscreen 1.10.0 Ryzen 5 7520U linux 4.085× 2.03× 77.85 ±0.15 46.2 121.00 1.55 993 51% full cli
cap 0.5.9 Ryzen 5 7520U linux 2.500× 1.62× 57.31 ±0.03 62.8 165.00 2.88 1231 142% full cli
cap 0.5.9 Ryzen 5 7520U linux 2.991× 1.95× 57.14 ±0.15 63.0 166.00 2.91 1231 54% full cli
cap 0.5.9 Ryzen 5 7520U win32 7.694× 149.85 ±0.32 24.0 102.17 0.68 2395 85% full cli
cap 0.5.9 Ryzen 5 7520U win32 8.293× 175.28 ±0.86 20.5 104.52 0.60 2377 76% full cli
recordly 1.3.3 Ryzen 5 7520U win32 10.446× 197.62 ±5.50 18.2 534.85 2.71 2678 33% full cdp
recordly 1.3.3 Ryzen 5 7520U win32 10.654× 203.15 ±2.10 17.7 560.14 2.76 2662 45% full cdp
recordly 1.3.3 Ryzen 5 7520U linux 13.710× 1.58× 323.90 ±2.28 11.1 505.00 1.56 2403 138% full cdp
recordly 1.3.3 Ryzen 5 7520U linux 16.997× 1.96× 324.46 ±3.96 11.1 505.00 1.56 2459 39% full cdp
openscreen 1.10.0 Ryzen 7 5800X win32 1.204× 9.38 383.6 3.88 0.41 774 69% full cli
openscreen 1.10.0 Ryzen 7 5800X win32 1.292× 10.09 ±0.01 356.7 4.50 0.45 804 69% full cli
cap 0.5.9 Ryzen 7 5800X win32 2.937× 22.97 ±0.49 156.7 41.84 1.82 1379 96% full cli
cap 0.5.9 Ryzen 7 5800X win32 3.145× 24.48 ±0.01 147.1 44.20 1.81 1387 128% full cli
recordly 1.3.3 Ryzen 7 5800X win32 3.400× 26.39 ±0.09 136.4 82.42 3.12 1606 86% full cdp
recordly 1.3.3 Ryzen 7 5800X win32 3.702× 28.79 ±0.01 125.1 147.68 5.13 1524 48% full cdp

Export carries ± the median absolute deviation of that machine's own scoring runs, so a re-run landing elsewhere can be read against the spread rather than against a single number.

Cores is CPU-seconds ÷ export time: how many cores the export kept busy. It separates compositing on the GPU from compositing on the CPU. No GPU time is measured on either side, so a low figure means quieter fans and longer battery — not less work.

Bg load is everything running that was not the tool under test, with the tool's own processes subtracted. Where two rows on one machine differ sharply, don't read their raw seconds against each other — and Cost does not repair it: the floor runs on the fixed-function encoder block, which barely throttles and is largely indifferent to CPU contention, while the compositing under test runs on cores and shaders, which are not. Measured on one machine, background load doubled between two runs while the floor moved 1.1% and the export it was dividing moved 19%.

04 — Per tool

Cost, coverage and the range each tool has been seen inside.

ToolCostRunsPlatforms RangeVersions
openscreen-cli 2.079× 7 macOS, Linux, Windows 1.204–4.085× 1.10.0
cap 2.937× 7 macOS, Linux, Windows 1.21–8.293× 0.5.9
recordly 6.615× 7 macOS, Linux, Windows 2.626–16.997× 1.3.3

05 — Roster

Who belongs here is decided by what a tool claims to do, not by whether an adapter exists. An empty cell is a finding.

ToolmacOSWindows Linux
OpenScreen
Screen Studio n/a n/a
Cap
Recordly degraded
FocuSee n/a
  • Recordly on Linux — per the vendor's own documentation: the rendered cursor is lost, so S3 is n/a here

06 — Method

One stopwatch

One clock, from the instant the export is committed to the moment the last byte lands. Every tool is timed on the same machine as its own ffmpeg floor, minutes apart.

Verified output

Every export is re-probed: resolution, frame rate and duration against target; wallpaper, padding, corners, zooms, cursor and camera in the pixels; audio by loudness, because a silent track passes any check that only asks whether audio exists.

No denominator

Runs are combined as a graph of ratios rather than averaged, so no tool is the reference. A tool reports what it configured; the verifier decides what happened.

Read the protocol in full →

07 — Submit a run

Every new machine narrows the guess. Yours takes about twenty minutes.

node bench.mjs run --bundle commons-upload
  1. 01Clone the repo and install the adapters for the tools you own.
  2. 02Run the bench on an idle machine. It measures its own ffmpeg floor beside every leg.
  3. 03Open a pull request with the produced JSON in submissions/. Validation runs on the PR.