mcpField
R
remotion-launch-video

remotion-launch-video

github.com/shadcn-labs创意与媒体52696 次安装今天更新
代码仓库

关于 remotion-launch-video

这项技能指导使用 Remotion 和 snapcn 场景制作 15–30 秒的产品发布影片,并通过 shadcn CLI 安装组件。它面向创作者和 Agent,涵盖分镜、真实产品素材、渲染检查与交付。

主要功能

  1. 01用 snapcn 场景规划发布节拍
  2. 02通过 shadcn CLI 安装 Remotion 组件
  3. 03通过组件属性设置文案与品牌素材
  4. 04交付前检查渲染帧

适用场景

  1. 01制作产品发布短片
  2. 02将真实截图编入发布影片
  3. 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 规则

  1. 除非没有适用组件,否则每个节拍都应使用 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。
  2. 切勿臆造组件名称。 @snapcn/<name> 仅适用于列表中列出的名称。如果没有适合某个节拍的组件,请如实说明,并使用排版(@snapcn/text-reveal)来呈现该节拍,而不要猜测组件名称。
  3. 填写属性,不要改写组件。 通过属性修改文案、颜色和图片。编辑已安装的 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–3stype-morph 或 text-reveal94 / 90将观众的问题转化为承诺
名称3–9sannounce-title170眉题、产品名称、标语、标志
产品9–15shero-launch、laptop-frame、phone-frame170 / 240 / 240展示设备上的真实屏幕
证明15–17scount-grid、follower-rush47 / 300一个真实数字
收尾17–20swordmark-cut、block-wordmark、logo-flicker、logo-assemble66 / 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 并行审核:

  1. 设计与布局:对齐、裁切、比例。
  2. 可读性:在手机上以 720p 显示时是否清晰、对比度、错别字。
  3. 节奏:每个节拍的时长是否合理;收尾是否有力?
  4. 品牌:颜色、字体和 UI 是否符合真实产品?

下一次渲染前,将所有修改清单合并成一份修订计划。

7. 针对平台交付

渲染前先确认视频的发布平台。每种宽高比都单独制作一个合成,而不是事后裁切。

平台宽高比尺寸
X / LinkedIn 信息流16:91920×1080(或渲染 1280×720 主版本)
X 竖屏、Reels、Shorts、TikTok9:161080×1920
LinkedIn / Instagram 信息流1:1 或 4:51080×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 原创。

评论

支持 Markdown