发布视频
制作一支高端、高能量的15-60秒发布影片,旨在抓住用户眼球并促成转化。构建经典的叙事弧线——钩子 → 预告 → 揭幕 → 功能蒙太奇 → 结尾CTA——与音乐节拍同步剪辑,并为每个平台比例导出。
使用场景
- 产品发布、功能宣布、预告片、炒作视频(15-60秒)。
- 为着陆页制作的“预热”英雄视频。
- 与节拍同步的揭幕视频,品牌时刻精准落在音乐高潮上。
叙事弧线
| 节拍 | 任务 | 30秒视频典型时长 |
|---|---|---|
| 钩子 (0–3秒) | 一个引人注目的画面/动作,阻止用户滚动 | 0–3秒 |
| 预告 | 暗示产品;制造好奇心,与节拍同步 | 3–9秒 |
| 揭幕 | 产品/标志在音乐高潮时出现 | 9–13秒 |
| 功能蒙太奇 | 快速、动感,每个镜头展示一个优点 | 13–25秒 |
| 结尾卡 | 标志 + 标语 + CTA,干净地保持 | 25–30秒 |
按相同比例缩放至15秒(更紧凑)或60秒(更长的蒙太奇,但钩子绝不延长)。
两条不可协商的规则
- 音效设计主导画面。 先锁定音轨,标记节拍和高潮点,然后根据这些标记剪辑画面。永远不要为已完成的剪辑配乐——揭幕必须准确落在高潮点上,而不是附近。
- 质量优先于数量。 几个完美的镜头胜过许多平庸的镜头。剪掉任何不够优质的镜头。
与节拍同步的揭幕
在音频中找到高潮的确切时间码,然后将揭幕时机设定为品牌标记在那个画面上完全显现,并带有微小的过冲以增强冲击力。
import gsap from "gsap";
const DROP = 9.0; // 秒,从音轨测量
const tl = gsap.timeline({ paused: true });
// 预告在揭幕前制造张力
tl.to(".tease", { opacity: 1, scale: 1.05, duration: DROP, ease: "power1.in" })
// 揭幕在高潮画面上“咔哒”一声出现
.set(".logo", { opacity: 1 }, DROP)
.fromTo(".logo", { scale: 1.18 }, { scale: 1.0, duration: .18, ease: "power3.out" }, DROP)
.fromTo(".flash", { opacity: .9 }, { opacity: 0, duration: .25 }, DROP); // 白色闪烁
audio.addEventListener("play", () => tl.play());
在瞬态信号上剪辑,而不是固定网格:最硬的剪辑放在底鼓/军鼓的击打上;在进入高潮时加快速度(时间重映射),然后硬切退出。
动感功能蒙太奇
每个镜头展示一个优点,时长约0.6–1.0秒,在节拍上进行硬切。每个镜头 = 一个粗体关键字 + 一个单一支持视觉元素。
.feature { opacity:0; }
.feature.in .kw { animation: pop .35s cubic-bezier(.22,1,.36,1) forwards; }
.feature.in .word { display:inline-block; }
@keyframes pop { from { opacity:0; transform:translateY(24px) } to { opacity:1; transform:none } }
// 根据从音轨测量的节拍标记驱动镜头
const beats = [13.0, 13.8, 14.6, 15.4, 16.2]; // 秒
beats.forEach((t, i) => scheduleAt(t, () => showFeature(i)));
在整个蒙太奇中保持统一的动态语言(相同的进入曲线,相同的退出),这样速度感会表现为自信,而不是混乱。
结尾卡
保持标志 + 标语 + CTA 静止且清晰至少2秒。不要用复杂的运动干扰CTA;让品牌沉淀下来。将品牌时刻落在最强的一个剩余节拍上,然后是一个清晰的按钮/网址。
多宽高比导出
构图时预留中心安全区域,使得一个主版本可以干净地裁剪成所有宽高比。
| 宽高比 | 用途 | 分辨率 | 安全区域 |
|---|---|---|---|
| 16:9 | YouTube、着陆页英雄、X | 1920×1080 | 保持关键内容在中心90%范围内 |
| 9:16 | Reels、TikTok、Shorts、Stories | 1080×1920 | 文本在中心80%高度内;避免顶部12%/底部18%(UI) |
| 1:1 | Feed帖子 | 1080×1080 | 16:9画面的中心正方形 |
将英雄/标志/CTA设计在 1:1中心正方形 内,以确保它在所有裁剪中都能幸存。渲染16:9主版本,然后从同一个项目中重新取景(而不仅仅是添加黑边)9:16和1:1版本。
输出检查清单
- 音轨先行锁定;揭幕准确落在高潮点上。
- 钩子赢得了最初3秒钟。
- 蒙太奇:每个镜头一个优点,在节拍上硬切,统一的动态语言。
- 结尾卡保持≥2秒,并有一个清晰的CTA。
- 16:9 + 9:16 + 1:1导出,关键内容在中心安全区域内。
- 仅使用优质镜头——任何平庸之选都无法通过剪辑。
交付与验证(渲染静态帧 → MP4)
打包辅助脚本 (
scripts/):使用scripts/contact-sheet.sh sheet.png f-hook.png f-mid.png f-end.png平铺你的静态帧,然后使用scripts/probe-mp4.sh out.mp4 [WxH] [fps]验证编码。参见scripts/README.md。
如果发布影片是用Remotion构建/渲染的,将其视为重层级:注册一个 <Composition>(+ zod schema + defaultProps),所有值都通过 useCurrentFrame() 驱动——不使用GSAP时间线 / 音频事件回调 / Date.now() / Math.random() 在渲染时(将节拍+高潮时间码烘焙到props中)。交付物 = 每个宽高比的渲染输出 out/*.mp4(加上项目本身)。
验证循环 — 渲染静态帧 → 检查 → 编码。 使用 已交付的 props(真实标题/标语/CTA),而不仅仅是 defaultProps,来抽样检查叙事弧线。
# 从钩子到揭幕到结尾卡的精确帧静态图
npx remotion still Launch out/f-hook.png --frame=24 --props=props/launch.json # 钩子赢得前3秒
npx remotion still Launch out/f-reveal.png --frame=270 --props=props/launch.json # 标志在高潮画面上“咔哒”出现
npx remotion still Launch out/f-end.png --frame=899 --props=props/launch.json # 结尾卡:标志+标语+CTA,清晰保持
# 检查每一项:保真度(产品/标志、标语、CTA文本准确、品牌颜色正确、揭幕在高潮画面)
# 以及瑕疵(文本溢出、超出画布、CTA在9:16底部三分之一处、缺少字体、闪烁画面卡住)
多宽高比 — 在编码所有版本之前,先在每个宽高比下验证主版本。 一个重取景的错误(英雄被推出安全区域)会在每个宽高比中重复出现;一次性捕获它。
for ar in 16x9 9x16 1x1; do # 按宽高比检查揭幕和结尾卡
npx remotion still Launch "out/reveal-${ar}.png" --frame=270 \
--props=props/launch.json --props-merge="{\"aspect\":\"${ar}\"}"
done
# 所有宽高比的静态图都干净?→ 然后编码每个:
for ar in 16x9 9x16 1x1; do
npx remotion render Launch "out/launch-${ar}.mp4" --props=props/launch.json --props-merge="{\"aspect\":\"${ar}\"}"
done
npx remotion render Launch out/demo.gif --codec=gif --props=props/launch.json # README演示
在完成之前:
npx remotion still在钩子/揭幕/结尾卡处渲染干净——没有错误,没有缺少字体/资源。- 标志/标语/CTA文本精确,品牌颜色正确;揭幕落在高潮画面上;关键内容在中心安全区域内,远离9:16底部三分之一。
- 仅由帧驱动——没有GSAP/音频回调时间控制、
Date.now()或Math.random()(节拍/高潮已烘焙到props中)。 - 已交付的props正确渲染(不仅仅是
defaultProps);结尾卡保持≥2秒并有一个CTA。 - 在编码前已在16:9 + 9:16 + 1:1中验证主版本;MP4可播放;(可选)为README生成GIF。
参考文件
references/launch-structure.md— 一个完整的逐镜头模板,包含30秒影片的时间码(可缩放至15-60秒)、节拍同步揭幕时序、动感蒙太奇镜头配方、音效设计主导画面工作流程,以及16:9 / 9:16 / 1:1的详细多宽高比安全区域图。