tighten-pace
Podcast clips die on dead air. This skill walks a word-timed transcript,
finds any silence longer than gap_max, and collapses that silence to a
short floor — either collapse_to (mid-sentence) or sentence_beat (after
a ., ?, or ! so a beat is preserved between thoughts). Output is a
new clip plus a transcript whose timestamps reflect the tightened timeline,
so chunk-captions, burn-subtitles, and title-transition all align correctly.
Invoke
.claude/skills/tighten-pace/tighten-pace.sh <input_clip> <input_transcript> <out_clip> <out_transcript> [gap_max=0.18] [sentence_beat=0.15] [collapse_to=0.08]
input_clip— clip-local mp4 (post cut-clip + rebase)input_transcript— clip-local word-timed transcript JSONout_clip— written mp4 with silences collapsedout_transcript— written transcript JSON with shifted t0/t1gap_max— silence threshold in seconds; only gaps strictly greater are collapsedsentence_beat— target gap (sec) at sentence boundariescollapse_to— target gap (sec) elsewhere
Env overrides: TIGHTEN_GAP, TIGHTEN_SENTENCE_BEAT, TIGHTEN_COLLAPSE_TO.
How
plan.py walks word pairs. When nxt.t0 - prev.t1 > gap_max, the kept
ranges are split: the previous range ends at prev.t1 + target/2 and the
next starts at nxt.t0 - target/2, so the residual silence after ffmpeg
select+aselect is exactly target seconds. target is sentence_beat
when prev.w ends with ., ?, or !; otherwise collapse_to.
Caveats
- Always re-encodes (select filter cannot stream-copy).
- Idempotent via
<out>.tpmeta(input + transcript mtimes + all three params). - If the transcript has fewer than 2 words, the input is copied through.