关于 product-launch-video
用于规划和制作产品发布视频的创意技能,面向需要宣传片、演示或预告片的创作者。它通过产品研究、美学选择和分镜流程,将产品特点转化为视觉叙事。
主要功能
- 01产品受众与信息梳理
- 02视觉风格方向设计
- 03分镜与叙事结构规划
- 04画面节奏与发布场景设计
适用场景
- 01制作产品发布或公告视频
- 02规划产品演示与功能讲解
- 03设计品牌揭晓或预告片
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ memex-lab/ product-launch-video-skill --skill product-launch-video安装后在 Claude Code 中输入/product-launch-video确认已加载。
详细介绍
产品发布视频
设计并制作电影质感十足、冲击力强的产品发布视频,让观众在亲手体验产品之前,就能感受到它的魅力。
这项技能不拘泥于某一种美学风格。视觉风格会根据产品的 DNA 进行调整——无论选择哪种方向,关键在于动画、灯光、构图和视觉叙事都必须达到顶尖水准。
核心理念
每个决策都遵循三条原则:
意图高于装饰。 每个视觉元素、动作和光源都必须有其目的。无论是极简还是繁复,都不能只是为了填充空间而存在。每个元素都要推动叙事、突出功能,或唤起特定情感。
感官转译。 优秀的发布视频能让观众感受到产品。将抽象概念(速度、安全、舒适)和物理特征(重量、质感、响应速度)转化为视觉和听觉体验。如果产品很快,观众就应该感受到速度;如果产品优雅,观众就应该在每一帧中感受到精致。
对比的巧妙运用。 出色的视频善于运用对照。通过在尺度(微观细节与开阔全景)、节奏(急促动感与慢动作揭示)、灯光(阴影与高光)和音频(静默与重低音)之间形成对比,营造动态张力,牢牢抓住观众的注意力。
适用场景
- 制作产品发布或公告视频
- 打造具有电影质感的演示或功能介绍视频
- 制作品牌揭晓视频或预告片
- 制作包含动态图形的动画产品展示
- 为任何产品规划视频结构并制作分镜脚本
- 将产品视觉素材、照片或概念转化为视频叙事
阶段 0:了解产品
在开展任何视觉创作之前,先深入了解展示对象。这将影响所有后续工作。
一次性询问用户以下问题,不要分多轮逐个提问:
- 产品 — 产品是什么?有什么功能?解决什么问题?
- 受众 — 谁会观看这段视频?开发者、消费者、投资者,还是内部团队?
- 核心信息 — 观看结束后,观众应该记住的那一件事是什么?
- 基调 — 希望观众产生什么感受?(惊叹/兴奋/平静/受启发/充满力量)
- 时长 — 视频多长?(15s 预告/30s 短片/45-60s 完整发布视频/90s+ 深度介绍)
- 素材 — 是否有徽标、产品照片、截图、录屏、品牌色或字体?
- 配音 — 视频是否需要旁白?如果需要,使用什么语言?对声音特质(性别、语气、能量水平)有偏好吗?
- 参考 — 有欣赏的视频吗?(Apple 发布会风格、Nike 产品短片、Stripe 开发者美学、Notion 的活泼风格、奢华腕表广告等)
- 发布环境 — 视频会发布在哪里?(落地页、X/Twitter、LinkedIn、YouTube、Shorts/Reels/TikTok、投资者演示文稿、内部演示。)宽高比、字幕和节奏都取决于此。
如果用户已在对话中提供相关背景信息,就从中提取答案,并确认缺失的信息。
关卡:在获得上述全部 9 个问题的答案之前(由用户提供或根据上下文推断均可),不得进入阶段 1。如果用户提供了素材,请先检查并列出所有可用素材,再规划如何在有助于叙事的地方使用每项素材。并非每项素材都必须出现,但不能无故忽略任何一项。
阶段 1:确立美学风格
这是最重要的创意决策。 美学风格必须让人感觉是专为这款产品设计的,而不是替换了徽标的通用模板。
第 1.1 步:选择视觉方向
根据产品的个性和用户偏好的语气,提出 2-3 种风格鲜明的美学方向。每种方向应包括:
-
名称 — 简短且令人印象深刻的标签(例如,“午夜精妙”“温暖模拟”“电光脉动”)
-
氛围 — 用 2-3 句话描述情感氛围
-
调色板 — 4-5 种颜色,注明十六进制代码及用途(背景、主色、强调色、文本、高亮色)
-
字体 — 从 Google Fonts 或 Fontshare 中选择展示字体与正文字体的搭配(切勿使用 Inter、Roboto、Arial 或系统字体)。字体必须体现产品的个性:
- 优雅的衬线字体(例如 Playfair Display、Cormorant)→ 奢华、编辑风格、高端
- 粗犷的无衬线字体(例如 Space Grotesk、Satoshi)→ 科技、醒目、现代
- 几何无衬线字体(例如 Plus Jakarta Sans、General Sans)→ 简洁、可靠、SaaS
- 动态或可变字体(例如 Syne、Cabinet Grotesk)→ 青年文化、创意、活泼
- 等宽或代码字体(例如 JetBrains Mono、Fira Code)→ 开发者工具、终端美学
字体就是品牌声音的视觉呈现。字体与产品个性不匹配,会削弱其他所有设计决策的效果。
-
动效特征 — 元素的运动方式(利落弹簧效果、平滑滑动、弹性反弹、电影感的缓慢显现)
-
标志性元素 — 让这段视频与众不同的唯一视觉母题(渐变网格背景、玻璃拟态卡片、粒子场、几何图案、光迹、电影感照片处理、带标注的产品特写等)
以简洁卡片的形式呈现这些内容,不要堆砌大段文字。用户可以选择一种方向,也可以混合搭配不同元素。
反面示例(“AI 垃圾内容”检查清单)
避免这些一眼就能看出是 AI 生成视频的俗套特征:
- 深色背景上的紫色渐变(头号俗套)
- 展示文本使用 Inter、Roboto 或系统字体
- 节奏千篇一律——所有元素都以相同速度和延迟进入画面
- 用表情符号充当图标
- 场景平淡、光线均匀,缺乏纵深或阴影
- 千篇一律的卡片网格,动画完全相同
- 文本只是“淡入”,与内容没有空间关联
- 背景只有纯色
关卡:向用户展示 2-3 种美学方向。用户选择或确认方向前,不得进入第 2 阶段。如果用户说“直接做吧”,就选择最符合产品个性的方向,并在继续之前明确说明你的选择。
第 2 阶段:分镜脚本
分镜脚本是蓝图。每个场景都必须证明自己有存在的必要。
必须:编写任何代码之前,先写出完整的分镜脚本。按照下方定义的架构,将其保存为项目根目录中的 storyboard.json。根据本节末尾的分镜脚本审查清单进行核验。连续的展示场景不得使用相同的布局或动画模式。
“无限视觉预算”规则
构思分镜脚本时,不要把想象力限制在用户提供的原始素材上。
- 将用户提供的二维素材(原始截图、扁平化徽标、普通照片)仅视为概念种子或基础纹理。
- 评估叙事需求。如果故事需要更多视觉变化、补充环境或 B-roll 来构建更丰富的生态,就自然地将其纳入分镜脚本。
- 但是,只有当新生成的素材确实能服务于产品叙事和视觉层级时,才引入这些素材。不要为了复杂而生成素材。
叙事弧线
产品发布视频遵循戏剧性结构,即使是短视频也不例外:
| 幕 | 目的 | 典型时长(30s 视频) |
|---|---|---|
| 钩子 | 抓住注意力。提出一个问题、制造紧张感,或以令人惊艳的画面开场。 | 3-5s |
| 亮相 | 介绍产品,即“主角时刻”。 | 5-8s |
| 展示 | 展示 2-4 个关键功能。每个功能都有专属的视觉节拍。 | 12-18s |
| 高潮 | 最令人印象深刻的时刻——全屏演示、醒目的数据,或令人惊叹的转场。 | 3-5s |
| 收尾 | Logo、标语、CTA。留下持久印象。 | 3-5s |
对于更短的视频(15s),压缩为:钩子 → 亮相 → 收尾。 对于更长的视频(60s+),扩展展示部分,加入更多功能节拍,并在收尾前增加一个“社会认同”或“愿景”节拍。
开始编写任何代码之前,先规划视频结构。分镜脚本是创意愿景与技术执行之间的约定。
发布与信息流规则
- 尽早展示产品。 对于发布、演示和社交媒体视频,观众应在前 3 秒内看到产品、产品界面或明确可辨的产品元素。只有能立即引出产品时,才允许使用抽象的钩子。
- 针对静音播放进行设计。 如果视频可能出现在信息流中,就要假设许多观众会在静音状态下观看。即使有旁白,关键主张、场景节拍、字幕和 CTA 也必须显示在屏幕上。
视频元数据
开始制作前,记录以下决策:
- 时长、FPS、分辨率——根据 Phase 0 得出
- 发布场景——根据 Phase 0 得出。注明视频将发布到哪里,以及会影响节奏、字幕、安全区域或交付内容的任何限制。
- 展示字体 + 正文字体——来自 Phase 1 的美学方向(含字重)
- 调色板——定义用途,而不只是颜色:背景、表面(凸起元素)、主色(标题)、弱化色(次要文本)、强调色(CTA/高亮)、高光色(特殊时刻)。每种用途都应有明确的使用规则。
叙事结构
选择最适合产品故事的结构:
- 问题 → 解决方案——最适合解决明确痛点的产品。以问题开场,制造紧张感;亮出产品作为答案;展示功能;以令人惊叹的时刻推向高潮;最后以 CTA 收尾。
- 愿景 → 现实——最适合面向未来的产品或新品类。描绘理想未来,承认现状差距,展示产品如何弥合差距,用功能证明价值,最后收尾。
- 蒙太奇 → 聚焦——最适合功能丰富的产品或重大更新。快速蒙太奇展示多个功能,随后放慢节奏,深入介绍 2-3 个关键功能,再以蒙太奇回归,展现整体广度,最后收尾。
- 预告片(15s 或更短)——用抽象画面引发好奇,快速闪现产品片段,最后亮出 Logo + 发布日期。
分镜脚本格式
分镜脚本保存在项目根目录的 storyboard.json 中。这是唯一可信来源——它驱动实现、旁白生成和时间安排。
{
"meta": {
"title": "Product name and video type",
"durationSec": "Total video duration in seconds",
"fps": 30,
"width": 1920,
"height": 1080,
"narrativeStructure": "problem-solution | vision-reality | montage-focus | teaser",
"fonts": {
"display": { "family": "Google Fonts / Fontshare family name", "weights": ["700"] },
"body": { "family": "Google Fonts / Fontshare family name", "weights": ["400", "500"] }
},
"colors": {
"background": "#hex - base background",
"surface": "#hex - elevated elements like cards",
"primary": "#hex - headlines and key text",
"muted": "#hex - secondary text and labels",
"accent": "#hex - CTAs and highlights",
"highlight": "#hex - special moments and emphasis"
}
},
"voice": {
"enabled": "true if video has voiceover, false if music-only",
"gender": "male | female | neutral",
"age": "young adult | middle-aged | mature",
"tone": ["Array of traits for AI voice search: confident, warm, energetic, calm, authoritative, conversational, inspiring"],
"accent": "American | British | neutral | other",
"pace": "fast | moderate | slow"
},
"scenes": [
{
"id": "Unique kebab-case scene identifier",
"act": "hook | reveal | showcase | climax | close",
"startSec": "Absolute start time. Adjacent scenes may overlap 0.2-0.5s for transitions",
"durationSec": "Scene length. If voiceover present, must fit narration at ~2.5 words/sec",
"purpose": "Why this scene exists, what it communicates",
"emotionalBeat": "What the viewer should feel",
"voiceover": "Exact narration text, or null if no VO. Narration is the timing backbone - visual elements sync to key words. Not every scene needs VO",
"layout": "Spatial arrangement of elements (sketch or describe positions)",
"elements": "Each visual element with description, size, color, position",
"animation": "Per-element: effect type, delay, duration, easing",
"camera": "Viewport movement (zoom, pan, parallax)",
"lighting": "Where light comes from, what's bright, what's in shadow",
"transitionOut": "How this scene exits to the next"
}
]
}
分镜描述必须极其具体。禁止使用“酷炫的转场”或“元素动画出现”这类含糊描述——它们会让实现过程有太多解读空间,并导致输出缺乏特色。
必须准确描述每个元素的运动方式。不要写“标题出现”,而要写:“标题从下方 30px 处以弹簧效果进入,缩放比例从 0.9→1、模糊度从 8→0,持续 0.5s;同时,一束对角光束延迟 0.3s 从左向右扫过文字表面。”不要写“卡片动画出现”,而要写:“三张功能卡片以 150ms 的间隔依次从右侧进入,每张卡片的 translateX(40)→0、opacity 0→1,并带有轻微的 3° 旋转,最终回到 0°。”
描述必须具体到足以让两位不同的开发者据此实现出几乎相同的效果。如果一种描述可能产生截然不同的视觉结果,那就还不够具体。
时长与节奏
节奏韵律。 节奏把控得当的视频会在紧张与舒缓之间交替:
FAST → SLOW → FAST → SLOW → FAST → HOLD
Hook Reveal Features Breathe Climax Close
(tense) (relief) (energy) (pause) (peak) (resolve)
发布视频最忌讳的就是从头到尾保持单一节奏。无论视觉效果多么精美,单调的节奏都会让观众昏昏欲睡。
时长分配。 根据视频总时长按比例分配时间。比例比具体秒数更重要:
- **15 秒预告:**约 20% 用于吸引注意,约 50% 展示产品片段,约 30% 揭示 Logo。没有时间介绍功能,只需制造悬念并展现品牌。
- **30 秒短片:**约 15% 用于吸引注意,约 15% 用于揭示产品,约 45% 展示功能(3 项功能),约 15% 用于高潮,约 10% 用于收尾。
- **60 秒完整发布视频:**约 8% 用于吸引注意,约 8% 用于揭示产品,约 42% 用于深入展示功能(4-5 项功能),约 17% 用于社会认同/愿景,约 12% 用于高潮,约 13% 用于收尾。
- **90 秒深度介绍:**约 9% 用于吸引注意,约 8% 用于揭示产品,约 44% 用于展示功能(5-6 项功能),约 17% 用于真实场景应用,约 11% 用于高潮,约 11% 用于收尾。
以上仅为起点,请根据产品故事进行调整。若产品有一项杀手级功能,可以将 60% 的时间用于单独展示这项功能。
场景时长取决于场景的作用:标题/Logo 揭示和数据展示较短(2-4 秒),问题陈述和功能展示需要适中时长(每项 3-5 秒),全屏演示所需时间最长(5-8 秒)。结尾的 CTA 应为 3-5 秒。
动画时长取决于元素的重要性:次要元素使用较短的淡入效果(300-500 毫秒),主要元素使用弹簧效果(400-600 毫秒),级联元素组使用交错延迟(元素间隔 80-200 毫秒),场景过渡应为 200-400 毫秒。打字机效果以每秒 30-60 个字符的速度效果最佳。
分镜审核清单
进入第 3 阶段前,请确认:
- 每个场景都有明确目的(没有凑数内容)
- 叙事弧线有张有弛
- 总时长符合目标(±1 秒)
- 明确标出了“主打时刻”
- 各场景的字体层级保持一致
- 已记录配色方案及各颜色的用途
- 如果视频有旁白:
voice对象中定义了语音配置标签,每个场景都有voiceover文本或null,且字数符合场景时长(约每秒 2.5 个词) - 开头 3 秒足够吸引人,能让观众停下滑动
- 除非有意制作预告片,否则产品、UI 或具体的产品素材会在开头 3 秒内出现
- 如果视频可能在静音状态下观看,关键旁白内容和 CTA 也会以视觉形式呈现
- 已定义场景过渡及其动机
- 没有连续两个展示场景使用相同的布局或动画模式
- 包含 3 个或更多元素的场景使用了经过设计的编排模式(而不只是交错淡入)
第 3 阶段:素材生成与增强(按需)
检查你的 storyboard.json。如果叙事需要原始输入之外的补充视觉元素,请在此处运用多模态能力来制作。如果现有素材足以满足分镜需求,则直接进入下一阶段。
- 生成素材时,首要任务是保持品牌和产品的忠实度:
- **受控变化(图生图/图生视频):**处理核心产品、Logo 或 UI 时,请将用户提供的素材用作参考。绝不能改变用户产品原有的结构特征或核心设计。
- **补充创作(文生图/文生视频):**生成全新的补充元素(例如背景画面、氛围层、环境 B-roll),这些元素无需忠实还原产品,但应与主风格提示词协调一致。
- 开始编码前,将所有处理后的素材存放在
public/目录中。
第 4 阶段:构建
第 4 阶段分为四个部分:旁白生成(如适用)、设计原则(“为什么”)、技术基础(“规则”)和实现参考(“如何做”)。
4.0 配音生成
如果分镜脚本中 voice.enabled 为 true,请在编写任何视频代码之前生成音频文件——实际音频时长将决定场景时间安排。
步骤 1:选择语音。 使用 voice 对象中的标签(gender、age、tone、accent、pace),从可用的 TTS 语音中选择最合适的语音。
步骤 2:生成各场景的音频。 对于每个 voiceover 不为 null 的场景,使用该场景的旁白文本生成语音音频文件。将每个文件保存到 public/vo-{scene.id}.mp3(例如,public/vo-reveal.mp3)。
步骤 3:测量并调整时间。 生成后,获取每个音频文件的实际时长。如果音频时长与该场景在分镜脚本中的 durationSec 不一致,请调整分镜脚本中的时间安排,使其与音频匹配——旁白是节奏安排的事实依据。将时间调整同步到后续场景的 startSec 值。
步骤 4:嵌入合成中。 在每个场景组件中,使用 Remotion 的 <Audio> 组件播放对应的配音文件,并与场景的 <Sequence> 时间安排同步。
4.1 设计原则
这些原则适用于实现过程中的所有创意决策。它们不是可有可无的润色——而是最低质量标准。
动效设计理念
动效不是装饰,而是沟通。 每个动画都必须回答:这个动效在向观众传达什么? 如果答案是“什么也没传达,只是看起来不错”,那这个动效就不对。
动效基础规则:
绝不使用线性缓动。 所有动效都必须使用贝塞尔曲线或弹簧物理效果。物体应带有质量感地加速和减速——俏皮入场时的弹性回弹、高端揭示时的厚重流畅动势,或技术产品所需的利落精准。线性动效看起来机械而缺乏生气。唯一的例外是刻意模拟机器人或机器行为。
动量应持续传递。 动效能量不会在元素之间或场景之间消失,而是会传递。如果卡片向右退出,下一个元素就应从右侧进入,延续这一方向的能量。如果一个元素缩小消失,下一个元素就应放大进入视野。这样可以形成连贯不断的流动,让每个动效都像是前一个动效的结果,而非孤立的事件。在场景内(元素 A 的退出推动元素 B 入场)以及场景之间(退出场景的动量传递给进入场景)都要遵循这一点。
启动视频动效的三大法则:
1. 每个元素至少需要三个同步变化的动效属性。 单一的 fadeIn 不算动画,只是满足最低要求的入场效果。恰当的入场需要结合多个属性,营造出真实的质感:不透明度(逐渐显现)、变换(从某处进入)和滤镜(如同摄像机拉焦般变得清晰)。同步变化的属性越多,元素就越像真实的物体,而不是出现在屏幕上的 div。
2. 每个场景至少需要三个独立的动效层。 只有内容动画的场景会显得平淡。你需要:背景层(缓慢的环境动效:渐变漂移、光晕脉动、缓慢缩放)、内容层(主要动画:弹簧入场、卡片级联、文字猛然出现)和氛围层(增添丰富感:粒子、扫光、噪声纹理)。如果场景只有内容动画,感觉就会像 PowerPoint 幻灯片。
3. 不得让连续两个场景使用相同的动效模式。 如果场景 A 使用“卡片错落着向上滑入”,场景 B 就不能也使用“卡片错落着向上滑入”。改变入场方向、动画类型、空间布局和摄像机运动方式,营造节奏感。
动效词汇——各类动效传达的含义:
| 动效 | 传达的含义 | 适用场景 |
|---|---|---|
| 带过冲的弹簧动效 | 活力、登场、重要性 | 主视觉时刻、Logo 揭示、具有冲击力的陈述 |
| 平滑滑动 | 优雅、自信、高端质感 | 产品展示、电影感转场 |
| 3D 透视倾斜 | 深度、实体感、触感 | 卡片、产品图片、重点展示项目 |
| 扫光 | 揭示、发现、高端质感 | 元素稳定后,用于增添精致感 |
| 扩散光环 | 冲击、冲击波、宣告 | Logo 揭示、关键时刻 |
| 粒子场 | 氛围、生命感、环境能量 | 背景层、贯穿整个场景 |
| 模糊 → 清晰 | 聚焦、关注、摄像机般的效果 | 入场、场景转场 |
| 漂浮/游移 | 平静、环境感、生命感 | 背景元素、空闲状态 |
| 打字机效果 | 技术感、精准、代码风格 | 开发者产品、终端文本 |
动效密度标准——生产质量的最低要求:
- 每个元素入场至少包含 3 个同步变化的动效属性(不透明度 + 变换 + 滤镜)
- 每个场景至少包含 3 个独立的动效层(背景 + 内容 + 氛围)
- 整个场景至少有 1 种持续的环境动效(漂浮、脉动、游移、粒子)
- 至少有 1 种会响应场景时序的光效/光晕效果
- 场景退出必须采用复合动画(不透明度 + 缩放 + 模糊),不能只是淡出
如果任何场景未达到这一密度,就还没有完成。
群组编排
单个元素的动画(卡片如何进入画面)只是动效设计挑战的一半。另一半是编排——多个元素如何作为一个系统协同移动。当场景需要展示许多项目(产品图片、功能、卡片、徽标、客户评价)时,空间布局和整体运动模式正是电影感展示与静态网格加淡入效果之间的区别。
编排原则:
舞台呈现。 借鉴迪士尼的 12 条原则:清晰无误地呈现每个想法。展示多个项目时,编排本身必须传达叙事——丰富性、多样性、生态系统广度或循序渐进。运动模式本身就是信息。
共同命运(格式塔)。 以相同方向、相同速度移动的元素会被视为一个统一的群组。利用这一点展示生态系统的凝聚力。有选择地打破这种一致性——只要有一个元素的移动方式不同,它便会立刻成为焦点。
错开播放,切勿同步。 切勿让一组元素同时播放动画。设置微小延迟(80-200 毫秒),让元素依次呈现,形成引导观众视线沿预设路径移动的阅读顺序。错开的方向本身也能传达空间关系(从上到下 = 层级关系,从左到右 = 顺序,从中心向外 = 辐射)。
Z 轴层级。 主视觉元素通过灵敏、有力度的动效稳居前景。辅助元素则通过缩小尺寸、降低不透明度、放慢速度和轻微模糊退入背景。无需 3D 渲染即可营造纵深感。
变形优于平移。 优先选择通过变形进入可见状态的元素(从一点放大、展开、从遮罩后显现、从某个形状变形而来),而非仅仅从画面外滑入。变形让人觉得元素一直都在那里,只是等待被揭示;平移则让人觉得它是从别处移来的。
展示编排模式:
以下是展示一组项目时常用的空间运动模式。请根据动效所传达的产品信息来选择。
| 模式 | 动效 | 传达的信息 | 最适合用于 |
|---|---|---|---|
| 无限跑马灯 | 项目沿一个方向持续滚动,无缝循环 | 数量、丰富度、生态广度 | Logo 墙、集成项、用户评价流、功能列表 |
| 反向滚动轨道 | 2-3 条水平或垂直轨道交替方向滚动 | 丰富性、多样性、动态活力 | 图片库、产品变体展示、内容丰富的产品 |
| 错落级联 | 项目从同一方向逐个进入,延迟逐渐增加 | 有序推进、逐步增强的势头 | 功能列表、分步流程、定价层级 |
| 径向迸发 | 项目从中心点向四面八方涌现 | 冲击力、可能性的迸发、发布活力 | 功能概览、生态地图、“全部包含”的时刻 |
| 轨道浮动 | 项目围绕中心主视觉元素缓慢环绕或漂移 | 生态、卫星式关系、配套阵容 | 核心产品周围的集成项、Logo 周围的功能 |
| 网格显现 | 项目以波浪模式(对角线、螺旋或逐行)在网格中出现 | 完整性、目录、全面覆盖 | 模板库、图标集、功能矩阵 |
| 透视墙 | 项目排列在倾斜平面上,向远处延伸,并缓慢漂移 | 规模、纵深、高级画廊质感 | 产品图片展示、作品集展示、媒体内容丰富的产品 |
| 扇形展开 | 项目像一手卡牌一样从堆叠状态扇形展开 | 揭示、选项、选择 | 方案对比、卡片类型、变体展示 |
| 汇聚至主视觉 | 散布的项目向内动画汇聚,组成或环绕主视觉元素 | 统一、组装、“最终汇聚一体” | Logo 显现、最终 CTA 时刻、产品组装 |
| 视差分层 | 视口平移时,不同深度的项目以不同速度移动 | 电影般的纵深感、沉浸感、高级质感 | 全屏展示场景、主视觉区域 |
编排不是可选项。 如果一个场景需要展示超过 3 个项目,就必须采用本表中的一种明确编排模式(或有充分理由的变体)。简单地让卡片网格依次淡入是最低要求,而不是目标。
视觉构图理念
每一帧都必须足以单独定格成一张海报。 如果在任意时刻暂停,画面看起来像未完成的加载状态,那么构图就失败了。
丰富的场景由多个独立的视觉层叠加而成。每一层都有明确的作用,并以自己的节奏移动,从而营造视差纵深感:
| 层 | Z 顺序 | 作用 | 动效速度 |
|---|---|---|---|
| 1. 背景渐变 | 最低 | 营造情绪与色彩氛围 | 很慢(漂移) |
| 2. 结构网格/图案 | 低 | 增添几何结构 | 静止或很慢 |
| 3. 光晕球体 / 环境形状 | 中低 | 营造纵深感与温暖感 | 慢(脉动、浮动) |
| 4. 粒子 | 中 | 增添生气与氛围 | 中等(向上漂移) |
| 5. 主要内容 | 中高 | 实际信息 | 依场景而定的入场动效 |
| 6. 光效 | 高 | 润色画面并展现关键时刻 | 事件驱动 |
| 7. 噪点纹理 | 最高 | 模拟质感与胶片质感 | 静止 |
并非每个场景都需要每一层,但少于 3 层的场景会显得平淡。仅有内容层永远不够。
构图框架与引导线
叠加图层可以营造纵深,但元素在画面中的摆放位置决定了构图看起来是经过精心设计,还是杂乱无章。
使用结构网格。 将关键元素锚定在三分法、黄金比例或动态对称线的位置,而不是正中央。将标题放在上三分线处,并把产品图片锚定在右下方的交点,会让画面更具构图感。相同元素若居中摆放,就会显得像默认的 PowerPoint 布局。即使为了前卫或混乱的效果而刻意打破网格,也必须让底层的结构逻辑清晰可见——只有当规则清晰可见时,打破规则才有效。
构建引导线。 利用场景中已有的几何元素——光束、装饰线条、卡片边缘、渐变方向、粒子轨迹、产品自身的轮廓——绘制看不见的路径,直接指向视觉焦点。观众的视线会不自觉地沿着这些路径移动。如果画面中没有几何元素指向焦点,那么构图就缺少了刻意设计的层次。
用光讲故事
灯光不只是为了让画面清晰可见——它还是引导视线和营造氛围的主要工具:
- 用光雕塑。 使用渐变、光晕和阴影,为元素营造纵深感与立体感。产品图片后方的微妙径向渐变,会让它看起来像处于聚光灯下。
- 引导视线。 画面中最亮的点或对比度最高的区域,会迫使观众将目光投向核心功能所在之处。
- 忠实呈现材质。 如果展示玻璃,就呈现折射失真;如果展示屏幕,就呈现像素光芒;如果展示金属,就呈现镜面高光。让纹理变得触手可及。
- 光线呼应叙事。 在揭示和高潮时刻,光晕强度应逐步增强。关于“隐私”的场景可以使用柔和、内敛的光线;关于“力量”的场景则可以使用锐利、定向的光束。
作为动态元素的排版
视频中的文字不是静态的——它是场景中的实体对象。排版必须像对待其他元素一样,严格遵循动态设计原则:
- 切勿只让文字淡入。 至少要将淡入、滑动和模糊组合起来。标题可使用弹簧或缩放入场。强调性陈述可使用文字砸入效果(高刚度且带过冲的弹簧)。对文字只使用
fadeIn,是动态设计敷衍了事最常见的表现。 - 动态文字可以滑动、缩放、旋转、模糊淡入或逐字显示。选择与词义相符的动态效果——表达“速度”的词应快速入场;表达“平静”的词则应缓慢飘入。
- 空间文字与环境互动——投下阴影、被产品部分遮挡,或以透视效果呈现在表面上。
- 通过时序建立层级。 最重要的文字最先出现,停留时间也最长。辅助文字稍后出现,并更早退出。
4.2 技术基础(Remotion)
项目结构
src/
├── index.ts # registerRoot() entry point
├── Root.tsx # Composition definitions
├── index.css # Global styles, font loading
├── constants.ts # Colors, timing, shared config
├── utils/
│ └── animations.ts # Reusable animation functions
├── components/ # Shared visual components (backgrounds, containers, atmosphere, etc.)
└── scenes/ # One file per scene, named after the storyboard
关键规则
-
所有动画均来自
useCurrentFrame()——禁止使用 CSS 过渡、CSS 动画和 Tailwind 动画类。它们无法在视频输出中正确渲染。 -
以秒为单位思考,以帧为单位编写代码:
const { fps } = useVideoConfig(); const startTime = 2.5; // seconds const startFrame = startTime * fps; // frames
主合成模式
定义一个时间线对象,将场景名称映射到以秒为单位的开始时间和时长,然后将每个场景渲染为 <Sequence>:
export const MainVideo: React.FC = () => {
const { fps } = useVideoConfig();
const timeline = {
hook: { start: 0, duration: 4 },
reveal: { start: 4, duration: 5 },
// ...
};
return (
<AbsoluteFill>
{Object.entries(timeline).map(([key, { start, duration }]) => (
<Sequence key={key} from={start * fps} durationInFrames={duration * fps} premountFor={fps}>
{/* Render the corresponding scene component */}
</Sequence>
))}
</AbsoluteFill>
);
};
场景组件模式
这展示了如何在实践中应用动态密度标准。关键结构要点如下:
- 背景层 ——持续的环境动态效果(光晕脉动、渐变漂移等)
- 内容层 ——每个元素入场时,都将不透明度、变换和滤镜结合使用
- 氛围层 ——粒子、光束、噪点纹理
- 复合场景退场 ——在根容器上同时应用不透明度、缩放和模糊
export const MyScene: React.FC = () => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
const sceneDurationSec = 5;
// --- Background layer: continuous ambient motion ---
const glowScale = 1 + Math.sin((frame / fps) * 0.8) * 0.05;
// --- Content layer: entrance with 3 properties (opacity + transform + filter) ---
const titleOpacity = interpolate(frame, [0, 0.4 * fps], [0, 1], { /* clamp + easing */ });
const titleY = interpolate(frame, [0, 0.5 * fps], [40, 0], { /* clamp + easing */ });
const titleBlur = interpolate(frame, [0, 0.4 * fps], [8, 0], { /* clamp + easing */ });
// --- Compound exit: opacity + scale + blur ---
const exitStart = (sceneDurationSec - 0.4) * fps;
const exitEnd = sceneDurationSec * fps;
const exitOpacity = interpolate(frame, [exitStart, exitEnd], [1, 0], { /* clamp */ });
const exitScale = interpolate(frame, [exitStart, exitEnd], [1, 0.96], { /* clamp */ });
const exitBlur = interpolate(frame, [exitStart, exitEnd], [0, 6], { /* clamp */ });
return (
<AbsoluteFill style={{
opacity: exitOpacity, transform: `scale(${exitScale})`, filter: `blur(${exitBlur}px)`,
}}>
{/* Background layer */}
{/* Content layer — elements use opacity + transform + filter */}
{/* Atmosphere layer — light effects, particles, noise, etc. */}
</AbsoluteFill>
);
};
缓动与弹簧参考
运动的情感质感来自曲线,而非时长。根据运动应带来的感受选择缓动:
| 感受 | 贝塞尔曲线 | 最适合 |
|---|---|---|
| 利落登场 | (0.16, 1, 0.3, 1) | 功能卡片、文本、快速呈现 |
| 平滑滑动 | (0.25, 0.1, 0.25, 1) | 产品展示、主视觉时刻 |
| 戏剧性登场 | (0.7, 0, 0.3, 1) | Logo 展示、高潮时刻 |
| 轻柔漂移 | (0.4, 0, 0.6, 1) | 背景元素、环境动效 |
弹簧配置:
| 感受 | 配置 | 最适合 |
|---|---|---|
| 精准、不超调 | damping: 200, stiffness: 300, mass: 1 | 开发者工具、技术产品 |
| 轻柔弹跳 | damping: 10, stiffness: 200, mass: 0.5 | 消费类应用、友好型产品 |
| 厚重、高端 | damping: 200, stiffness: 80, mass: 2 | 奢侈品、高端产品 |
| 弹性、活泼 | damping: 6, stiffness: 180, mass: 0.4 | 游戏、社交、年轻品牌 |
4.3 实现参考
动效工具函数
为常见动效需求构建可复用的基础函数:淡入/淡出、滑动、缩放、模糊入场、弹簧弹出、交错延迟、浮动、脉冲、旋转、打字机效果。每个函数从 Remotion hooks 获取 frame 和 fps,并返回一个可应用于样式的数值。
代表性实现:
import { interpolate, spring, Easing } from "remotion";
const EASE_OUT_EXPO = Easing.bezier(0.16, 1, 0.3, 1);
export function fadeIn(
frame: number, fps: number, delaySec: number = 0, durationSec: number = 0.4
): number {
const start = delaySec * fps;
const end = start + durationSec * fps;
return interpolate(frame, [start, end], [0, 1], {
extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: EASE_OUT_EXPO,
});
}
export function springPop(
frame: number, fps: number, delaySec: number = 0,
config?: { damping?: number; stiffness?: number; mass?: number }
): number {
const delayFrames = Math.round(delaySec * fps);
if (frame < delayFrames) return 0;
return spring({
frame: frame - delayFrames, fps,
config: { damping: config?.damping ?? 12, stiffness: config?.stiffness ?? 200, mass: config?.mass ?? 0.5 },
});
}
复合动画模式
这些模式将多个基础函数组合起来,用于常见的产品发布视频场景:
主视觉登场(产品展示):
function useHeroEntrance(frame: number, fps: number, delaySec: number = 0) {
return {
opacity: fadeIn(frame, fps, delaySec, 0.6),
scale: scaleIn(frame, fps, delaySec, 0.9, 1, 0.7),
blur: blurIn(frame, fps, delaySec, 0.6, 8),
y: slideIn(frame, fps, delaySec, 20, 0.6),
};
}
// Usage:
const hero = useHeroEntrance(frame, fps, 0.5);
<div style={{
opacity: hero.opacity,
transform: `scale(${hero.scale}) translateY(${hero.y}px)`,
filter: `blur(${hero.blur}px)`,
}}>
功能卡片级联:
function useCardCascade(frame: number, fps: number, index: number, baseDelay: number = 0.3) {
const delay = stagger(index, baseDelay, 0.15);
return {
opacity: fadeIn(frame, fps, delay, 0.4),
y: slideIn(frame, fps, delay, 30, 0.4),
scale: scaleIn(frame, fps, delay, 0.95, 1, 0.4),
};
}
文字猛击(醒目陈述):
function useTextSlam(frame: number, fps: number, delaySec: number = 0) {
const scale = springPop(frame, fps, delaySec, { damping: 15, stiffness: 300, mass: 0.8 });
const opacity = fadeIn(frame, fps, delaySec, 0.15);
return { scale, opacity };
}
环境漂移(背景元素):
function useAmbientDrift(frame: number, fps: number, seed: number = 0) {
return {
x: float(frame, fps, 15, 4, seed * 90),
y: float(frame, fps, 10, 5, seed * 120 + 45),
rotation: rotate(frame, fps, 0.02 + seed * 0.01),
scale: pulse(frame, fps, 0.03, 3 + seed),
};
}
场景退场(复合):
const sceneDurationSec = 5;
const exitOpacity = fadeOut(frame, fps, sceneDurationSec - 0.3, 0.3);
const exitScale = interpolate(
frame,
[(sceneDurationSec - 0.4) * fps, sceneDurationSec * fps],
[1, 0.95],
{ extrapolateLeft: "clamp", extrapolateRight: "clamp" }
);
<AbsoluteFill style={{ opacity: exitOpacity, transform: `scale(${exitScale})` }}>
视觉模块
为图层堆栈中的每种视觉角色构建可复用的 React 组件。具体组件取决于产品和美学方向——选择合适的组件,无需在每个视频中都构建全部组件。
背景模块(第 1-2 层):
- 动态渐变背景(中心点漂移的多点径向渐变)
- 结构网格或图案叠加层(低不透明度的几何线条)
- 带暗角或径向渐隐的纯色背景
- 全出血产品摄影,配合 Ken Burns 效果(通过对
scale和translate使用interpolate实现缓慢缩放和摇移)
景深模块(第 3-4 层):
- 浮动发光球体(带
filter: blur()的脉冲径向渐变,通过sin/cos漂移) - 环境粒子场(大量位置经过设定的小元素,各自独立漂移)
- 焦外圆斑(大而柔和、失焦的光斑,营造摄影景深效果)
- 关键元素下方的细微阴影层
内容容器(第 5 层):
- 磨砂玻璃卡片(
backdropFilter: blur()、半透明背景、细微边框) - 数字产品设备外框(包裹屏幕截图的手机/笔记本电脑/浏览器边框)
- 实体产品的样式化相框(阴影、圆角、轻微旋转)
- 规格/标注标签(小号文本加指向产品细节的线条,用于实体产品特性)
- 统计数据/指标展示(用于展现效果的时刻,显示大号数字、单位和标签)
氛围模块(第 6-7 层):
- 光效(光束、辉光、扩展光环、边缘高光、色彩变化)
- 胶片颗粒/噪点纹理(内联 SVG
feTurbulence,置于最顶层,mixBlendMode: "overlay",不透明度极低,为 0.03-0.05) - 色彩覆盖层(随时间改变色相的半透明色彩层)
每个模块都应支持自定义属性(颜色、尺寸、速度),并通过 useCurrentFrame() 驱动所有动画。并非每个视频都需要所有模块,但每个场景至少需要包含 Visual Composition Philosophy 图层表中的 3 个图层。
构图技巧——按照图层表叠放模块。结构示例:
<AbsoluteFill>
{/* Layer 1: Background — animated gradient, photo with Ken Burns, or color wash */}
<BackgroundModule />
{/* Layer 2: Structural pattern (optional) */}
<PatternOverlay />
{/* Layer 3: Depth elements — glow orbs, bokeh, or shadow layers */}
<DepthElements />
{/* Layer 4: Ambient particles or floating elements */}
<AmbientLayer />
{/* Layer 5: Main content — product visuals, text, cards, specs */}
<div style={{ position: "relative", zIndex: 10 }}>{/* ... */}</div>
{/* Layer 6: Light effects — beams, sweeps, color washes */}
<LightEffects />
{/* Layer 7: Film grain / noise texture */}
<NoiseOverlay />
</AbsoluteFill>
转场
转场最能暴露业余视频的痕迹。出色的转场浑然天成,能将观众的视线从一个想法自然引向下一个,而不破坏沉浸感。
原则:
- 动机明确的运动。 摄像机/视口不会为了动而动。每次转场都应像是上一场景动势的自然延续。
- 动量传递。 上一场景的运动方向应延续到下一场景的入场方式。如果场景 A 中的元素向左移出,那么场景 B 中的元素就应从右侧进入。
- 匹配剪辑。 利用形状、色彩或运动的连续性衔接场景。
转场目录:
| 转场 | 感受 | 适用场景 | 不适用场景 |
|---|---|---|---|
| 交叉淡化 | 中性、通用 | 视觉风格不同的场景之间 | 布局相似的场景之间(会产生重影) |
| 缩放溶解 | 高级、电影感 | 产品展示、从抽象到具体 | 高能量蒙太奇 |
| 方向擦除 | 充满活力、向前推进 | 功能展示、进度呈现 | 平静或高级感时刻 |
| 缩放穿越 | 聚焦、深入 | 从功能概览深入细节 | 无关场景之间 |
| 色彩擦除 | 大胆、强化品牌 | 不同配色方案之间 | 微妙的转场 |
| 硬切 | 出人意料、冲击力强 | 蒙太奇、喜剧节奏 | 需要流畅感时 |
| 模糊转场 | 梦幻、电影感 | 健康/舒缓类产品、从抽象到具体 | 高能量序列 |
转场时长:
- 快速(0.2-0.3s): 充满活力、蒙太奇风格
- 中等(0.3-0.5s): 标准、专业
- 缓慢(0.5-0.8s): 电影感、戏剧性、高级感
转场反面示例:
- 不要每次场景切换都使用相同的转场——要有所变化
- 不要在重要内容呈现时进行转场——场景变化时,观众不应还在阅读文字
- 短场景(2-3s)不要使用复杂转场——交叉淡化或硬切更合适
- 不要违背内容本身——布局相似时应使用方向擦除或硬切,而不是交叉淡化
阶段 5:渲染前审查
渲染前,请核查每一项。这是最终质量关卡。
分镜与叙事
- 每个场景都有明确目的(没有凑数内容)
- 叙事弧线具有张力,也有释放
- 总时长符合目标(±1s)
- 明确标出“主角时刻”
- 开头 3 秒足够吸引人,能让观众停下滑动
- 高潮前留出喘息空间——片刻静止能放大最重要的视觉瞬间
动效质量
- 全程不使用线性缓动——所有运动都使用贝塞尔曲线或弹簧物理效果
- 每个元素入场时至少同时使用 3 种运动属性(不透明度 + 变换 + 滤镜)
- 每个场景至少有 3 个独立的运动层(背景 + 内容 + 氛围)
- 每个场景至少有 1 种持续的环境动效(浮动、脉冲、漂移、粒子)
- 每个场景至少有 1 种会随时间变化的光效/辉光效果
- 场景退场应使用复合动画(不透明度 + 缩放 + 模糊),而不只是淡出
- 不要让连续两个场景使用相同的动画模式
- 包含 3 个或更多项目的场景应采用有意设计的编排模式(跑马灯、反向滚动、径向爆发等)
- 错开入场时间——元素以 100-200ms 的间隔依次出现,形成阅读顺序
- 在元素和场景之间传递动量——运动方向与动势应连贯一致
- 用匹配剪辑衔接场景——利用上一场景的动量带动下一镜头
视觉构图
- 每一帧暂停后都能用作海报(构图有力)
- 视觉层次清晰——观众能立刻知道该看哪里
- 关键元素锚定在结构网格线(如三分法、黄金比例)上,而非随意居中
- 每个场景至少有一条引导线(光束、边缘、渐变方向)指向焦点元素
- 文字清晰易读:标题至少 32px,正文至少 20px,对比度高
- 适配信息流阅读:在手机信息流尺寸下,文字仍清晰易读,而不只是全屏桌面预览时可读
- 如果目标平台通常会静音自动播放,则将字幕或关键信息叠加层直接融入构图
- 每一帧中最明亮或对比度最高的点是焦点元素
- 各场景的排版层次保持一致
- 字体选择符合产品个性(衬线体↔奢华,哥特体↔科技,等宽体↔开发者)
- 记录配色方案及其用途
- 如果使用了 AI 生成的素材,无论空间呈现或渲染效果提升得多么显著,用户原始产品的核心身份、结构完整性和品牌辨识度都必须毫无损伤地保留。
转场与节奏
- 转场有明确动机,而非随意安排
- 视频节奏有变化——快慢交替,而非单调平缓
- 静止画面停留时间不得超过 2 秒——画面始终要有元素在运动
- Logo 和品牌元素在恰当的时机出现(不宜过早,也不能遗漏)
配音(如适用)
- 所有配音音频文件均已生成并保存到
public/ - 场景时长与实际音频时长相符(以音频时长为准)
- 每个包含配音的场景在其实现中都有对应的
<Audio>组件
阶段 6:渲染并交付
# Preview in browser
npx remotion studio
# Example: render a representative frame for layout audit
npx remotion still [CompositionId] out/frame-check.png --frame 60
# Render final video
npx remotion render [CompositionId] out/video.mp4
# Render at specific quality
npx remotion render [CompositionId] out/video.mp4 --codec h264 --crf 18
在完整渲染之前,至少从每个场景导出一帧代表性画面,并以图像形式检查。先修复布局、裁切、重叠、文字截断和对比度问题,再花时间渲染完整视频。
渲染完成后,告知用户:
- 文件位置和大小
- 时长和分辨率
- 如何使用不同设置重新渲染
- 如何修改:哪些文件控制颜色(常量)、时间安排(主合成的 Sequence 布局)和内容(各个场景组件)