Prepare renders for delivery
From a picked render to the file the client gets: the right resolution, cut to the
frame, texture matched to the source, placed in the cut, reframed if asked, with the
copies the client wants. Where each file goes (the round's folder, names, which shots
go out) is decided per job and recorded in AGENTS.md; the core skill covers that
layout.
First question: what resolution did the render come out at, and what does the job
deliver? Probe every render (ffprobe-inspect-media) before touching it: frame rate
before any trim, an audio stream before any mux.
Routes
| Step | Route | When | Cost and time | Leaf |
|---|---|---|---|---|
| Resolution | Native 1080p render | The whole frame ships and needs photographic detail | Seedance 2.5 at 1080p: 6–30 min a render; H3 Max's 1080P tier costs twice its 768P | guide-choose-a-video-model |
| Resolution | Render only the pixels you use | Only part of the frame ships: a presenter in a slide layout, a speaker in a window, a vertical crop | A portrait 720p (768P) speaker costs and waits less than a 1080p frame you'd crop away | guide-lipsync-video, guide-choose-a-video-model |
| Resolution | 720p render, then Topaz | Only to save money where quality matters less; not a route to 1080p quality | 720p about 6 min plus the upscale; it softens fine detail | topaz-upscale |
| Cut to length | Frame-exact trim at native fps | Every render | Local, seconds | ffmpeg-frame-exact-trim |
| Texture | Grain in post | Notes of plastic or shiny skin on an otherwise good take | Local, seconds; no re-render | ffmpeg-grain-for-plastic-skin, python-measure-detail |
| Into the cut | Splice picked clips into the source timeline over its audio | Shot-for-shot and recast jobs | Local | ffmpeg-splice-into-source-cut |
| Vertical | 9:16 window per shot, panning where needed | A vertical version of a 16:9 cut | Local | ffmpeg-crop-to-vertical |
| Sound | Loudness normalize | A new or assembled track | Local | ffmpeg-normalize-loudness |
Choosing
-
How many pixels do you need? Resolution trades cost and latency against pixels. If the deliverable uses only part of the frame (an avatar or presenter composited into a layout), render at the size you use, such as a portrait 720p speaker, and don't upscale. If the whole frame ships at 1080p quality, render it at 1080p natively.
-
1080p with realism and photographic grain: H3 Max can't; Seedance 2.5 can, at 5+ min a render. Draft on the fast model and pay for 1080p only on the take that ships.
-
Topaz is not the way to 1080p quality. It enhances what is there without inventing detail, but it softens fine detail: a wide shot at 720p plus Topaz came back soft with its logo illegible, and was redone at 1080p natively. Use it only to save money on shots where quality matters less, mixed with native renders if need be. Upscale the untrimmed render, then trim; keep the source of an upscale beside it.
-
Too long: trim, never speed up. Every model spreads the action over its whole clip; a sped-up clip reads badly. If the model idles before acting, start the trim later instead.
-
Shot files carry a 0.5 s tail past the cut, so a word finishing over the next shot is still in the file; the cut itself always uses the exact shot length.
-
Plastic skin: grain before a re-render. Size 2 (one-pixel grain vanishes at any scaled-down size); pick the strength from a ladder of 100% crops against the source (10 is light, and was the pick on a close-up). Grain won't fix shine that is in the lighting.
-
Splicing: frames without a replacement keep the original footage, and the source's audio runs under everything. A clip whose line a video model re-voiced keeps its own audio instead (
guide-lipsync-video). -
Vertical: crop every shot first (a 608×1080 window from 1080p), look at the whole vertical cut, and restage only the shots where the crop loses a story beat (a second character, an interaction, the product), not for empty space (
guide-edit-a-frame-before-animating,recipe-reframe-vertical). Follow the subject and the action across the shot; pad end cards and wide graphics to fit instead of cropping them. -
Vertical resolution: ship the crops at their native 608×1080, the pixels the source has; an upscale adds cost, not detail. If a vertical must be full 1080×1920 quality, restage those shots and render them natively at 1080p 9:16 with Seedance rather than putting Topaz on the crops.
-
Frame rates: a lip-sync pass that returns 25 fps goes back to 24 with
fps=24:round=near, never by blind resampling.
Copies
Make these from the finished file, at the end:
- Small review copy:
exec ffmpeg -i cut.mp4 -vf scale=960:-2 -c:v libx264 -preset veryslow -crf 28 -c:a aac -b:a 96k cut_small.mp4(a vertical cut:scale=540:-2). - No-audio copy, video untouched:
exec ffmpeg -i shot03.mp4 -c:v copy -an shot03_noaudio.mp4
Check it
- Count frames after every cut (
exec ffmpeg -i clip.mp4 -f framemd5 -) against the shot's frame count. - Look at a contact sheet of the whole cut and listen to its start.
- Re-check placement of a spliced dialogue track by transcribing the export.
Avoid
- Retiming a clip to fit.
- ffmpeg 7 dropping the last frame of a trimmed segment without
-r <fps>on the output (25 frames in, 24 out);fps=inside per-segment filter chains before a concat lost one frame per shot (472 of 484). - Upscaling after trimming.
- Re-rendering for texture before trying grain.


