Benchmarks
Video frame extraction throughput
One clip (scripts/release-bench/fixtures/sample.mp4) produced 108 frames through frame_iterator() plus a 64x36 thumbnail column in 0.24 s wall (450 frames per wall second). Pixeltable 0.7.21 on Intel(R) Xeon(R) Processor, 4 cores, 15.6 GB. This is not a multi-hour library measurement.
Updated
How to run
python benchmarks/run.py --writeOr: PIXELTABLE_HOME=$(mktemp -d) python benchmarks/scenarios/video_frames.py --clips 1 --out /tmp/vid.json --scale reduced
Results
1 clip, 108 frames, 0.24 s wall, 0.21 s CPU, 450 frames per wall second.
- Clips
- 1
- Frames
- 108
- Insert
- 0.24 s wall, 0.21 s CPU
- Frames per wall second
- 450
Methods
- Scale of this page
- reduced: 1 clip
- Clip
- scripts/release-bench/fixtures/sample.mp4
- Iterator
- frame_iterator() every frame, plus a 64x36 thumbnail column
- Machine
- Intel(R) Xeon(R) Processor, 4 cores, 15.6 GB, Linux 6.12.94+, Python 3.12.3, pixeltable 0.7.21
- Recorded
- 2026-10-28, command python benchmarks/run.py --write
Limitations
- One short clip. A production library is longer files, more codecs, and disk that is not this VM.
- Each step ran once, with no warmup, so every time is one sample. scripts/release-bench repeats its runs.
- The thumbnail is 64x36. A larger resize would change the 450 frames-per-second figure.
- Do not compare this number to the /engineering video-to-frames series without reading both methods. That series uses CPU time across releases on a Mac.
Where Pixeltable fits
If you only need ffmpeg on the command line, Pixeltable is the wrong tool. Use it when each still has to stay tied to the source clip and later columns (thumbnails, detectors, an index).
import pixeltable as pxtfrom pixeltable.functions.video import frame_iteratorTableModel = pxt.model_base()class Videos(TableModel, name='videos'):video: pxt.Videoclass Frames(TableModel,name='frames',base=Videos,iterator=frame_iterator(video=Videos.video),):thumb = frame.resize((64, 36))
Questions
Is this real-time playback speed?
No. It is frames extracted and thumbnailed per wall second on this VM for one clip.
Which iterator?
pixeltable.functions.video.frame_iterator on every frame, not fps=1. The class-based form is in the snippet below.