Get started
CutClean — Auto Remove Silence & Filler Words

CutClean — Auto Remove Silence & Filler Words

Automatically cuts silences and filler words like "um" and "uh" from talking-head, lecture and vlog footage. ffmpeg silence detection (plus optional local STT filler detection) works out the segments to keep, then it renders a frame-accurate mp4 plus EDL and FCPXML for Premiere or DaVinci at source quality. In a measured sample, 47.3% of a 33.87 s source was removed with an 11.6 ms audio/video length gap. It strips dead time, it does not pick highlights. Works with ffmpeg only, no API key.
#Video#Productivity#Education
Rating
More ratings needed
Sold
0
How to use
Download

CutClean — Auto Remove Silence & Filler Words

hero_en.webp before_after_en.webp

When you shoot an hour-long lecture or vlog, the editor spends several times the source length
with the play button down, finding and cutting silences and "um...", "uh..." one by one. Each cut
is simple, but there are so many that it wears you out. CutClean finds these sections
automatically, cuts them, and exports one ready-to-use mp4 plus an edit list for Premiere and
DaVinci. A person only has to review at the end: "should I keep this cut?"

Pipeline

detect.py  →  (optional) detect_fillers.py  →  plan.py  →  [review/edit]  →  render.py + export.py
silence detection     filler word detection       edit plan                  render + EDL/FCPXML

The plan.json made by plan.py is plain JSON a person can read and edit. If auto detection
missed something or cut too much, edit keep_segments directly and move on to the next step.

Actual commands

uv run scripts/detect.py INPUT.mp4 -o out/detect.json --noise -30 --min-silence 0.35
uv run scripts/detect_fillers.py INPUT.mp4 -o out/fillers.json --model small --lang ko
uv run scripts/plan.py --detect out/detect.json --fillers out/fillers.json \
    --pad 0.12 --min-cut 0.15 --merge-gap 0.25 -o out/plan.json
uv run scripts/render.py --plan out/plan.json -o out/cut.mp4
uv run scripts/export.py --plan out/plan.json --outdir out --name jumpcut

Running the commands above as is on a real 33.87-second sample (4 sentences + 2 fillers + 5
silences) removed 47.3% of the source, and the video/audio length gap was 11.6 ms (target: within
50 ms).

What's included

File Role
scripts/detect.py Silence detection with ffmpeg silencedetect (default, no dependencies)
scripts/detect_fillers.py Filler word detection with faster-whisper (optional, model downloads on first run)
scripts/plan.py Applies padding and merge rules to compute segments to keep, prints stats
scripts/render.py Frame-accurate re-encode with hard-cut video + crossfaded audio
scripts/export.py CSV / CMX3600 EDL / FCPXML 1.9 export
guides/import-and-tuning.md Importing into Premiere and DaVinci, parameter table by situation

Usage examples

1. Quick first cut of a lecture video: when cutting silences is enough, skip
detect_fillers.py and run only detect.py → plan.py → render.py. For a quiet indoor recording,
start with --noise -35 --min-silence 0.4.

2. Tighter vlog: for footage with location noise, lower the silence detection sensitivity
with --noise -24 --min-silence 0.5, and use detect_fillers.py to cut "um" and "uh" as well.

3. Review the auto cuts, then move to Premiere: run up to plan.py, open out/plan.json and
fix odd cuts by hand, make a check mp4 with render.py, then import the out/jumpcut.fcpxml
made by export.py into Premiere and finish at source quality.

What you need

  • ffmpeg/ffprobe (install via Homebrew etc., tested on 9.x). Check with ffmpeg -filters that
    the silencedetect, atrim, concat, acrossfade and showwavespic filters exist.
  • uv: dependencies are inline (PEP 723), so it runs with uv run without pip install.
  • Filler word detection (optional) needs an internet connection (it downloads a local STT model
    once). No API key needed.
  • There is no feature to burn captions or text onto the video (Homebrew ffmpeg 9.x has no
    freetype/libass, so the drawtext/subtitles filters are not available). If you need captions,
    use it together with a captioning skill.

Recommended for

  • Solo creators and instructors who shoot long and want to edit short
  • Editors who want to automate silence cuts and finish color, captions and BGM themselves in
    Premiere or DaVinci

Not recommended for

  • When you need to "pick" a 30-second highlight from an hour of footage (that is a highlight
    curation skill; CutClean goes through the whole video and removes only dead time)
  • When captions or text must be added to the video automatically

FAQ

Q. Can I use it on English footage?
Silence detection works regardless of language. Filler detection includes an English filler list
such as "um" and "uh"; just change the STT language with --lang en.

Q. Does it also make highlights or shorts?
No. This skill removes silences and fillers from the whole video. Picking highlights is a
separate skill.

Q. I only need the rendered mp4. Why EDL/FCPXML?
If you want to add color grading or captions later at source quality, import the FCPXML into
Premiere or DaVinci. If you only need an mp4, the render.py output is enough.

Q. Does the audio click or pop at the cut points?
Each cut gets a short audio crossfade (25 ms by default) to remove clicks. If any remain, adjust
--crossfade-ms.

Q. How do I fix it if auto detection cuts the wrong part?
Open the plan.json made by plan.py and add or remove keep_segments directly.
render.py/export.py work from that file only.

Purchase notes

Unzip the download, read SKILL.md first, and run the uv run scripts/... commands in the order
given. There is no separate install script or account linking.

The example is a real run on a 2 min 30 s section of the audio of John F. Kennedy's Rice University speech of September 12, 1962 (U.S. government work, public domain, archive.org). It is an old recording with crowd noise underneath, so the threshold was raised with --noise -24.