SuperAPI AI 工具集

make-motion

设计与创作

查看项目

更新于 10-15 09:50

技能介绍

make-motion 是一个面向短动画解说视频制作的技能。它的核心思路是:你只写一个 JSON 文件 motion.json,脚本负责校验、在浏览器中预览,并渲染成 MP4。你不需要编写任何动画代码,也不需要编辑生成的输出。

用途

适用于需要制作短动画解说视频的场景,例如标题展示、数字计数器、形状、图表以及带关键帧运动的图片。视频先在本地预览,再导出为 MP4。

主要能力

  • 规格文件驱动:所有内容由 motion.json 描述,脚本负责校验、预览和渲染。
  • 元素类型:text(文本)、counter(计数器,支持 from、to、decimals、prefix、suffix)、shape(矩形、椭圆、线条)、image(图片)、chart(基于 vegaLite,使用内联数据)。
  • 关键帧动画:每个元素可设置 keyframes,包含 t(场景内秒数)、可选 ease,以及该类型可动画的属性。属性在首个关键帧之前保持首值,之后按各关键帧的 ease 插值,最后一个关键帧之后保持末值。
  • 缓动函数:linear,或 in/out/inOut 加 Quad、Cubic、Quart、Back、Elastic、Bounce、Sine、Expo、Circ。入场推荐 outCubic / outQuad。
  • 音频(可选):根级 audio 数组最多 20 条轨道,支持 mp3、wav、m4a、aac、ogg、flac;可设置 at、scene、duration、volume、fadeIn、fadeOut。不循环,短音乐文件播放完即停止。
  • 语音旁白:当提示要求旁白且未提供文件时,可用 voice.mjs 合成。旁白文本写入 voice/<scene-id>.txt,通过 --text-file 传入,生成 24 kHz wav。可用音色包括 af_heart(默认)、af_bella、am_michael、bf_emma,--list-voices 可列出全部。
  • 预览:preview.mjs 打印 localhost URL,带进度条、播放/暂停、场景标记,支持空格键和方向键;文件变化时页面自动重载。
  • 渲染:render.mjs 输出 MP4(H.264、yuv420p;规格含音轨时为 AAC 音频),并打印路径和帧数。

使用方式

  1. 首次使用需安装依赖:<skill-dir>/node_modules 缺失时运行 npm ci --prefix <skill-dir>(包含 animejs、vega-lite、playwright、字体)。
  2. 帧捕获需要 Chromium:先询问用户(约 150 MB),再在 <skill-dir> 内运行 npx playwright install chromium。若用户拒绝,渲染回退到已安装的 Google Chrome。
  3. ffmpeg 不在 PATH 时停止,并给出安装命令(brew install ffmpeg 或 sudo apt-get install ffmpeg,或设置 FFMPEG_PATH)。不要自行安装系统包。
  4. 需要旁白且 <skill-dir>/node_modules/kokoro-js 缺失时:先询问用户(约 250 MB 包,外加首次使用时下载约 90 MB 语音模型,之后离线),再运行 npm install kokoro-js@1.2.1 --no-save --prefix <skill-dir>。npm ci 会将其移除,voice.mjs 打印提示时需重新安装。若用户拒绝,则改为要求提供语音文件。
  5. 编写 motion.json(完整参考见 <skill-dir>/references/schema.md,可从 <skill-dir>/references/examples/ 复制示例起步)。必须实际创建文件,若文件工具失败,可用 shell 写入(cat > motion.json <<'EOF' … EOF),然后 ls motion.json 确认存在。
  6. 校验:node <skill-dir>/scripts/validate.mjs motion.json,修复所有输出行并重复,直到显示 valid。退出码 0 表示正常,1 表示规格错误,2 表示用法/IO 错误。
  7. 自检:node <skill-dir>/scripts/render.mjs motion.json --contact-sheet 会在规格旁生成 out/contact/<scene-id>.png(每个场景一帧,取其时长的 85%)。检查每张 PNG 是否有文字裁切、元素不可见、重叠、字体错误,修正规格后重复。
  8. 预览:node <skill-dir>/scripts/preview.mjs motion.json [--open]。
  9. 渲染:node <skill-dir>/scripts/render.mjs motion.json [--out out/video.mp4] [--fps 30] [--size 1920x1080]。
  10. 修改请求(如“放慢场景 2”“把标题改成蓝色”)时,只编辑 motion.json 中被点名的字段,然后重新校验,不要从头重写规格。
  11. 完成后报告规格路径、MP4 路径及其时长和大小,以及每个场景一行说明。

规格结构

根级:size(默认 1920x1080)、fps(24、25、30、60)、background、scenes(1–50 个,总时长 ≤ 120 秒)。只有 scenes 是必需的。

场景:id、duration(0.2–60 秒)、elements、可选 background、transition(none 或 fade,0.4 秒淡入)。同一时间只有一个场景可见,场景依次播放。

元素:id(整个规格内唯一)、type、x、y(画布像素,锚点为元素中心)、可选 opacity、scale、rotate(度)、keyframes。

关键帧:t(场景内秒数,需排序,≤ 场景时长)、可选 ease,以及该类型可动画的属性。帧 i 采样 t = i/fps,因此最后一个关键帧应放在场景结束前至少一帧(1/fps 秒)。无 value 关键帧的计数器在 min(2 秒, 场景的 80%) 内以 outCubic 从 from 计数到 to。

样式默认值

深色背景,文本使用 Inter,"font": "mono" 时使用 JetBrains Mono,1920x1080 尺寸(标题 72–120 px,正文 40–48 px,字幕 ≥ 28 px)。图表自动使用深色主题,可在图表中放入 Vega-Lite config 覆盖。入场保持短促(0.5–0.9 秒),元素错开 0.2–0.4 秒,除非要求否则总时长控制在 15 秒以内。字体已内置,不要使用 CDN URL。图表必须携带内联数据(data.values,或 datasets + data.name),图表规格中任何 url 都会被拒绝。颜色必须是 hex、rgb()/hsl() 或命名颜色。

适用场景

适合制作短动画解说视频,包括标题、计数器、形状、图表和图片的关键帧运动,并可在本地预览后导出 MP4。

限制

  • 场景数量 1–50,总时长 ≤ 120 秒;单个场景时长 0.2–60 秒。
  • 音频轨道最多 20 条,不循环。
  • 图表必须使用内联数据,任何 url 都会被拒绝。
  • 字体已内置,不能使用 CDN URL。
  • 颜色必须是 hex、rgb()/hsl() 或命名颜色。
  • 校验、预览和渲染时无网络访问;唯一例外是 voice.mjs 首次运行会从 huggingface.co 下载约 90 MB 的 Kokoro 语音模型到 <skill-dir>/.cache/models,之后离线。
  • 预览服务器仅绑定 127.0.0.1,只接受本地 Host 头,只提供该技能自身文件夹以及规格中指定的图片和音频文件。渲染器会中止所有非本地请求并发送严格 CSP。
  • 若 Node、Chromium 或 ffmpeg 无法在此安装,仍可编写并校验 motion.json(校验只需 npm ci),然后向用户提供上述预览和渲染命令自行运行。
  • 音频为可选,仅在提示要求声音或用户确认时才添加;提示未提及音频时绝不添加。
  • 音乐和音效由用户提供文件;旁白可在提示要求且未提供文件时用 voice.mjs 合成。
  • 长旁白按句合成(每句上限 300 字符),因为 Kokoro 单次调用约 27 秒会截断。
  • 混音前每条轨道用 aformat=sample_rates=48000:channel_layouts=stereo 归一化,编码固定 -ac 2。
  • voice.mjs 在 finally 中释放 ORT 会话(tts.model.dispose()),失败时设置 process.exitCode 而非 process.exit()。

关于收费、价格、平台支持等具体信息,资料中暂未提供。