Communitygithub.com

Motion Proof

使用 Remotion 代码创建 15-60 秒的产品发布视频和动态图形,包含运动设计师的运动规则和自动检查(定格帧、黑屏、音量、网络质量),确保结果不像是 AI 生成的。当用户要求发布视频、产品或界面动画、动态图形,或审核已渲染视频时使用。

Motion Proof 是什么?

Motion Proof 是一个 AI 助手技能,旨在通过代码(使用 Remotion 和 React)生成高质量的产品发布视频和动态图形动画。它通过应用专业运动设计师的曲线、节奏和暂停规则,避免了 AI 生成视频常见的生硬感。该技能支持静态帧渲染、逐帧检查、音频集成与标准化(-14 LUFS),以及网络优化输出。它强制使用 H.264 编码(yuv420p, bt709)和 60 fps,并禁止 CSS 过渡、无种子随机数或状态钩子等不稳定的 UI 模式。技能提供了详细的检查流程:从视觉脚本、配置文件、动画指南到自动质量测量(脚本 `medir.mjs`、`cuadros.mjs`、`web.mjs`),确保每个输出都经过程序和人工双重验证。支持多种帧率,但默认使用 60 fps 以获得流畅运动。

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

在你喜欢的 AI 中提问

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

文档

Motion Proof 是做什么的?

你将用代码制作动画视频:每一帧都来自一个程序(Remotion,使用 React)。区分一个视频是否“看起来像 AI 生成”的,几乎总在于两个地方:运动(曲线、节奏、呼吸般的停顿)和审查(逐帧查看并测量)。这个技能为你提供了这两方面的能力。

开始之前

  1. 检查工具:node --version(20 或更高)和 ffmpeg -version。对于 web 版本,需要一个带有 libvmaf 的 ffmpeg(ffmpeg -filters 必须列出 libvmaf)。
  2. 如果没有 Remotion 项目,用 npx create-video --yes --blank mi-video 创建一个,然后用 npx remotion skills add 添加官方技能。使用这些技能解决 Remotion API 的问题。
  3. 在 remotion.config.ts 中添加 Config.setColorSpace("bt709");。否则视频将以全范围(yuvj420p)输出,某些播放器会改变颜色。
  4. 将 plantilla/movimiento.ts 复制到项目中(例如 src/lib/movimiento.ts),并查看 plantilla/Ejemplo.tsx 中的模式:带弹簧效果的错开入场、漂移、摄像机推拉、点击和运动模糊。
  5. scripts/ 中的脚本用 node <此技能文件夹>/scripts/<程序>.mjs 运行。它们不安装任何东西。

流程

  1. 简报。 产品是什么,目标受众是谁,观看者最终应该做什么,格式(16:9, 9:16, 1:1)和时长。如果缺少重要信息,在继续之前提问。
  2. 视觉脚本 使用 referencias/guion-visual.md:包含精确的起始帧和结束帧的场景,总计时长等于总时长。在用户批准之前不要开始动画。
  3. 单一配置文件 包含文本、数字、颜色和时间。文本更改应为一行,图像和声音的时间应从同一位置读取。
  4. 动画制作 遵循 referencias/movimiento.md。首先阅读“暴露 AI 的清单”。
  5. 测试帧(npx remotion still 或 renderStill),在每个场景变化和每次摄像机运动处进行检查。在完整渲染之前查看它们。将摄像机朝向某点推进会使远离该点的物体向外推:所有摄像机编辑都必须在帧上检查。
  6. 渲染 使用 H.264(yuv420p, bt709),60 帧/秒。垂直和方形视频通过不同的场景布局重新构建,而不是从水平视频中裁剪。
  7. 声音 使用 referencias/sonido.md:unir.mjs 合并音乐,volumen.mjs 将其标准化为 −14 LUFS。
  8. 测量 使用 medir.mjs。如果失败,则修复视频。仅当错误是误报并且测量证明这一点时,才可更改测量器;在这种情况下,在交付时说明。
  9. 目视审查 使用 cuadros.mjs(帧表)和 referencias/revision.md 中的检查清单。
  10. Web 版本 如果需要轻量文件,使用 web.mjs。
  11. 交付 mp4 文件、测量结果以及无法验证的内容(例如,如果没有人听过声音)。

固定规则

  • 每一帧仅由帧号决定,帧号可包含小数(用于运动模糊)。禁止使用 useState、setTimeout、CSS 过渡或没有固定种子的 Math.random()。
  • 字体在第一帧之前加载。出现 Times New Roman 的帧视为失败。
  • 没有任何物体以直线或匀速运动,也没有任何物体完全静止。
  • 重要文本至少停留 1.5 秒在屏幕上。计数器上升约 1 秒。
  • 没有物体超出画面,除非是有意退出。
  • 未经验证的内容必须如实说明。

命令

node scripts/medir.mjs video.mp4 --ancho 1920 --alto 1080 --fps 60 --duracion 30 --informe medicion.json
node scripts/cuadros.mjs video.mp4 hoja.png --cantidad 12
node scripts/cuadros.mjs video.mp4 cambios.png --segundos 4.5,9,15.2,22
node scripts/unir.mjs video-mudo.mp4 musica.wav con-sonido.mp4
node scripts/volumen.mjs con-sonido.mp4 final.mp4
node scripts/web.mjs final.mp4 web.mp4 --poster poster.jpg --segundo 28

medir.mjs 如果满足条件则退出码为 0,否则为 1,并以文本形式列出每个错误。cuadros.mjs 生成一张图片,你可以打开它一次性查看视频的多个时刻。为 medir.mjs 添加 --mudo 用于无声音频。

相关技能