The person brings a finished 16:9 cut (an original, or a variant from
workflow-shot-for-shot-remake) and, if it has one, the job that made it. You deliver the 9:16
cut over the source audio and every shot as its own file, in the layout agreed with
the person (core skill).
Cheapest first: crop everything, watch the whole vertical cut, and only then spend generation on the shots that fail. Most shots survive a crop.
Steps
- Crop every shot (
guide-prepare-renders-for-delivery,ffmpeg-crop-to-vertical). Take the shot list from the 16:9 job or find it withffmpeg-scene-cuts; together the shots must cover the whole video. Place a window per shot from a gridded sheet of frames across it (ffmpeg-crop-to-vertical, Place the windows): it follows the action across the whole shot, pans when the action moves, and fits end cards wider than it. Record each window and why where you keep the job's notes. Build the crop-only cut over the source audio and a sheet of every shot's first, middle and last frame. Gate: the person watches the whole crop-only cut at native size and names the shots that need more than a crop. - Restage only the shots a crop can't save (
guide-edit-a-frame-before-animating,nano-banana-restage-for-new-aspect). Write per shot what moves and what stays. Make both kinds, on nano banana 2.1 and Pro:- a 16:9 edit with the subjects moved into the middle third, judged by its centred 9:16 crop: for close-ups, and when the look must match the cropped shots around it;
- a native 9:16 redraw, the same camera "shot in portrait": more resolution for the
render and better for wides, but the model recomposes more freely.
Gate: a
review_chooseper shot, all in the same turn: the original 16:9 frame asoriginal, the plain crop the person saw asprevious, each 16:9 edit an option holding its crop and its full frame, and each redraw an option. Check every person in a redraw: they sometimes duplicate a background person or bunch two on one side.
- Fix held props on the pick (
guide-keep-small-details,nano-banana-swap-held-product): Pro, a pre-hazed product photo for the design, a crop of the source frame's prop for angle and grip. Redraws lose small logos; judge the logo at playback size. Gate: review the fixed stills. - Animate the restaged shots (
guide-animate-a-shot). Use the model that won the shot in the 16:9 job (kling-v3-image-to-video,seedance-2-5-image-to-video). With no earlier job, draft onh3-max-image-to-videoand upgrade whereguide-choose-a-video-modelsays the shot needs it; a draft approves composition and timing, not motion. Trim to the shot's length plus a 0.5 s tail (ffmpeg-frame-exact-trim) and keep the render's own audio in the trimmed file, so a take is judged with its sound. Crop a 16:9 render to 9:16; if the crop holds only a sliver of someone, move the crop centre and lock the camera in the prompt, or a push-in drifts them out. Gate: areview_chooseper shot, all in the same turn, its renders as the options and the plain-crop clip asprevious. - Lip-sync the dialogue shots (
guide-lipsync-video,h3-max-lipsync-a-still). Isolate the voice (elevenlabs-voice-isolation) and cut the line to start on the shot's first frame and go silent after the speaker's last word, picked by ear from a ladder of trims (ffmpeg-cut-audio-window). Pad it with silence to 5 s; never take a longer window. It is a fresh performance from the restaged still. Gate: areview_choosewith the lip sync and the plain render as the options, with their sound: H3 smooths facial hair and skin on a close-up, so pick the lip sync only if it holds up. - Splice (
ffmpeg-splice-into-source-cut): each picked render replaces its shot at exactly the shot's length (the tail dropped), over the source audio. Count the frames after every cut (ffmpeg-frame-exact-trim). - Deliver (core skill), shaped like the 16:9 job's delivery:
deliverthe cut, plusshotNN.mp4andshotNN_noaudio.mp4for every shot. A restaged shot is the picked render with its 0.5 s tail and its own audio; a cropped shot is the crop at exactly the shot's length with the source audio, since the source cuts straight to the next shot.
Resolution: the vertical ships at 608×1080, the pixels the source has. Where the client needs full 1080×1920 quality, restage those shots and render them natively at 1080p 9:16 with Seedance; don't put Topaz on the crops.
Choices this workflow makes
- Restage only when the crop loses a story beat: a second character, an interaction, the product. Not for empty space or a slightly tight frame.
- Background people: ask for a glimpse at the frame edges. "Move them close behind her" crowds the subject.
- Re-animate with the model that already won the shot, so the vertical matches the 16:9 version's motion.
- Shot files carry a 0.5 s tail so a word finishing over the next shot is still in the file; the cut always uses the exact shot length.
Dead ends
- Trims without an output frame rate, and
fps=inside per-segment chains before a concat: a frame lost per shot (472 of 484); the fixes are inffmpeg-frame-exact-trim, Tips and traps. - Asking Seedance image-to-video for an aspect ratio or a seed: it takes neither; the aspect comes from the image.
Worked example
Acme Co.'s office spot, variant A (the original): 12 shots at 1920×1080, 24 fps, 484 frames. 10 shots shipped as crops. Two were restaged: shot 03 (the manager leaning in with his line) as a 16:9 edit judged by its crop, then lip-synced on H3 Max from the picked still; shot 09 (the wide office chaos) as a native 9:16 redraw plus a fix of the client's drink tumbler, whose logo the redraw had lost.


