关于 remotion
Remotion 是基于 React 组件创建视频的工具包,面向制作动画或数据驱动视频的开发者。它以帧为基础控制动画,并支持媒体、字幕、转场和渲染。
主要功能
- 01基于 React 组件的视频合成
- 02使用插值和弹簧的逐帧动画
- 03场景编排与转场
- 04音频、视频、图片和 GIF 处理
- 05字幕与文本动画
- 06视频渲染和动态元数据
适用场景
- 01用 React 组件创建动画视频
- 02制作带转场和音轨的多场景视频
- 03生成字幕和逐词高亮效果
- 04按内容动态设置时长并渲染视频
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill remotion安装后在 Claude Code 中输入/remotion确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-features.mdanimations-and-timing.mdcaptions-and-text.mdcompositions-and-sequencing.mdmedia-and-assets.mdtransitions.md详细介绍
Remotion
概述
Remotion 支持使用 React 组件以编程方式创建视频。合成定义可渲染的视频,并明确指定宽度、高度、fps 和时长。所有动画都必须由 useCurrentFrame() 驱动——禁止使用 CSS 动画和 Tailwind 动画类,因为它们会导致渲染瑕疵。在 Remotion 合成、动画、音频、字幕、转场、媒体处理或渲染场景中使用此技能。不适用于通用 React UI 开发。
快速参考
| 模式 | API / 方法 | 要点 |
|---|---|---|
| 基本动画 | useCurrentFrame() + interpolate() | 始终使用 extrapolateRight: 'clamp' 进行限制 |
| 弹簧动画 | spring({ frame, fps }) | 使用 { damping: 200 } 实现平滑且无弹跳的运动 |
| 合成 | <Composition id, component, durationInFrames, fps, width, height> | 始终设置明确的尺寸 |
| 动态元数据 | <Composition> 上的 calculateMetadata | 在渲染前设置时长、尺寸和 props |
| 序列 | <Sequence from, durationInFrames> | useCurrentFrame() 返回本地帧(从 0 开始) |
| 系列 | 使用 <Series> 和 <Series.Sequence> | 按顺序播放;使用负偏移实现重叠 |
| 转场 | <TransitionSeries> 配合 fade()、slide()、wipe() | 总时长 = 场景时长之和减去转场时长 |
| 音频/视频 | 来自 @remotion/media 的 <Audio> / <Video> | 对本地资源使用 staticFile() |
| 字幕 | createTikTokStyleCaptions() | 通过 page.tokens 按词元高亮单词 |
| 图像 | 来自 remotion 的 <Img> | 绝不使用原生 <img> 或 Next.js <Image> |
| GIF | 来自 remotion 的 <AnimatedImage> | 与时间轴同步;使用 playbackRate 控制速度 |
| 字体 | @remotion/google-fonts 或 @remotion/fonts | 在顶层调用 loadFont();字体加载完成前会阻塞渲染 |
| 3D 内容 | 来自 @remotion/three 的 <ThreeCanvas> | 必须设置 width/height;禁止使用 R3F 的 useFrame() |
| 文本测量 | 来自 @remotion/layout-utils 的 measureText()、fitText() | 先加载字体;测量和渲染时的属性必须一致 |
| 参数 | <Composition schema> 上的 Zod 架构 | 顶层必须是 z.object();需要使用准确的 Zod 版本(查看 Remotion 文档) |
| 透明视频 | --pixel-format=yuva420p --codec=vp9 | 浏览器使用 WebM;编辑软件使用 ProRes 4444 |
| 地图 | 配合 useCurrentFrame() 使用 Mapbox | 设置 interactive: false、fadeDuration: 0;使用 --gl=angle --concurrency=1 渲染 |
常见错误
| 错误 | 正确做法 |
|---|---|
使用 CSS 动画或 setTimeout | 使用 interpolate() 和 useCurrentFrame() 创建与时间轴同步的动画 |
使用原生的 <img>、<video>、<audio> 标签 | 使用 Remotion 提供的 <Img>、<Video>、<Audio>,以正确预加载媒体 |
| 将视频时长写死 | 使用 calculateMetadata 根据内容动态设置时长 |
| 未指定合成的宽度和高度 | 始终明确定义尺寸,避免渲染问题 |
使用 React Three Fiber 的 useFrame() | 在 <ThreeCanvas> 内使用 Remotion 的 useCurrentFrame() |
忘记在序列上设置 premountFor | 始终预挂载序列,以便在播放前预加载组件 |
未限制 interpolate() 的输出范围 | 设置 extrapolateRight: 'clamp',防止数值超出目标范围 |
在 <ThreeCanvas> 中放置 <Sequence>,但未设置 layout="none" | 在 <ThreeCanvas> 内的任何 <Sequence> 上设置 layout="none" |
委派
- 查找可用的 Remotion 组件及其属性:使用
ExploreAgent 在代码库中搜索合成定义和资源用法 - 制作包含转场和音频的多场景视频:使用
TaskAgent 逐步组合序列、转场和音轨 - 规划包含动态数据的视频生成工作流:使用
PlanAgent 设计参数化合成和渲染工作流的架构
参考资料
评论
支持 Markdown