|
| 1 | +--- |
| 2 | +title: "Video recording presets for Spectacle" |
| 3 | +date: 2026-04-08 |
| 4 | +type: "kde" |
| 5 | +status: "Idea" |
| 6 | +tags: ["KDE", "Spectacle", "KPipeWire", "FFmpeg"] |
| 7 | +merge_requests: |
| 8 | + - url: "https://invent.kde.org/friedreich/kpipewire/-/compare/master...work%2Fencoding-preferences?from_project_id=1911" |
| 9 | + status: "Work in Progress" |
| 10 | + - url: "https://invent.kde.org/friedreich/spectacle/-/compare/master...work%2Fencoding-preferences?from_project_id=2004" |
| 11 | + status: "Work in Progress" |
| 12 | +--- |
| 13 | + |
| 14 | +I want the ability to configure the encoding preferences for video recordings in Spectacle. This is useful for users who want to optimize for file size, quality, or speed. I also want to be able to benchmark the different encoding preferences to actually see the difference in file size and quality. |
| 15 | + |
| 16 | +### Spectacle Settings UI |
| 17 | + |
| 18 | +Users can now explicitly set a **Max frame rate** (defaulting to 30 fps) and choose an **Encoding preference** (Balanced, Highest Quality, Fast, or Smallest Size). |
| 19 | + |
| 20 | +### KPipeWire Backend |
| 21 | + |
| 22 | +I refactored the backend to ensure that these preferences are actually respected by all encoders |
| 23 | + |
| 24 | +### Benchmarks |
| 25 | + |
| 26 | +To allow benchmarking I added cli options to Spectacle for running headless recordings with varying encoders, frame rates and presets. |
| 27 | + |
| 28 | +The results of my testing across 48 combinations show the impact of these presets (10-second recordings): |
| 29 | + |
| 30 | +| Format | Preset | 10 FPS | 60 FPS | 120 FPS | |
| 31 | +|---|---|---|---|---| |
| 32 | +| **vp9** | balanced | 125.9 KiB | 460.4 KiB | 473.3 KiB | |
| 33 | +| **vp9** | quality | 169.8 KiB | 491.9 KiB | 495.7 KiB | |
| 34 | +| **vp9** | speed | 195.2 KiB | 568.5 KiB | 573.3 KiB | |
| 35 | +| **vp9** | size | 159.8 KiB | 312.8 KiB | 444.9 KiB | |
| 36 | +| **h264** | balanced | 110.7 KiB | 408.1 KiB | 415.6 KiB | |
| 37 | +| **h264** | quality | 118.7 KiB | 433.1 KiB | 438.5 KiB | |
| 38 | +| **h264** | speed | 119.8 KiB | 446.2 KiB | 437.7 KiB | |
| 39 | +| **h264** | size | 210.7 KiB | 460.9 KiB | 468.6 KiB | |
| 40 | +| **webp** | balanced | 8.69 MiB | 29.37 MiB | 29.86 MiB | |
| 41 | +| **webp** | quality | 8.35 MiB | 30.19 MiB | 31.32 MiB | |
| 42 | +| **webp** | speed | 15.94 MiB | 42.60 MiB | 41.22 MiB | |
| 43 | +| **webp** | size | 8.40 MiB | 31.67 MiB | 32.90 MiB | |
| 44 | +| **gif** | balanced | 425.6 KiB | 635.7 KiB | 616.3 KiB | |
| 45 | +| **gif** | quality | 14.44 MiB | 48.22 MiB | 51.51 MiB | |
| 46 | +| **gif** | speed | 356.1 KiB | 499.5 KiB | 433.4 KiB | |
| 47 | +| **gif** | size | 392.8 KiB | 537.2 KiB | 496.3 KiB | |
0 commit comments