142 lines
5.9 KiB
Markdown
142 lines
5.9 KiB
Markdown
# Launch Video Structure — Cookbook
|
||||
|
|
|
|||
|
|
Shot-by-shot template, beat-sync timing, montage recipes, and multi-aspect maps for a premium 15–60s launch film.
|
|||
|
|
|
|||
|
|
## Sound-design-leads-picture workflow
|
|||
|
|
|
|||
|
|
1. **Pick/commission the track first.** The track defines the film's length and energy.
|
|||
|
|
2. **Mark the structure in the audio**: intro, build, the **drop** (the single biggest moment), and the kick/snare transients through the montage. Note exact timecodes.
|
|||
|
|
3. **Map beats → cuts.** Hard cuts land on transients; the reveal lands on the drop frame.
|
|||
|
|
4. **Build picture to the marks.** Never finish a cut and then look for music. Score-first guarantees the reveal hits.
|
|||
|
|
5. **Mix last**: add risers into the drop, an impact/whoosh on the reveal, and let the end-card breathe (drop music low, or a clean tag).
|
|||
|
|
|
|||
|
|
## Shot-by-shot template — 30s film (scalable)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
00:00–00:03 HOOK
|
|||
|
|
Visual : single striking frame — extreme close detail / impossible motion
|
|||
|
|
Motion : slow push-in or a fast whip that resolves; NO logo yet
|
|||
|
|
Audio : sub-bass swell begins, sparse
|
|||
|
|
Cut : on first audible beat at ~03s
|
|||
|
|
|
|||
|
|
00:03–00:09 TEASE
|
|||
|
|
Visual : fragments/silhouettes of the product, never the full thing
|
|||
|
|
Motion : light leaks, partial reveals, parallax; tension rising
|
|||
|
|
Audio : riser building toward the drop
|
|||
|
|
Cut : quick cuts accelerating into the drop
|
|||
|
|
|
|||
|
|
00:09–00:13 REVEAL ← THE DROP at 00:09
|
|||
|
|
Visual : product/logo SNAPS to full on the drop frame
|
|||
|
|
Motion : scale 1.18→1.0 over 0.18s + white flash-out; settle clean
|
|||
|
|
Audio : drop hits + impact stinger on the exact frame
|
|||
|
|
Hold : let it sit ~1.2s before moving
|
|||
|
|
|
|||
|
|
00:13–00:25 FEATURE MONTAGE
|
|||
|
|
Visual : one benefit per shot, ~0.6–1.0s each (≈8–10 shots)
|
|||
|
|
Motion : bold keyword pop + one supporting visual; consistent enter/exit
|
|||
|
|
Audio : hard cuts on kick/snare; energy sustained
|
|||
|
|
Pattern: KEYWORD + UI/product moment, repeat with rhythm
|
|||
|
|
|
|||
|
|
00:25–00:30 END CARD
|
|||
|
|
Visual : logo + tagline + CTA, centered, still
|
|||
|
|
Motion : minimal — a soft settle, then hold ≥2s
|
|||
|
|
Audio : music resolves; clean sonic tag
|
|||
|
|
CTA : one action (URL or button), nothing competing
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Re-proportioning
|
|||
|
|
|
|||
|
|
- **15s**: Hook 0–2s · Tease 2–5s · Reveal 5–7s · Montage 7–12s (4–5 shots) · End card 12–15s.
|
|||
|
|
- **60s**: same hook (still ≤3s) · longer tease and a richer montage (14–16 shots, grouped in waves) · end card ≥3s.
|
|||
|
|
|
|||
|
|
The hook never gets longer — only the montage scales.
|
|||
|
|
|
|||
|
|
## Beat-synced reveal (timing detail)
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import gsap from "gsap";
|
|||
|
|
const DROP = 9.0; // measured drop timecode (s)
|
|||
|
|
const tl = gsap.timeline({ paused: true });
|
|||
|
|
|
|||
|
|
// build tension toward the drop
|
|||
|
|
tl.fromTo(".tease", { scale: 1.0, opacity: .6 },
|
|||
|
|
{ scale: 1.08, opacity: 1, duration: DROP, ease: "power1.in" });
|
|||
|
|
|
|||
|
|
// REVEAL exactly on the drop
|
|||
|
|
tl.set(".logo", { opacity: 1 }, DROP);
|
|||
|
|
tl.fromTo(".logo", { scale: 1.18 }, { scale: 1.0, duration: .18, ease: "power3.out" }, DROP);
|
|||
|
|
tl.fromTo(".flash", { opacity: .9 }, { opacity: 0, duration: .25, ease: "power2.out" }, DROP);
|
|||
|
|
tl.to(".tease", { opacity: 0, duration: .12 }, DROP);
|
|||
|
|
|
|||
|
|
// hold the reveal
|
|||
|
|
tl.to(".logo", { scale: 1.0, duration: 1.2 }); // dwell
|
|||
|
|
|
|||
|
|
audio.addEventListener("play", () => tl.play());
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Speed-ramp into the drop (Remotion time-remap idea): play the last ~0.5s of the tease faster, then hard-cut to the reveal on the drop frame for a snap.
|
|||
|
|
|
|||
|
|
## Kinetic montage shot recipe
|
|||
|
|
|
|||
|
|
Each shot: a bold keyword + one product/UI visual, ~0.6–1.0s, hard cut on the beat.
|
|||
|
|
|
|||
|
|
```css
|
|||
|
|
.feature { position:absolute; inset:0; opacity:0; }
|
|||
|
|
.feature.in { opacity:1; }
|
|||
|
|
.feature .word { display:inline-block; opacity:0; transform:translateY(26px); }
|
|||
|
|
.feature.in .word { animation: pop .32s cubic-bezier(.22,1,.36,1) forwards; }
|
|||
|
|
.feature.in .word:nth-child(2){ animation-delay:.04s }
|
|||
|
|
.feature.in .word:nth-child(3){ animation-delay:.08s }
|
|||
|
|
@keyframes pop { to { opacity:1; transform:none; } }
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
// schedule shots on measured beat marks
|
|||
|
|
const beats = [13.0, 13.8, 14.6, 15.4, 16.2, 17.0, 17.8, 18.6]; // seconds
|
|||
|
|
let i = 0;
|
|||
|
|
function loop(now){
|
|||
|
|
const t = (now - start) / 1000;
|
|||
|
|
if (i < beats.length && t >= beats[i]) { showFeature(i); i++; }
|
|||
|
|
if (i < beats.length) requestAnimationFrame(loop);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Montage discipline: keep ONE enter curve and ONE exit across all shots; vary content, never grammar. Alternate visual rhythm (full-frame ↔ detail) but keep cut cadence locked to the beat.
|
|||
|
|
|
|||
|
|
## Multi-aspect safe-area maps
|
|||
|
|
|
|||
|
|
Compose so a single master reframes to every aspect. Place hero/logo/CTA inside the smallest common safe zone — the 1:1 center square.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
16:9 1920×1080
|
|||
|
|
Safe: center 90% (96px H / 54px V margins)
|
|||
|
|
Use : YouTube, landing hero, X timeline
|
|||
|
|
|
|||
|
|
9:16 1080×1920
|
|||
|
|
Safe: text within center 80% height
|
|||
|
|
Avoid: top 12% (status/clock area), bottom 18% (caption + UI buttons)
|
|||
|
|
Use : Reels, TikTok, Shorts, Stories
|
|||
|
|
|
|||
|
|
1:1 1080×1080
|
|||
|
|
Safe: this square == the design anchor; put logo/CTA here
|
|||
|
|
Use : feed posts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Export workflow:
|
|||
|
|
|
|||
|
|
1. Build the 16:9 master with all key content inside the 1:1 center square.
|
|||
|
|
2. For 9:16, **reframe** (pan/scale per shot to keep the subject centered) — do not letterbox.
|
|||
|
|
3. For 1:1, crop the center square; verify text isn't clipped.
|
|||
|
|
4. Re-check captions/CTA against each platform's UI overlay zones before export.
|
|||
|
|
|
|||
|
|
## Final QA checklist
|
|||
|
|
|
|||
|
|
- [ ] Reveal lands on the exact drop frame, with overshoot + flash.
|
|||
|
|
- [ ] Hook holds attention in the first 3s without showing the product.
|
|||
|
|
- [ ] Every montage shot is one benefit, premium quality, on a beat.
|
|||
|
|
- [ ] End card holds ≥2s, single CTA, nothing competing.
|
|||
|
|
- [ ] 16:9 / 9:16 / 1:1 each pass safe-area and caption checks.
|
|||
|
|
- [ ] Audio mixed: riser → impact on drop → clean tag on end card.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
Nail the reveal beat and the sound-leads-picture cut, and a launch film lands. Built by **[iart.ai](https://iart.ai/?utm_source=github&utm_medium=readme&utm_campaign=ad-video-skills&utm_content=skill_footer&utm_term=launch-video)** — the AI motion agent for editable, on-brand motion graphics.
|