Behind the Story
Every tennis match gets recorded on a DJI Osmo Pocket 3 mounted court-side, and editing it afterward is a second job: reviewing the footage, cutting it down to something worth sharing, and figuring out what to work on before the next match. That manual review costs 4-5 hours per match, and across 3-5 matches a week that’s most of a part-time job — time that should be going toward practicing, not scrubbing a timeline.
The target end state: raw footage goes in, AI reviews it visually and audibly, and two things come out — a pre-cut video ready to import straight into Final Cut Pro X, and short-format highlight clips ready to publish. Not a finished edit — a rough cut plus ready-to-post highlights, so the only manual work left is the final polish pass.
Two Architectures, One Goal
The project has gone through a real pivot. It started with a vision-validated pipeline — screenshotting candidate moments and asking an AI “is this a serve?” — but that approach was only 50-60% accurate and slow, since it cost a vision call per candidate. The current default is a much simpler, faster approach:
- noise-cut (active, default) — a pure audio-threshold rough cut. Extracts audio, sweeps dBFS thresholds against quiet-duration settings, and auto-selects whichever combination lands closest to a target removal percentage. Deterministic, fast, no AI cost per cut — but it only knows “quiet” versus “loud,” not what a serve or rally actually looks like.
- rally-identify (experimental) — the original, more accurate approach: chains a gap-based rally-boundary detector with a vision-based serve confirmation step, producing a timeline where every clip is an actual confirmed point rather than “not sustained quiet.” Slower and costlier, but closer to the real goal.
Neither workflow does highlight selection or short-form export yet — both stop at producing a cut timeline that a human still validates visually in Final Cut Pro X.
How the Active Pipeline Works
- Extract audio from the source 4K MP4 with ffmpeg.
- Sweep thresholds — measure the noise floor once, then evaluate every combination of dBFS threshold against several quiet-duration settings.
- Auto-select whichever combination lands closest to a 40% removal target inside a valid range; only fall back to asking a human when nothing qualifies.
- Find quiet sections and pad each kept clip so cuts don’t clip the start of a shot.
- Generate an FCPXML with frame-aligned timecode, ready to import into Final Cut Pro X as a new rough-cut timeline.
Repository
github.com/strider73/TennisVideoEditorForFCPX (private repo)
