Skip to content
Back to skills

Video Editing

ASecurity

Rough-cut a talking-head video (TikTok, Reels, Shorts, YouTube) in one command - joins the raw clips, cuts the silences, drops the false starts and the retakes (only the last take of a sentence is kept), never cuts inside a word, transcribes. macOS, Windows, Linux, all local. Use when the user says "edit my video", "cut the silences", "remove the dead air", "remove my retakes", "transcribe my video", "monte ma vidéo", "coupe les blancs", "enlève mes reprises", or drops raw clips to edit.

  • 5 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 20, 2026
ai-agentspythongonodegit

Works with

  • terminal
  • cli

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 10 files and shows the line behind each finding

Scanned October 20, 2026

npx -y skills add vincentventalon/my-claude-skills --skill video-editing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Video Editing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Video Editing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vincentventalon-video-editing-my-claude-skills/badge)](https://www.skillsdirectory.com/skills/vincentventalon-video-editing-my-claude-skills)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: video-editing
description: Rough-cut a talking-head video (TikTok, Reels, Shorts, YouTube) in one command - joins the raw clips, cuts the silences, drops the false starts and the retakes (only the last take of a sentence is kept), never cuts inside a word, transcribes. macOS, Windows, Linux, all local. Use when the user says "edit my video", "cut the silences", "remove the dead air", "remove my retakes", "transcribe my video", "monte ma vidéo", "coupe les blancs", "enlève mes reprises", or drops raw clips to edit.
---

# Video editing

One command does everything:

```sh
python scripts/edit_video.py clip1.MP4 clip2.MP4 -o edited.mp4 --lang fr
```

(`python3` on macOS / Linux if `python` is missing.) It joins the clips in
the order given, splits the sound into islands (whatever lies between two
silences), transcribes each island on its own, drops the islands with no
word in them and the **false starts** (when a sentence is said several
times, only the **last** take is kept), renders `edited.mp4`, and writes
`edited.txt` + `edited.srt` (the transcript) and `edited.takes.tsv` (every
island, kept or not, with its text). **Always pass `--lang`** with the
language the user speaks (en, fr, es, de...).

## First time — YOU install the tools, not the user

The user just unzipped this skill. Check both tools, install what is
missing, without asking them to do it themselves:

| tool | check | macOS | Windows | Linux |
|---|---|---|---|---|
| ffmpeg + ffprobe | `ffmpeg -version` | `brew install ffmpeg` | `winget install Gyan.FFmpeg` (then reopen the terminal) | `sudo apt install ffmpeg` |
| whisper-cli (whisper.cpp) | `whisper-cli --help` | `brew install whisper-cpp` | download `whisper-bin-x64.zip` from https://github.com/ggml-org/whisper.cpp/releases (latest release), unzip, add the folder to the PATH | `sudo apt install whisper-cpp` or build https://github.com/ggml-org/whisper.cpp |

The model downloads itself on the first run, into `~/.cache/whisper-cpp/`:

| machine | pass | download | note |
|---|---|---|---|
| recent Mac (M1+) or PC with a GPU | nothing (`large-v3-turbo`) | 1.6 GB | the best; ~2-3 min for 10 min of rushes on a Mac M-series |
| little disk space or RAM (8 GB) | `--model large-v3-turbo-q5_0` | 0.57 GB | almost as good |
| PC without a GPU, or it is too slow | `--model small` | 0.49 GB | several times faster on a CPU, catches a few less retakes |

`medium` is not a good middle ground: as heavy as `large-v3-turbo` and slower.

## What to do

1. Find the clips (usually the newest files in `~/Downloads`) and run the
   command. The first run on a 10 min rush takes a few minutes.
2. Read what the script prints: duration before / after, the retakes it cut
   (each quotes the words), and the `to check at 12.3s` lines (a repeat it
   saw but could not cut: no silence to cut in).
3. **Read the takes, like an editor.** Open `edited.takes.tsv` and read the
   `kept` lines in order, as a script. The script only catches a retake that
   starts like the next one. Look for what it cannot see: a sentence
   abandoned and said again **in other words** just after ("let me show you
   the 5 steps" ... "in fact there are 5 ways, let me show you"), a lone
   fragment ("So..."). If you find one, run again with `--cut A:B` (the
   times of the abandoned lines, straight from the file) and the same `-o`: it re-transcribes
   nothing, it only renders again. **In doubt, keep**: a repeat left costs a
   second pass, a sentence lost costs the video. Never cut something just
   because it is off topic, a joke or an aside.
4. Hand back the path of the video, what you cut and why, and the `to
   check` times if any. Offer the review page (below).

## Review: the user cuts what is left, and leaves notes

```sh
python scripts/review.py edited.mp4
```

Opens a page in the browser (standard library only, 127.0.0.1): the video,
the transcript sentence by sentence, the sound wave with every join, and
what the script cut (✂). The user does two things there and nothing else:
**cut** (select sentences or drag on the wave, press X; they hear the cut
at once) and **note** (N, free text at a moment). Everything is saved as
they go into `edited.edits.json` (times of the joined footage, like
`edited.takes.tsv`).

When they say "apply my edits" (or "c'est bon", "j'ai fini"): run
`edit_video.py` again with the **same clips and the same `-o`**. It reads
`edited.edits.json` by itself, applies the cuts, re-transcribes nothing,
and prints each note as `note at 42.0s in the video: ...`. **The notes are
for you**: read each one, act (a `--cut`, a `--protect`, a setting), run
again if needed, and say what you did for each note. A note you cannot act
on: say so, do not guess. Then offer the page again.

## Finish (optional): captions and title with Remotion

Only if the user wants a finished reel and has Node 18+:

```sh
cp edited.mp4 remotion/public/video.mp4
cp edited.timeline.json remotion/public/timeline.json
cd remotion && npm install
npx remotion render src/index.ts Reel out/reel.mp4 --props='{"title":"My *big* idea","layout":"auto"}'
```

1080x1920, captions from the transcript (the word being said lights up),
a title on top (`*word*` = highlighted, `""` = none). Two layouts, no
split screen: `full` (the person fills the screen) and `frame` (the video
in a card on a dark background, for a clip filmed sideways). `auto`
picks: filmed upright = `full`, sideways = `frame`. `npm run studio` to
preview. `"captions": false` to turn them off.

## Settings

| Setting | Default | When to touch it |
|---|---|---|
| `--min-sil` | 0.22 s | the edit feels breathless → 0.35; pauses left between sentences → 0.18 |
| `--noise` | 32 dB | background noise (street, fan) and nothing gets cut → 25 |
| `--model` | large-v3-turbo | see the table above |

`--cut A:B` removes a window, `--protect A:B` keeps one (a comedic pause):
times of the joined footage, as in `edited.takes.tsv`. `--pad 0.08` keeps
more air around each island (a word's ending sounds clipped).
`--keep-retakes` keeps every take (a deliberate repetition, a chorus),
`--keep-fillers` keeps the lone "um"s, `--no-transcript` skips whisper
(silences only).

## When it fails

- `ffmpeg` or `whisper-cli` not found → install (table above), reopen the
  terminal. Without whisper the edit still comes out: silences only.
- A 0 s video or a `concat` error → the clips do not share the same format
  (resolution, fps); edit each clip alone, or re-encode them first.
- `nothing kept` → very quiet recording: `--noise 25`.

## What comes next

This is the rough cut. When the user asks for more, add it right here, in
this script: burned-in subtitles from the `.srt`, a cover on frame 0, music
under the voice.

Files in this skill

  • SKILL.md6.6 KB
  • remotion/.gitignore45 B
  • remotion/package.json514 B
  • remotion/src/Reel.tsx6.1 KB
  • remotion/src/Root.tsx738 B
  • remotion/src/index.ts93 B
  • remotion/tsconfig.json205 B
  • scripts/edit_video.py29 KB
  • scripts/review.html20.8 KB
  • scripts/review.py4.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.