Shorts from a long video
The person brings a long screen-plus-webcam recording (their own, or one they have permission to edit), two or three of their existing shorts as style references if they have any, how many shorts they want and any must-have moments. You deliver that many 9:16 shorts of 30–50 s, built only from the recording: the face in one half of the frame, an animated punch-in on what they're showing in the other, captions in their own shorts style, and motion graphics with sound on every beat.
Everything is local and free except a handful of sound effects (about $0.01 each). The
job's notes go in job-notes.md and the style in style-notes.md; rounds and
deliverables follow the core skill.
Steps
- Watch it, don't just transcribe it. Contact sheets of one frame every 6 s with
the timestamp printed on it, 25 frames a sheet, plus full-size frames of the key
screens. Note the layout (where the screen window and webcam sit: usually locked for
the whole recording), the best visuals, and any stickers or effects already in it.
Do the same at 2 s for the reference shorts: cut pace, caption font, case and
colours, keyword colour, title cards. Write the style to match in
style-notes.md. - Transcribe with word times:
whisper-cliwith one word a segment and JSON out, on a 16 kHz mono WAV. Group the words into sentences (python-read-word-timings; break on sentence punctuation or every ~28 words) and list them with timestamps: that is the menu you pick from. - Plan the shorts. Each one: a hook that works with no context, then 5–9 whole
sentences that tell one idea, ending on a payoff, written as sentence numbers per
piece plus the screen moment to show for each.
- The first line tells a cold viewer what they're looking at ("what you're looking at here is my new X"). Open on orientation, then the clever line.
- Drop any piece that ends on a dangling "and…". Check every piece's text, not just its times. Gate: the person approves the moments.
- Rough cut (ffmpeg, free). Snap each piece to word times: start 0.06 s before the
first word, end 0.18 s after the last but never past the next word's start. Render
1080×1920 split-screen pieces (the face crop and the screen crop, each scaled to
1080×960 and stacked), join them, and write a
timeline.json(piece, source start and end, start in the short, text). Gate: the person watches the cuts for content. - Zoom targets: for each piece, read exact rectangles (a header, a button, a stat)
off grid-labelled frames at its start and end (
ffmpeg-eased-punch-in, Inputs). - The base video (
ffmpeg-eased-punch-in): the face half plus one eased push or pan on the screen half per piece. - Graphics (
guide-add-titles-and-motion-graphics,hn4a-compositor-motion-graphics): one spec per short over the base video, its audio the spec's first track. Layers, bottom first: base video, per-piece graphics, the seam line, captions, title, progress bar, end card.- Captions: 2–3 words a chunk (break early on punctuation, or after 2 when the second word is long), in the style's caption face (condensed caps at about 92 px in the worked example, a 10 px black stroke painted under the fill), the keyword colour on a keyword list, centred on the seam, a 0.18 s pop. Clip each caption's end to the next one's start, or two overlap for a frame.
- Seam: a 6 px line in the accent colour with a glow, drawn under the captions.
- Title: the short's name in the style's title face with a hard black shadow, popping in for the first 2 s; the same title at the end in the face half, sized to fit one line (about 1000 px ÷ its letter count, at most 80 px).
- Per-beat graphics, cued 0.1 s before their word: pill badges (accent for features, red for problems), white name labels that wipe in, emoji pops with a small rotate, hand-drawn circles and arrows drawn on over 0.45 s, numbered labels for steps, and a typed-on card for any text they read out that's too small to read on screen. Badges last at most 2.4 s; place graphics by fractions of the screen half so they follow it when the face switches sides.
- Progress bar: 12 px at the top, revealed left to right over the whole short.
Gate: the first short plays live on a review page (a
composecandidate); a yes on the look before building the rest.
- Sound (
guide-add-sound-effects,elevenlabs-sound-effects): one sound per graphic type. Chime, pop and click rotating on badges; a game-show buzz on red badges; a click on labels; a marker scribble on drawn circles and arrows; a bubble pop on emoji; an 8-bit blip on the title and end card; one quiet whoosh (volume 0.2) only when the face changes sides; about 0.35 for the rest. Generate each once (0.5–0.7 s) and reuse across shorts. - Render, level, deliver.
hn4a-compositor render, one short a call, then loudness to −14 LUFS / −1.5 dBTP with the video copied untouched (ffmpeg-normalize-loudnesswith that target; renders come out near −21). Check the frame count against duration × 30, that audio is present, and a 2 fps contact sheet. Deliver per the core skill.
Choices this workflow makes
- The face changes halves once a short at most, on a beat.
- Zooms in ffmpeg; the compositor only draws over the base.
- Captions on the seam, so neither half loses its picture.
- Built from the recording only: nothing generated, nothing that misstates what the speaker said.
- −14 LUFS for shorts platforms, not the −16 used for other deliveries.
Dead ends
- An animated
cropon a compositor video layer: the picture didn't fill its box (a strip at the top, or the face stretched across both halves). Render zooms in ffmpeg. - Swapping the face's side every piece: jumpy; the person asked for less.
- A whoosh on every graphic: one sound repeated 8+ times grates within 20 s.
- Static punch-ins on a whole UI window: unreadable on a phone.
- Picking pieces from the transcript alone: missed the best visuals and the existing style.
- Long renders dropped with the tool connection. Render one short a call and confirm the file exists before moving on.
Worked example
A 12-minute screen-plus-webcam recording about an app's dashboard became three shorts of 40, 43 and 43 s, 1080×1920 at 30 fps. The webcam box was already about 9:16 (445×790 px), so the face half was a 2.4× upscale: soft but acceptable (offer an upscale if the person minds). Style from three reference shorts: condensed caps captions with one keyword colour, a pixel-style title face.
The person's notes over two rounds (paraphrased), each now a default above:
| Note | Fix |
|---|---|
| Switch the face's half less often | Once a short at most |
| Zoom tighter on the important thing | Push onto one element |
| Far more motion graphics | Per-beat badges, labels, emoji, drawn arrows |
| Open on the orienting line | Orientation first, then the clever line |
| Vary the sound effects | One sound per graphic type |
| Put the line behind the captions | Seam drawn under the captions |
Cost: $0.08 in sound effects; everything else ran locally.


