SaaS 产品演示视频
使用 Remotion 构建一段简短的产品宣传片,使其与配乐节拍同步,采用产品自身的品牌风格,并使用产品真实的屏幕截图。同样的流程适用于横向演示、纵向短视频、带 B 卷图层的影片、没有现成界面可录制的产品,以及需要做系列修改的现有影片。
制作一个通用的动态图形短片很容易,但也容易被忽视,由 AI 生成的短片也是如此,用户现在一眼就能认出来。区分这类影片与真正佳作的要素,必须在任何场景存在之前就收集齐备:产品的真实资产和屏幕截图、借鉴自用户喜欢的参考影片的外观、从配乐中提取的节拍网格,以及影片要传达的一个核心视觉论点。该技能的其余部分只是基于这些基础的工艺。
从正确的分支开始
- 全新影片。 需求收集、外观、脚手架、节拍、创意简报、检查点、构建:遵循下面的流程,推理过程见
references/workflow.md。 - 现有影片。 首先阅读
docs/video/notes.md(特别是每个“决策”条目)、创意简报和最新的交接文件,分别检查已接受的渲染结果和源文件,在动手之前先对请求进行分类:小调整使用开关控制,重新换皮需保持所有时间点和动效不变,重建则需要先制作故事板或测试床。详见references/iteration-playbook.md中的“首先对请求进行分类”。对于小修小补,不要重复需求收集流程或重新确定外观风格。 - 仅评审或规划。 检查渲染结果(
references/self-check.md、references/taste-review.md),返回一个排好序的列表;不构建任何东西。说明每个发现所依据的证据:一张静帧、一个测量值或回放观测(你不能做回放)。 - 旁白决定节奏。 脚手架是由音乐驱动的。如果影片需要配合画外音剪辑,其事件需要手动放置(在时间文件中设置
BEAT_SYNCED = false),并且创意简报会明确指出剪辑点不会落在音乐上;在开始前必须说明这一点。
定义完成
- 一个 Remotion 项目,包含一个主合成和每个场景一个调试合成;每一个候选变更都由一个开关控制,其默认值已发布的外观。
docs/video/brief.md:输入、外观、一句话的视觉论点、逐场景的脚本、所有假设。beats.json和一个时间文件,每个场景都从中读取帧数,这样更改一个节拍索引就能重新编排整部影片。- 一个高清 MP4 文件(1920x1080 或 1080x1920),带有颜色标签、一个缩略图静帧,以及在客户验收后提供的一个 4K 渲染版本(带有高清版本的音频)。
- 每个场景在你自己通过渲染静帧检查过后,再交给用户查看;统计过字数;告知客户你检查了哪些内容,并且没有人观看过完整影片。
docs/video/notes.md包含每一次修改浪潮和每一个决策,以及在会话结束时(如果还有未完成的工作)附带的一个交接文件。- 可选:四到八个音效,通过主合成的
sfxprop 控制,精确地放置到它们的事件上,并与主合成一起提供一个Master-NoSfx渲染版本,让用户通过听觉来选择。
流程
- 设置。 检查工具,并记录缺失的内容。详见
references/setup.md。 - 需求收集。 将问卷作为一条消息一次性发送,并记录回答;获取今日的网站截图,而不是凭记忆。详见
references/asset-intake.md、references/product-ui-from-site.md。 - 外观和论点。 将两到三个参考视频分解为转场动词、节奏和标志性动效;写下影片要论证的一句话以及一个标志性动效。详见
references/reference-video-vibe.md、references/creative-direction.md。 - 脚手架。 将
assets/scaffold/复制到项目中并安装依赖。详见references/project-scaffold.md。 - 节拍。 在配乐上运行
scripts/detect-beats.py,将结果写入beats.json(覆盖脚手架中的占位符),并根据其可靠性判断结果采取行动。详见references/beat-sync.md。 - 创意简报和初始场景。 编写
docs/video/brief.md,构建场景 1 和第一个展示产品的场景,通过静帧检查它们,然后停在下方的检查点。 - 完整构建。 构建其余场景和主合成,每个场景都通过静帧检查,统计字数,运行注意力检查。然后,如果影片需要,再添加音效层:
references/sound-effects.md,这应在第一轮修改之前进行,这样每个音效提示都落在已经停止运动的帧上。 - 修改浪潮与交付。 分批收集用户的反馈,在开关后面修复问题,使用主合成的标志进行渲染,然后导出。如果用户希望重做某个场景,则制作两到四个带有音乐的方向性测试床,并排全尺寸展示,由用户选择。如果一次修改浪潮需要重建故事,则首先制作故事板(每帧画面上的所有文字和一行说明),在得到批准后再编写代码。长时间的会话结束时,需提供一个交接文件。详见
references/iteration-playbook.md、references/render-export.md、assets/prompt-templates/handoff.md。
唯一的检查点
在完整构建之前,仅停下来等待用户批准一次:当开场场景和第一个产品场景已经渲染完成,它们之间的剪辑和音乐也已就位,并且创意简报已经编写完毕。将此片段和创意简报中的脚本一起展示,并询问三个问题:外观是否合适?文案是否准确?与音乐的配合是否流畅?
需要两种场景,因为它们的失败模式不同。文字标题型的开场展示的是外观。产品场景展示的是屏幕上的信息量和事件如何在节拍上落位,而这两点正是用户在完整构建后才第一次看到时最常否决的。如果用户稍后需要自行审查,可以制作一个包含视频和脚本的本地 HTML 页面,将两者放在一起;assets/prompt-templates/checkpoint.html 是一个很好的起点。
之所以只设置一个检查点,并且放在这里:人们对一个渲染结果的判断远比一个文档要准确得多。在这个阶段发现错误的外观或节奏,只需重做两个场景,而非整部影片。检查点之前的所有步骤都是可逆的,所以无需就文档请求审批。在一次消息中完成需求收集,并在用户没有偏好的地方做出合理选择,然后将每个选择写入创意简报的假设列表中,以便用户可以轻松否决。通过检查点后,先构建整部影片,然后再向用户询问反馈意见。在已批准的风格框架内进行调整,无需第二个检查点;但改变风格则需要。
如果没有人可以回答(无人值守运行),则根据所提供的材料完成需求收集,在创意简报中列出每一个假设,并且仍然在检查点处停止。在未经批准的外观基础上构建整部影片,正是这个检查点旨在避免的高成本错误。唯一的例外是,一份交接简报明确指示渲染检查点并继续构建:那么渲染它,为用户打开,然后继续构建,因为一个停在检查点而无人回应的会话将交付不出任何成果。
模板风格是敌人
客户用一个词就能说出模板化风格的名字(“Claude 风格”、“Canva 风格”、“廉价感”),它是一组默认值:奶油色画布配上衬线字体,发光和模糊效果,标题中的一个斜体或彩色单词,眉标签,轮辐式图表,剪贴画风格的图形,当真实界面就在网站上时却使用一个虚构的仪表盘,每个场景一个花招,每个节拍都有元素弹出,无聊的浮动动画,淡入并静止的文本。即使每个颜色都来自品牌文件,影片仍然会显得千篇一律。完整列表、每个被替换的项以及“一招鲜”规则,都在 references/creative-direction.md 中的“什么是模板风格”部分。在第一个场景之前阅读它,并在任何“提升高级感”的优化之前再次阅读。
一部影片即使避开了上述所有列表,仍然可能看起来像一套干净的幻灯片:相同的标题放在一块色板上,没有共享的世界观,没有情绪变化曲线,强调效果用在所有地方。当连续两轮润色后得到的反馈都是“更好,但还不是想要的效果”时,停止调整动效,并对静帧进行一次盲审式艺术指导评估(references/iteration-playbook.md 中的“当润色轮次达到平台期时”)。在产生这个问题的影片中,解决方案是一个共享的 3D 世界,通过情绪变化来推进情节,将排版作为构图元素,以及每帧画面只使用一个强调效果(references/creative-direction.md、references/3d-world.md)。
剪辑帧必须构图完整
每次剪辑都落在一个反拍上,并且它落定时的帧必须经过构图:卡片及其第一行、条形图或标题,而不是一个空矩形在后续节拍中慢慢填充。一个经过构图的元素就足够了:剪辑时卡片已经就位,旁边的标题可以在后续节拍中升起。初稿和场景代理往往将第一行放在剪辑后的第一个节拍上,结果导致影片连续六个场景都以空白开场。关于规则、用于计数器和芯片场的预卷技巧,以及连接场景的摄像机运动,都在 references/animation-patterns.md 中。
动效贯穿剪辑,文本向一个方向运动
来自对影片总体满意的客户的两条反馈:“不够平滑”和“文本动画很无聊”。前者源于转场在每次剪辑两侧都完全停止,以及摄像机保持动作在前半秒就完成了全部运动;解决方案是让退出动作加速进入剪辑,进入动作在剪辑后仍保持速度,并且保持动作均匀地漂移。后者源于标题淡入后就静止不动;解决方案是为所有显示文本使用统一的动效,从参考视频中选取,并在每个场景中使用,在节拍上进入,并以摄像机退出的方式离开,而不是每个场景都使用一个新花样。assets/components/Stage.tsx 实现了前者;Title.tsx 实现了一种文本动效;references/animation-patterns.md 提供了具体数据,包括大推进动作的对数空间关键帧,以及一个对象如何在剪辑中被传递。
一次只改变一个区域:在半秒内,当场景的主要事件落下时,远处角落的元素不应运动。将次要元素放置在视线已经所在的位置,或者放在剪辑点上(references/motion-language.md)。
展示创意,而非屏幕
产品影片不是功能演示。每个产品场景传达一个创意,其卡片只展示能让该创意成立的内容:一个名称、一个状态、一个短语。根据客户满意的影片数据:大约每秒播放 4 个字,产品卡片上的文字在 15 到 30 字之间,标题不超过 12 个字并保持在一行内。文字量翻倍的剪辑会收到“文字太多”的反馈。你所保留的少量文字必须来自产品真实的表述;但这并不意味着要保留所有文字。除非用户要求,否则应省略价格、信用额度、方案名称。scripts/check-copy.mjs 可用于计数;references/writing-style.md 包含了规则和判断准则。
自行检查渲染结果
在用户看到场景之前,在关键帧上渲染静帧并进行检查:每个点击帧、文本最长行完全显示在屏幕上的帧、每次剪辑前的最后一帧、完整的剪辑帧。确认光标尖端在目标元素上、没有文本换行或裁剪、没有元素超出安全区域、文字与创意简报完全一致。在主合成渲染之后:检查联系表、剪辑条、跳跃报告(需确认影片评价的运动按计划进行)以及注意力检查。references/self-check.md 包含了需要检查的帧列表和相关命令。
这之所以重要,是因为这类影片常见的失败(光标错过了按钮、标题换行、卡片偏离网格、过期的时间数据)都能通过类型检查并成功渲染,但不出任何错误。它们只有在图像中,或者通过数字计算才能被发现。
静帧无法显示运动。影片是否流畅、与音乐是否搭配,只有通过观看才能判断,因此永远不要将其报告为“已检查”;只需说明你检查了哪些内容,并且没有人观看过完整影片。
三个输入
资产。 宽高比、时长、Logo、品牌色、字体、脚本以及配乐,需一次性通过 assets/prompt-templates/asset-intake-questionnaire.md 中的问卷收集完整。动效丰富但使用占位符品牌的影片会显得模板化,任何晚到的资产都会导致重新渲染。产品的真实 UI 必须从今日的网站截取,并从 DOM 中测量尺寸,决不能凭记忆绘制(references/product-ui-from-site.md);一个虚构的仪表盘毁过一个完整版本。如果用户没有脚本,references/script-development.md 会与他们一起开发。
外观。 用户喜欢的两到三个参考视频,每个都解析为导演分解:镜头列表、转场动词(推镜、甩镜、匹配剪辑缩放、遮罩切换)、节奏、排版、标志性动效。转场动词是最关键的部分,因为它们能将场景列表转化为摄像机计划,而不是带有淡入淡出的幻灯片。用户之前喜欢的影片优先于所有参考:先加载它的剪辑点和进入时间。当 Gemini 可用时使用它,或者手动采样帧并自行阅读;两条路径都在 references/reference-video-vibe.md 中有描述。
节拍。 scripts/detect-beats.py 读取配乐并写入 beats.json:速度、每个节拍的帧号、哪些节拍是反拍、以及音乐的高潮点。场景剪辑点放在节拍上,默认放在反拍上,这能让剪辑感觉像一次鼓点打击;三个看起来制作精良的参考影片,每分钟有 10 到 13 次剪辑,没有镜头短于 3.5 秒,并且每个场景都有一个摄像机运动。点击和进入动画也从节拍上开始,但不是每个节拍都放:一个场景中的大部分节拍是不承载任何内容的。时间文件从 beats.json 推导出每一帧,因此场景通过节拍号定位,而非手动输入帧号。脚本的末尾包含一个可靠性判定:如果是 good 则构建;如果是 check,则让用户通过听觉确认;如果是 poor,则该配乐不适合制作节拍剪辑的影片,因此要么更换配乐,要么告诉用户影片将不会是节拍同步的。
大多数影片会遵循全部三条。有些会故意打破其中一条,如果这是一个主动选择的话也可以接受:例如,配合画外音剪辑的影片,就不能同时也节拍剪辑。
与客户合作
- 他们通过观看来批准。 为打开高清渲染文件(
open out/...mp4)并与上一个被接受的剪辑版本并排对比,加上几行简单的文字说明更改了哪些内容及其时间点。4K 版本在客户首肯后再提供。任何需要用户做出选择的内容,都提供全尺寸的静帧;曾有两位用户在查看全尺寸后改变了选择。 - 提出建议,但不要替他们做决定
… [为翻译而截断]