Communitygithub.com

Motion Studio: 代码生成短视频

用代码生成完整的短视频:宣传片、产品发布片、动画广告、动态排版、解说视频、作品集、动画Logo片头和结束卡、以及照片级3D产品场景。输出可直接发布的MP4,配有原创音乐和音效。

Motion Studio: 代码生成短视频 是什么?

Motion Studio 是一个独特的 AI 技能,它完全通过代码来创作短视频,而不是使用传统的视频编辑软件。其核心机制在于,视频的每一帧都是由一个纯函数 `renderAt(t)` 根据时间 `t` 计算得出的,这使得渲染过程具有确定性、可跳转和可恢复的特性。画面由 HTML 页面渲染,通过无头 Chromium 逐帧捕获,再经 ffmpeg 编码;声音则使用 Python 从同一时间线合成,包括音乐、音效和环境音,并最终完成响度标准化。此外,它还集成了一个可选的 GPU 路径追踪器(`pt.js`),用于生成具有柔和光照、真实反射、景深和运动模糊的 3D 场景。该技能适用于创作从产品宣传片、动画广告到活动预告片等多种类型的短视频。它明确区分了其核心能力(从零开始创作)与简单的视频编辑、加字幕或调色等任务。用户可以通过一个完整的工作流进行创作,包括需求分析、事实核查、节拍网格故事板、模板脚手架、循环构建、审计、音效设计、最终渲染和交付。该技能还考虑到了 CPU/GPU 长时间渲染对用户计算机的影响,提供了“温和模式”和分块渲染等选项,并强调了在长时间渲染前征得用户同意的重要性。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/twodorz/motion-studio-skill/tree/HEAD/motion-studio

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Motion Studio

完全通过代码制作短片(通常为 9:16 1080×1920 的 Reels,也支持 16:9 / 1:1 / 4:5 比例)。

  • 画面。 一个 HTML 页面 (comp.html),其 window.renderAt(t) 函数会精确绘制时间 t 的对应帧。
  • 捕获。 无头 Chromium 逐帧捕获;ffmpeg 编码。
  • 声音。 使用 Python 从同一时间线合成:音乐、音效和环境音,并最终标准化至 -14 LUFS。
  • 3D(可选)。 镜头由一个小型 GPU 路径追踪器 (pt.js) 渲染,提供柔和光照、真实反射、景深和运动模糊。

观众看到的一切都是时间 t 的纯函数。这使得渲染具备可重复性、可定位性和可恢复性。

如果请求是编辑、加字幕、压缩或调色一个已存在的视频,或者构建幻灯片或网站动画,请说明此技能不是合适的工具,并直接提供帮助。从提供的素材(如活动、DJ、去年的派对)中剪辑出宣传片则属于本技能范围:请使用 templates/footage/ 和 references/footage-promos.md。

此技能包含的内容

路径内容何时阅读
references/setup.md工作室的一站式安装(Node、ffmpeg、Playwright、Python 虚拟环境、GPU 检查)首次在机器上使用
references/render-pipeline.md渲染契约、render.mjs 模式、分块渲染、ffmpeg 注意事项、确定性、联系表构建或渲染任何影片时
references/design-rules.md从真实客户反馈中学习到的故事叙述、布局、排版、动态和转场规则;审核在故事板绘制前和每次审查前
references/sound.md事件驱动的配乐 + 音效设计,混音目标,测量,响度处理处理音频时
references/path-tracer-3d.md3D 路径追踪器:场景、材质、灯光、精确尺寸的产品建模、相机、匹配剪辑、成本仅当影片需要 3D 场景时
references/claims-and-sources.md获取正确事实:官方来源、CLAIMS.md、绝对不要声称的内容、安全捕获网站任何包含产品事实、价格、规格或客户品牌的影片
references/footage-promos.md从提供的素材剪辑的活动/俱乐部/艺术家宣传片:客户要求、节拍网格音乐、DJ 转场、人脸取景、图形技术任何从真实素材构建的宣传片
templates/film/一个完整、可工作的 2D 短片(15 秒、动态文字、产品卡片、计数器、图表、行动号召)+ 渲染、音效和后期处理脚本从每个 2D 影片开始
templates/film-3d/路径追踪器 + 示例场景(工作室、房间、房屋)+ 一个可工作的 3D 影片及外观开发工具从 3D 影片开始
templates/footage/素材宣传片流程:节拍网格上的镜头列表(剪切、网格、分割、条带、斜坡、虹膜)、人脸取景、测量的 BPM/踢鼓相位/跌落、DJ 转场、图形工具包(文字蒙版、人后文字、跑马灯、光学居中)+ 示例从每个素材宣传片开始
scripts/setup_studio.ps1 / .sh创建工作室文件夹并安装所有内容(下载前会询问)首次使用
scripts/new_film.mjs将模板复制到 <studio>/films/<name>每个新影片

工作流程

请按顺序执行以下步骤。每一步的存在都是因为曾经跳过它而导致了客户修改。

  1. 需求简报。
    • 获取时长、格式、帧率(默认 30;PAL 编辑器用 25)、语言、行动号召以及影片的发布平台。
    • 索取品牌文件(Logo SVG/PNG、字体、颜色、现有帖子)。如果没有,则从其网站读取品牌信息。
    • 如果对方说“放手去做”,仍然需要确认任何会改变产品或声称的内容。节奏和风格由你决定。
  2. 研究与事实核查(references/claims-and-sources.md)。
    • 在撰写任何文案之前,将所有数字和声明从官方来源收集到 CLAIMS.md 中。
    • 当两个来源冲突时,省略该数字并说明原因。广告中的错误规格比没有规格更糟糕。
  3. 在节拍网格上绘制故事板。
    • 选择一个 BPM,使时长是完整的节拍数(例如,96 BPM 下 30 秒 = 48 拍;120 BPM 下 15 秒 = 30 拍)。
    • 将每个场景变化、字幕和声音事件都放到该网格上(bar(n, beat) / bt(b))。
    • 将故事板写成一个简短的表格(节拍 → 画面 → 文字 → 声音),如果可联系到对方,在构建前分享。
  4. 脚手架。 运行 node <skill>/scripts/new_film.mjs <studio> <name> [film|film-3d|footage],然后编辑 comp.html(2D),film.js + world.js + comp.html(3D),或 sources.json + edit.json + comp.html(素材;请遵循 references/footage-promos.md)。
  5. 小循环构建。 以低质量渲染联系表(node render.mjs beats 0.5,4,8,… 0.25 sheet)并查看它们。修复,重新制表。在最终渲染之前,不要仅凭一帧来判断动态。在整部影片的每个节拍(或半拍)都制作联系表。
  6. 审核(node render.mjs audit 0.25)。文字不能与产品或其它文字重叠,且必须保持在平台安全区域内。修复每个问题;不要与审核结果争论。
  7. 音效。 运行 python audio.py out/mix.wav out/stems,然后运行 python check.py:检查每个片段的响度、频谱、警笛/滑音测试、咔嗒声。
  8. 最终渲染。先询问(参见“渲染礼仪”)。
    • 2D 影片只需几分钟:node make.mjs frames + encode。
    • 3D 影片需要数小时:node render.mjs chunks + concat。
  9. 后期处理。 node make.mjs finish 会进行响度标准化(-14 LUFS, -1.5 dBTP),与画面混合(画面是主时钟,从不使用 -shortest),并写入一个轻量级的 -share 副本。检查输出中的帧数、时长和响度。
  10. 检查最终文件,而不是合成。 从编码后的 mp4 中提取帧(每 0.5 秒一张)并制作成联系表,检查每一帧。然后交付,并附上一段简短的说明(根据客户语言使用罗马尼亚语或英语):内容包括什么、事实来源、客户需要确认的内容。

渲染礼仪(用户的电脑是用户的)

3D 渲染会使 GPU 以 100% 负载运行一小时或更长时间,导致电脑变得迟钝。写入数百帧图像还会导致 Windows Defender 重新扫描每个文件。曾经有人不得不大喊“停下,你要把我的电脑搞炸了”。因此:

  • 在任何会使机器高负载运行超过几分钟的任务之前,请说明任务内容、所需时间以及电脑的感受,然后等待用户的确认。 提供以下选项:
    • 温和模式 (NICE_MS=25 DUTY=.35):在 GPU 通道之间暂停,使桌面保持可用;
    • 全速运行;
    • 稍后 / 通宵进行。
  • 优先使用 render.mjs chunks(1 秒的 mp4 分块,可恢复),而不是将每一帧都写为 PNG。
  • 将长时间渲染作为分离进程启动,这样关闭聊天窗口不会半途终止它们(Windows:Start-Process node -ArgumentList 'render.mjs','chunks' -WindowStyle Hidden)。
  • 当被告知停止时,立即停止。 终止进程树(Windows:taskkill /T /F /PID …),通过进程列表确认没有残留,并说明还有哪些东西仍在占用机器(例如,Defender 正在扫描写入的文件),不要责怪用户。
  • 简短的联系表和单个测试帧无需许可。 它们只需几秒钟。

不可妥协的事项(每一项都曾导致过一次客户修改)

  • renderAt(t) 必须是纯函数。
    • 帧之间不保留状态,不使用 Math.random()(请使用种子化的 mulberry32),不使用 CSS 过渡或动画,不使用定时器。
    • node render.mjs verify 会按顺序和乱序渲染帧;它们必须匹配。
  • 在第 0 帧之前加载所有字重(为每个使用的字体调用 document.fonts.load)。如果在影片中途首次使用某个字体,会导致一帧变为不可见。
  • 绝不能让两个文字块重叠,或文字覆盖产品。
    • 一个淡出的标题必须在下一个标题出现之前完全消失。
    • 计数器顺序切换(旧数字消失,然后新数字出现);两个数字叠在一起看起来是坏的。
  • 字幕在屏幕上停留至少 1.5 秒,每条不超过 7 个词,每个节拍一个想法。 确保第 0 帧是一个可读的缩略图。
  • 绝不虚构任何一个数字、客户、评论或结果。 仅当有带日期的证据显示在屏幕上时,才能显示价格,并且必须获得客户许可。
  • 除非另有要求,音效应是严肃的。 技术产品不使用玩具般的马林巴或铃铛声,避免持续的滑音:有一段视频中的吱吱声被称为“末日警报”。
  • 使用真实的 UI 和真实的素材(使用 Playwright 以高 DPR 从客户自己的网站截取)。绝不手绘客户的 UI 或 Logo。绝不在真实网站上点击购买、提交或发送。

相关技能