The person recorded the same lines several times and wants the good ones, tight. First question: is it one file, or many takes across files (or a screen recording paired with a webcam)? One file is cut from the sound: its utterances found by energy, each transcribed on its own. Many files are cut from their transcripts as a text paper edit the person reads and approves as words.
Routes
| Route | Pick it when | Cost and time | What you get | Leaves |
|---|---|---|---|---|
| A. Speech islands | One webcam or talking-head file with retakes in it, no screen to keep in step | Free; about 10 minutes for a few minutes of footage | A rough cut of the last good take of each line, pauses squeezed to ~0.11 s | python-find-speech-pauses, python-cut-best-takes-by-speech-islands |
| B. Text paper edit | Many takes across files, or a screen recording and a webcam recorded together, or the person wants to approve the edit as words | Free (whisper-cli), or elevenlabs-speech-to-text if they pay; the cut itself under a minute for 270 phrases | Every track cut on one grid, the voice, and every kept word in comp time | python-cut-phrases-from-takes |
Both start from a transcript per take (whisper-cli-transcribe-with-word-times) and end
with a timeline.json whose words cue the captions and graphics.
Process
- Probe every file (
ffprobe-inspect-media): fps (screen recordings come VFR), size, and the audio stream'sstart, which shifts WAV time against movie time. - Transcribe. Route A: per utterance (
speech_map.py runs). Route B: per take. Mark anything the mic heard from the computer (a clip played back) now. - Pick the takes.
- Per line, the last complete take: it is usually the cleanest and fastest.
- Drop false starts, filler "OK"s, coughs, and transcripts that read only "Thank you." on what is really breath or room.
- A take that restarts mid-sentence, or ends just before a word you don't want: cut
at an energy dip inside the speech, found from the sound
(
python-find-speech-pauses,map), never at a whisper word time.
- Check every cut inside a sentence by transcribing that window alone (±0.5 s) and listening. A clipped last word is the most common note.
- Build the cut with the route's leaf: pieces on the frame grid
(
ffmpeg-frame-exact-trim, The frame grid), short fades, long pauses squeezed. - Verify: a transcript of the cut against the lines picked, and the longest pauses
left listed. Bring the voice to −16 LUFS (
ffmpeg-normalize-loudness) if it is the final track. - Gate:
review_approvewith the rough cut, the remaining long pauses in thebrief, before any graphics, tracking or captions are built on it: everything after reads the cut's frames, so a re-cut redoes all of it.
Choosing
- Route B when the person approves words. A 30-minute screen-plus-webcam session in 5 pairs was edited as a 74-phrase cut list the person read with its total length; a change to the list cost nothing.
- Route A when there is no transcript worth cutting on. Word times on a whole file drift up to 1 s; utterance by utterance, the transcript is exact about the words and the sound gives the edges.
- Squeeze, don't remove, pauses: about 0.11 s inside a take keeps the speech breathing; 0.22 s kept at a pause over 0.45 s suits a walkthrough where the screen has to catch up.
- Get to the point in seconds. A first cut that opened on 15 s of webcam before the product was sent back; open on the first line that matters.
Avoid
- Cutting on word times from a full-file transcript: they smear across long silences.
-tper piece or per-piece rounding: the cut drifts a frame every few pieces (ffmpeg-frame-exact-trim).- Building graphics, captions or tracking before the rough cut is approved.
- The mic's copy of anything played on the computer: use the original file's sound.
Related
workflow-highlights-from-webcam-footage: route A, then what the footage is for.workflow-screen-recording-video: route B, then a walkthrough.guide-select-highlights-from-long-footage: picking the moments worth a clip from a long recording, rather than the best take of each line.


