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.
openscreen exports fastest across every run measured so far.
cap exports fastest on macOS.
openscreen exports fastest on Windows.
cap exports fastest on Linux.
openscreen exports fastest on AMD graphics.
openscreen exports fastest on NVIDIA graphics.
All 21 runs — 3 tools, 3 machines, 3 platforms. Combined as a graph of ratios, so no tool is the denominator.
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.
Apple M1 — 3 runs, 3 tools. One machine is a data point, not a verdict.
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.
Ryzen 5 7520U · Ryzen 7 5800X — 12 runs, 3 tools.
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.
Ryzen 5 7520U — 6 runs, 3 tools. One machine is a data point, not a verdict.
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.
Ryzen 5 7520U — 12 runs, 3 tools. One machine is a data point, not a verdict.
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.
Ryzen 7 5800X — 6 runs, 3 tools. One machine is a data point, not a verdict.
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.
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.
Export time ÷ the same machine's ffmpeg transcode. 2× means twice as long, not twice as fast.
Every run, with the machine that produced it. Cost compares across rows; seconds and frame rate don't — they describe one machine.
| Tool | Machine | OS | Cost | sw/hw floor | Export s | fps | CPU·s | Cores | RSS MiB | Bg load | Fidelity | Driven |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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%.
Cost, coverage and the range each tool has been seen inside.
| Tool | Cost | Runs | Platforms | Range | Versions |
|---|---|---|---|---|---|
| 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 |
Who belongs here is decided by what a tool claims to do, not by whether an adapter exists. An empty cell is a finding.
| Tool | macOS | Windows | Linux |
|---|---|---|---|
| OpenScreen | |||
| Screen Studio | n/a | n/a | |
| Cap | |||
| Recordly | degraded | ||
| FocuSee | n/a |
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.
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.
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.
Every new machine narrows the guess. Yours takes about twenty minutes.
submissions/.
Validation runs on the PR.