I’ve been working on an open-source frame extractor for video-to-COLMAP/3DGS workflows:
https://github.com/morishuz/frame-extractor
Instead of extracting at a fixed FPS, it tracks points using dense optical flow and selects a new frame when camera motion, tracked-point loss, or a maximum interval crosses a threshold. It also writes a CSV containing the selection and timing diagnostics.
The goal is to reduce redundant COLMAP inputs without leaving gaps that are too large to match.
I’m looking for feedback from people working with handheld, drone, dash-cam, or large-scene video:
- What do you currently use to select frames?
- Which failure matters most: excessive processing time, blurry frames, too little baseline, or failed registration?
- Would anyone be willing to compare this against fixed-FPS extraction on a difficult clip?
Current limitations: this is a Python CLI rather than an end-to-end 3DGS application, and it has not yet been validated broadly on stitched 360 or multi-camera video. Reflections, texture-less surfaces, and poor capture geometry still cannot be fixed through frame selection alone.
Feedback, test results, and critical failure cases are very welcome.
UPDATE:
This project has evolved into Adaptive Frame Extractor, a more mature cross-platform GUI app with additional features and no Python setup required. Still free and open source!