AI-Powered Tennis Video Processing Pipeline

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

  1. Extract audio from the source 4K MP4 with ffmpeg.
  2. Sweep thresholds — measure the noise floor once, then evaluate every combination of dBFS threshold against several quiet-duration settings.
  3. 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.
  4. Find quiet sections and pad each kept clip so cuts don’t clip the start of a shot.
  5. 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)

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top