用嘴做动效视频:vibe-motion 深扒 + 本地部署实录(Claude Code × Remotion)
原作品:浙大猫学长《VibeCoding 大赏|vibe-motion v1.1.0 正式发布!音画同步的动画才是真正的好动画!》 本文做了两件事:① 把这个作品深扒清楚(它到底是什么、强在哪);② 亲手在本机把它完整部署跑通并渲染出一条视频,把可复制的步骤和踩的坑都记下来。
先说结论:vibe-motion 是一个”用嘴做动效视频”的 Vibe Coding 应用。 你用自然语言描述想要什么动画,它在底层让 Claude Code 去写 Remotion(用 React 写视频的框架)代码,实时预览、一键导出成专业视频。它把传统上”程序员一帧帧抠 React 动画”的高门槛活,变成了”你说意图、AI 写确定性代码、框架保证可渲染”。
作者是浙大猫学长(zjucat),MIT 开源,本次拆的是 v1.1.0。
它解决的真问题
传统做动效有两条路,各有难处:
- 专业软件(AE / 剪映):能做,但精确控制(比如”在第 30 帧让这个组件做一次脉冲”)靠手 K 帧,繁琐。
- Remotion 裸写:用代码定义动画,精确、可复用、能版本管理,但要会 React/TypeScript,门槛高。
vibe-motion 在 Remotion 外面套了一层”AI 壳”:每个项目自带一个 CLAUDE.md,把分辨率、帧率、时长、目录规则都喂给 AI。 你只需要在项目里跟 Claude Code 说”logo 淡入后滑到角落、同时标题出现”,它直接改 Main.tsx,Remotion Studio 热更新预览。这就是 vibe coding 的典型形态——人给意图,AI 落成代码,框架兜住确定性。
v1.1.0 的真创新:音画同步(audio-first)
视频的本质无非是”画面 + 音频”。难点在于让动画卡上音频的节奏。vibe-motion v1.1.0 的做法很反直觉,但方向是对的:
先把音频拖进时间轴(像剪映 / PR 那样拖文件即用),再让 AI 按音频的节奏去调动画帧。
为什么是这个顺序?作者在视频里讲得很清楚:音频不能随便动——你读完一段文案,如果对音频变速,它会变调,这不是想要的;但动画的关键帧是代码,随便调。所以正确的工作流是”锁住音频 → 改画面去对齐”,而不是”先做画面再配音”。
他举的例子:口播说到”画面、音频”这两个词时,让对应组件在那一帧做一次脉冲动画;想让脉冲提前,就让 AI 把它从第 50 帧改到第 30 帧——一句话的事。
而原版 Remotion 加音轨,要你先手动把音频文件拷到项目目录、再写一行代码引入,挺麻烦。vibe-motion 把这一步做成了拖拽即用,痛点抓得准。
两种用法,门槛差很多
| 方式 | 是什么 | 门槛 |
|---|---|---|
| 完整 web app | 网页后台:内嵌终端跑 Claude Code + 内嵌 Remotion Studio + 资源拖拽 + 一键导出 mp4/webm/gif | 重,要 PostgreSQL |
轻量脚手架 npx create-vibe-motion | 只生成一个 Remotion 项目骨架(带 CLAUDE.md),你自己 cd 进去开 Claude Code 对话 | 轻,只要 Node + Claude Code |
视频里”怎么用”演示的其实是轻量那条:npx create-vibe-motion → 进目录 → 跟 AI 说要做什么动画。另外还有 npx skills add vibe-motion/skills,给 AI 装一批可复用的动效 skill(进度条、打字机、SVG 拼装、3D 地球航线等),省 token。
技术栈
| 层 | 技术 |
|---|---|
| 前端 | Next.js 16(App Router)+ React 19 |
| UI | Tailwind 4 + shadcn/ui |
| 终端 | xterm.js + WebSocket + node-pty(网页里跑真终端,Claude Code 在每个项目的 remotion 目录里运行) |
| 视频 | Remotion 4 + @remotion/player |
| 数据库 | PostgreSQL + Prisma |
| 媒体 | Sharp(图)+ FFmpeg(视频缩略图) |
架构关键:server.ts 是一个自定义 Next 服务器,把 WebSocket(终端)和 Next 挂在同一个端口;每个项目在 projects/{uuid}/remotion/ 下是一个独立的 Remotion 工程,Claude Code 就在那个目录里跑、读那个目录的 CLAUDE.md;导出走 npx remotion render 起子进程。
本地部署完整步骤(亲测跑通)
环境前提:Node(项目文档说 24+,我用 22.22 也跑通了,代码里没有 engines 强制)、FFmpeg、Claude Code CLI、git。 不用预装 PostgreSQL——用 Prisma 自带的本地 PG。
# 1. clone + 装依赖
git clone https://github.com/GurYN/vibe-motion.git
cd vibe-motion
bun install # 或 npm install(794 个包,bun 约 12s)
# 2. 起本地 Postgres(Prisma 自带,免装系统库)—— 单开一个终端常驻
npx prisma dev --name vibemotion
# 它会打印一行 DATABASE_URL="postgres://postgres:postgres@localhost:5121X/template1?..."
# 3. 写 .env,把上面那行 DATABASE_URL 填进去
cp .env.example .env
# 编辑 .env:DATABASE_URL=<上一步打印的串> PORT=3000 HOST=localhost
# 4. 生成 Prisma client + 建表
npx prisma generate
npx prisma db push # 用 db push 不用 migrate,免 shadow DB
# 5.(macOS arm)修 node-pty 权限,否则网页终端报 posix_spawnp failed
chmod +x node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper
# 6. 起服务
bun dev # 或 npm run dev
# → Ready on http://localhost:3000 + WebSocket ws://localhost:3000/api/ws
打开 http://localhost:3000 → 新建项目(选分辨率 / 帧率 / 时长)→ 它自动在 projects/{uuid}/remotion/ 生成 Remotion 骨架 + CLAUDE.md → 网页内嵌终端里 Claude Code 自动起在该目录 → 你描述动画 → Studio 实时预览 → 导出 mp4。
我建了个测试项目、用默认合成渲染了一条 1920×1080 / 30fps / 5 秒的 mp4,完整链路(建项目 → 生成骨架 → 渲染出片)全部跑通。
部署时实际踩的坑
- 本机可能只有 libpq 的 psql 客户端、没有 PG 服务端:别折腾 brew 装 postgres,直接
npx prisma dev最省事,.env.example官方就推荐这条路。 prisma db push --skip-generate会报 help:这个子命令不吃这个 flag,直接prisma db push即可。- 渲染要在项目子目录自己装 Remotion CLI:主项目只装了
@remotion/player+remotioncore,没装@remotion/cli。渲染走的是在projects/{uuid}/remotion/里npx remotion render,首次会自动下@remotion/cli+ 一个 headless Chromium(几百 MB)。 - 首次渲染卡在下载 Chrome Headless Shell(SSL 握手失败):如果网络环境抓不到 Google 的下载源,加
--browser-executable="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"让 Remotion 直接用系统 Chrome,跳过下载,立刻就渲染出来了。 - 多 lockfile 警告:home 目录如果有
package-lock.json,Next 会误判 workspace root,不影响运行,设turbopack.root可消除。
适合谁、怎么用上
- 做口播 / 科普 / 产品类短视频的片头片尾、数据动效、进度条、打字机、转场:它比纯 AI 生成视频更可控(代码是确定性的),又比手 K 帧省事(说人话让 AI 写)。尤其适合需要”精确卡音频节奏”的内容。
- 想快速试水:不用部署整个 web app,直接
npx create-vibe-motion起一个骨架,开 Claude Code 跟它聊就行。 - 本质判断:vibe-motion 的价值不在”又一个 AI 生视频工具”,而在它示范了一种把”创意软件”重做成”AI 对话 + 确定性框架”的范式——音频锁定、画面用代码对齐,这个思路本身比工具更值钱。
链接
- 主仓库(完整 app):https://github.com/GurYN/vibe-motion
- 脚手架:
npx create-vibe-motion - 可复用 skills:
npx skills add vibe-motion/skills - 官网:https://vibe-motion.github.io/