关于 remotion-launch-video
这项技能指导使用 Remotion 和 snapcn 场景制作 15–30 秒的产品发布影片,并通过 shadcn CLI 安装组件。它面向创作者和 Agent,涵盖分镜、真实产品素材、渲染检查与交付。
主要功能
- 01用 snapcn 场景规划发布节拍
- 02通过 shadcn CLI 安装 Remotion 组件
- 03通过组件属性设置文案与品牌素材
- 04交付前检查渲染帧
适用场景
- 01制作产品发布短片
- 02将真实截图编入发布影片
- 03为社交平台准备视频构图
MCP 相关
文档介绍了 snapcn MCP,Agent 可借此搜索场景注册表、查看组件属性,并生成包含 TransitionSeries 框架的逐拍计划。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ shadcn-labs/ snapcn --skill remotion-launch-video安装后在 Claude Code 中输入/remotion-launch-video确认已加载。
详细介绍
使用 snapcn 制作 Remotion 产品发布视频
在 Remotion 中,将产品发布简报转化为一段 15–30 秒的发布影片。每个镜头都是一个 snapcn 组件:经过精细调校,并根据渲染帧测量优化的 Remotion 场景;可通过 shadcn CLI 安装,并以代码形式加入你的项目,归你所有。
为什么选 snapcn,而不是手写动画。 从头制作动画的 Agent 每次都会回到相同的风格:渐变背景上的居中文本、所有内容淡入,最后出现徽标。snapcn 场景逐帧参照真实的产品发布影片制作,因此动作已具备让发布影片显得精致高级的节奏、字体和镜头效果。你的任务是挑选场景并填入属性,而不是从头构思动画。
snapcn 规则
- 除非没有适用组件,否则每个节拍都应使用 snapcn 组件。 为镜头编写任何
interpolate()或spring()之前,请先查看目录:https://snapcn.dev/llms-components.txt?ref=skill-launch列出了每个可安装组件、其用途和运行帧数。任何组件页面只要在网址末尾加上.md,即可获取 Markdown 格式的内容,例如https://snapcn.dev/docs/scenes/announce-title.md?ref=skill-launch。 - 切勿臆造组件名称。
@snapcn/<name>仅适用于列表中列出的名称。如果没有适合某个节拍的组件,请如实说明,并使用排版(@snapcn/text-reveal)来呈现该节拍,而不要猜测组件名称。 - 填写属性,不要改写组件。 通过属性修改文案、颜色和图片。编辑已安装的 snapcn 文件中的动画,会破坏根据渲染帧调校好的时序。
如需查看完整目录、合成规则和质量标准,也请安装总技能:npx skills add snapcndev/snapcn --skill snapcn。
前置条件
- 一个 Remotion 项目(
npx create-video@latest)。画布:1280×720,30fps,这是所有 snapcn 场景的设计尺寸。 - shadcn CLI。如果项目没有
components.json,请运行npx shadcn@latest init。 - 场景间切换所需的
@remotion/transitions:npm i @remotion/transitions。 - 发布文案:产品名称、标题、标语、一个可证明的数据,以及真实截图或屏幕录制。
工作流
1. 收集素材
开始编写前,先准备以下内容:
- 简报:发布帖、着陆页或单页介绍。提取标题、标语、一个差异化功能、证明数据和语气。
- 品牌信息:徽标(SVG 路径或 PNG)、主色、字体。snapcn 场景通过属性接收这些内容(
titleColor、logoSrc、symbolPath、fontFamily、theme)。 - 真实产品画面:截图或 30–60 秒的录屏。画面中的 UI 文案应与真实产品一致。 切勿臆造标签、功能或数据;这是让发布影片显得虚假的最快方式。
2. 先规划分镜,再写代码
先编写镜头列表,并将每个节拍映射到一个 snapcn 组件:
| 节拍 | 时间 | snapcn 组件 | 帧数 | 承载内容 |
|---|---|---|---|---|
| 钩子 | 0–3s | type-morph 或 text-reveal | 94 / 90 | 将观众的问题转化为承诺 |
| 名称 | 3–9s | announce-title | 170 | 眉题、产品名称、标语、标志 |
| 产品 | 9–15s | hero-launch、laptop-frame、phone-frame | 170 / 240 / 240 | 展示设备上的真实屏幕 |
| 证明 | 15–17s | count-grid、follower-rush | 47 / 300 | 一个真实数字 |
| 收尾 | 17–20s | wordmark-cut、block-wordmark、logo-flicker、logo-assemble | 66 / 150 / 100 / 108 | 只展示名称 |
避免重新渲染的规则:
- 从观众的问题切入,而不是产品名称。
- 在说出产品名称后的 3 秒内展示产品。
- **把最多的屏幕时间留给只有你的产品才能实现的那个瞬间。**不要把时长平均分配给各项功能。
- 按照组件的自然时长规划每个片段(见帧数列,也可查看
llms-components.txt)。时长不足会截断动画;时长过长则会留下空白。 - **将文字直接嵌入画面。**大多数社交平台上的观看都是静音的。
3. 安装场景
npx shadcn@latest add @snapcn/type-morph @snapcn/announce-title @snapcn/hero-launch @snapcn/count-grid @snapcn/wordmark-cut
每个场景都会放在 components/snap-cn/<name>.tsx,其依赖项也会随之安装。
4. 合成
使用一个 TransitionSeries,每个节拍对应一个序列,序列间添加短暂淡入淡出。此合成可按所示内容通过类型检查并完成渲染,public/ 中包含四张屏幕截图:
import { fade } from "@remotion/transitions/fade";
import { linearTiming, TransitionSeries } from "@remotion/transitions";
import { staticFile } from "remotion";
import { AnnounceTitle } from "@/components/snap-cn/announce-title";
import { CountGrid } from "@/components/snap-cn/count-grid";
import { HeroLaunch } from "@/components/snap-cn/hero-launch";
import { TypeMorph } from "@/components/snap-cn/type-morph";
import { WordmarkCut } from "@/components/snap-cn/wordmark-cut";
// 1280×720 @ 30fps. Each Sequence is budgeted to the component's natural length.
const T = linearTiming({ durationInFrames: 12 });
// Real product screenshots in public/. Scenes fall back to snapcn sample images without them.
const shots = ["shot-1.jpg", "shot-2.jpg", "shot-3.jpg", "shot-4.jpg"].map((f) => staticFile(f));
export const LaunchVideo: React.FC = () => (
<TransitionSeries>
{/* 1. Hook: the viewer's problem, turned into the promise */}
<TransitionSeries.Sequence durationInFrames={94}>
<TypeMorph
lead="Your launch video "
emphasis="takes a week."
morphTo="takes a prompt."
finally_="a prompt."
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 2. Name the product */}
<TransitionSeries.Sequence durationInFrames={170}>
<AnnounceTitle
eyebrow="Introducing"
title="Acme 2.0"
tagline="Billing that reconciles itself."
symbolPath="" // your mark as an SVG path in a 0 0 100 100 box; "" shows none
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 3. Show the product: two real shots (image, video, or a CSS gradient stand-in) */}
<TransitionSeries.Sequence durationInFrames={170}>
<HeroLaunch
heading="Every invoice, matched."
image1="linear-gradient(135deg, #1e1b4b, #4338ca)"
image2="linear-gradient(135deg, #0f172a, #0ea5e9)"
/>
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 4. Proof: one real number */}
<TransitionSeries.Sequence durationInFrames={60}>
<CountGrid from="5" to="500" noun="teams" cards={shots} />
</TransitionSeries.Sequence>
<TransitionSeries.Transition presentation={fade()} timing={T} />
{/* 5. Close on the name */}
<TransitionSeries.Sequence durationInFrames={66}>
<WordmarkCut word="acme." />
</TransitionSeries.Sequence>
</TransitionSeries>
);
将其注册为 durationInFrames={512}(序列总帧数减去 4 × 12 帧的重叠部分)、fps={30}、width={1280}、height={720}。
将渐变替换为真实屏幕截图或片段:设置 image1={staticFile("shot-1.png")},并将文件放在 public/ 中。
5. 渲染审查循环
完整渲染视频前,先渲染单帧:
# One frame per beat: the midpoint of each sequence, and just before and after each cut
npx remotion still LaunchVideo out/beat-1.png --frame=47
npx remotion render LaunchVideo out/launch.mp4 --codec=h264 --crf=18
将静帧拼成一张联系表,并在渲染完整视频前检查:
ffmpeg -y -pattern_type glob -i "out/beat-*.png" -vf "scale=480:-1,tile=5x1" out/contact.png
检查每一帧:
- 没有文字被裁切,切换时没有黑帧,也没有在场景开始前显示内容。
- 屏幕上的每段文字都是简报中的真实文案。
- 在说出产品名称后的 3 秒内出现产品。
6. 审核
自行检查两三轮后,渲染约 20 帧(关键时刻以及每次切换前后的画面),并以四种评审视角进行审核;如果你的工具链支持,也可以让四个子 Agent 并行审核:
- 设计与布局:对齐、裁切、比例。
- 可读性:在手机上以 720p 显示时是否清晰、对比度、错别字。
- 节奏:每个节拍的时长是否合理;收尾是否有力?
- 品牌:颜色、字体和 UI 是否符合真实产品?
下一次渲染前,将所有修改清单合并成一份修订计划。
7. 针对平台交付
渲染前先确认视频的发布平台。每种宽高比都单独制作一个合成,而不是事后裁切。
| 平台 | 宽高比 | 尺寸 |
|---|---|---|
| X / LinkedIn 信息流 | 16:9 | 1920×1080(或渲染 1280×720 主版本) |
| X 竖屏、Reels、Shorts、TikTok | 9:16 | 1080×1920 |
| LinkedIn / Instagram 信息流 | 1:1 或 4:5 | 1080×1080 / 1080×1350 |
npx remotion render LaunchVideo out/launch-1080.mp4 --scale=1.5 可将 1280×720 主版本放大到 1920×1080,无需重新排布任何场景。
来之不易的经验
- 绝不臆造产品 UI 标签。 截取真实应用的屏幕截图,并沿用其中的文案。
- 结束卡上只放一个标题和一个 CTA。 使用落地页上的真实标语。
- 让开场钩子建立在观众无需解释就能认出的事物上。 如果需要一句话来解释,说明这个钩子太抽象了。
- 先后呈现胜过同时呈现。 先让“之前”的画面停留约一秒,然后切换到“之后”。
- 不要在 snapcn 场景内部自行添加淡入淡出,把场景粘在一起。 转场应交给
TransitionSeries;逐场景的退出淡出会导致双重淡出。 - 自行添加的内容要保持克制:使用句首字母大写,不要添加装饰性的字间距,不要使用发光或渐变文字。带有发光效果的 snapcn 场景(
announce-title)保留该效果;这是场景效果,不是装饰。
snapcn Pro:成片,以及了解每件道具的 Agent
对于需要使用免费场景之外内容的发布活动:
- 50 个 Pro 场景,专为发布活动打造,包括
version-drop(版本号落下)、library-flight、app-reveal、gallery-push(更新日志墙)、screen-wall、checkout-push、tally-rise、ticker-climb和thank-you-swarm。 - 模板(自 2026 年 10 月 20 日起):完整的发布影片、功能演示和更新日志短片。填入文案并渲染:https://snapcn.dev/docs/templates?ref=skill-launch
- snapcn MCP:你的 Agent 可以用通俗英语搜索注册表,读取每个组件的真实 props,并将一句话的需求转化为逐节拍方案和
TransitionSeries骨架。claude mcp add snapcn -- npx -y @snapcn/mcp@latest SNAPCN_API_KEY=YOUR_KEY
只要 components.json 配置了你的密钥,Pro 组件的安装方式就与免费组件完全相同(三行配置见 https://snapcn.dev/account?ref=skill-launch)。方案:https://snapcn.dev/docs/pricing?ref=skill-launch
还没准备好使用 Pro?确认邮箱后即可免费使用一个 Pro 组件 Manifesto:https://snapcn.dev/docs/pricing?ref=skill-launch#free
致谢
工作流结构(输入 → 分镜脚本 → 构建 → 渲染审查 → 多方评审 → 平台表格)以及一些来之不易的经验,改编自 everyinc/product-launch-video(MIT,© 2026 Every Media, Inc.)。联系表审查和“设计视觉风格前先搜索目录”的规则,改编自 HeyGen 的 hyperframes product-launch-video 技能(Apache-2.0)。两者均已针对 Remotion 和 snapcn 组件进行了改写;所有 snapcn 专属内容均为 snapcn 原创。