Communitygithub.com

motion-video

直接在 Mac 上生成专业动态图形视频(MP4,含原创合成音乐,画面随节拍切换),无需 ffmpeg、素材或下载。

motion-video 是什么?

此 AI 技能允许您仅使用 macOS 和 Xcode 命令行工具,在本机生成 10-30 秒、具有专业水准的动态图形视频。它包含一个完整的引擎:Swift 编写的音频合成引擎负责生成原创配乐,CoreGraphics/CoreImage 渲染引擎逐帧绘制画面(支持亚帧运动模糊、真实高斯模糊、磨砂玻璃和胶片颗粒效果),最终由 AVFoundation 编码为 H.264 + AAC 格式的视频。技能提供了清晰的文件夹结构和参考文档(如运动方向指南、配乐编写指南、引擎 API 文档),指导您按照“简报 → 调研 → 资产收集 → 节拍网格规划 → 项目搭建 → 配乐编写 → 场景与静帧审查 → 最终渲染交付”的流程工作。它特别适合制作产品宣传片、App Store 预览视频、发布说明视频、社交媒体短片(Reels/TikTok/Shorts)或功能演示,强调画面内容的真实性和一致性:所有屏幕上的信息都必须可溯源(如实际的代码字符串、通知文案),并优先使用重建的矢量 UI 而非截图。支持从用户反馈中进行修订,如调整节奏、更换音乐情绪或改变画面比例。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/huypham85/app-3d-video-skill/tree/HEAD/motion-video

在你喜欢的 AI 中提问

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

文档

Motion video

生成 10–30 秒的动态图形短片,全部通过真实代码实现:Swift 音频合成引擎编写乐谱,Swift CoreGraphics/CoreImage 渲染引擎在同一节拍网格上绘制每一帧(支持亚帧运动模糊、真实高斯模糊、磨砂玻璃、胶片颗粒效果),AVFoundation 编码为 H.264 + AAC。此技能文件夹中包含所有必需内容;仅依赖 macOS 和 Xcode 命令行工具。

标准是“动态设计师的作品集”,而非演示:每个画面都与音乐节拍对齐,屏幕上的内容没有装饰性噪音,每个声称都为真。

文件夹结构

  • engine/ — audio_core.swift + audio_main.swift(乐谱引擎),video_core.swift + video_main.swift(渲染引擎)。每个项目请勿编辑此处;项目代码应放入项目文件夹。
  • scripts/mv.sh — 构建并运行:audio,stills <beats>,video [out]。levels.py、sheet.py、probe.swift 由它调用。
  • 完整的示例项目位于配套技能 app-3d-video(template/:score.swift、scenes.swift、project.env,以及 SceneKit 层 s3d.swift)。对于纯 2D 视频,请复制其 project.env 和 score.swift,然后根据 references/engine-api.md 编写全新的 scenes.swift。
  • examples/scores/energetic-128bpm.swift — 高能量发布乐谱(包含鼓点断奏、填充、中断)。
  • references/motion-direction.md — 根据基调调整节奏、缓动、转场、布局、叙事模式及审查清单。编写场景前请阅读此文档。
  • references/score-guide.md — 速度/调性/编配方法,匹配品牌声音的调性,响度目标。编写乐谱前请阅读此文档。
  • references/engine-api.md — 每个绘图/音频函数及其签名。编写代码时阅读。

工作流程

1. 简报(限定为确实能改变结果的问题)

确定:目的与受众、时长、画面比例(默认 1080×1920 竖屏;通过 W/H 可设为 1920×1080 或 1080×1350)、基调、屏幕文案的语言。如果用户不在意,使用默认值:15 秒、竖屏、英文文案、基调与产品领域匹配。如果请求的内容在符合基调所需速度的情况下无法塞入给定时长,请提出并询问放弃哪个——时长还是内容——而不是强行压缩。(例如,一个健康类应用想要平静的节奏和15 秒的时长;答案是删减场景,而非加快速度。)

2. 调研事实

屏幕上的所有内容必须可溯源:

  • 已发布的内容:自最近几个版本号更新以来的 git log、CHANGELOG、发布说明。
  • 准确的产品文案:阅读代码以获取通知标题/正文、按钮标签、Siri/意图对话框字符串、代码片段标题、新手引导文本。直接引用它们;不要将其改写为承诺。
  • 标记任何示意性内容(示例名称、计数、时间),并在交付时告知用户。
  • 保持故事内部一致:如果场景 1 在 9:41 记录了 Metformin,场景 2 就不能询问上次服用 Metformin 的时间并回答“13 小时前”——请使用另一种药物。

3. 资产

收集真实的品牌资产:应用图标(最大 PNG)、Logo、品牌颜色(设计符号/资源目录)、产品已使用的官方徽章(例如“Works with Apple Health”),以及产品自身的声音(通知/声音 Logo 的 WAV 文件)。将一次性声音素材转换为合成器可用的格式:afconvert -f WAVE -d LEF32@48000 -c 1 in.wav assets/name.wav;如果仓库中有 sharp/resvg,则使用它们将 SVG 转换为 PNG,或使用 qlmanage -t -s 1024。

优先使用包含一套数据集的矢量 UI 重建(一张壁纸、一个时钟时间、一组姓名),而非原始截图。不同来源(不同时间、设备、数据、框架)的截图并排展示会显得奇怪;观看者会立刻注意到。如果确实需要使用截图,请在单次会话中捕获它们:xcrun simctl status_bar booted override --time 9:41 …,之后清除覆盖状态,并且绝不捕获其他恰好打开的应用。

4. 在节拍网格上规划

时长 = 小节数 × 4 × 60 / BPM,因此需一起选择 BPM 和小节数(15 秒 = 96 BPM 下 6 小节,128 BPM 下 8 小节)。在项目中编写 plan.md:一个表格,包含 小节 → 场景 → 每个节拍上的画面揭示(文字浮现、卡片落下、勾选弹出、转场)。每小节一个想法;重要时刻(Logo、关键功能、结束卡)位于强拍上。参见 references/motion-direction.md 中的基调预设和模式。

5. 项目文件夹

在 ~/Movies/MotionVideo/<slug>/ 中工作(可持久保留以供后续修改):

mkdir -p ~/Movies/MotionVideo/<slug> && cp ~/.claude/skills/app-3d-video/template/{project.env,score.swift} ~/Movies/MotionVideo/<slug>/

编辑 project.env(BPM、DURATION、W、H、FPS),将品牌资产放入 assets/,然后重写 score.swift 并编写 scenes.swift。在 scenes.swift 顶部重新分配调色板变量(INK、TEAL、MINT、GREEN、GLOW、PAPER、DARKTEXT、ORANGE、DARK_MID、LIGHT_GLOW_A/B)以匹配品牌。

6. 先编写乐谱

编写 score.swift(配方参见 references/score-guide.md),然后运行 mv.sh <dir> audio。您无法听到它——请阅读电平输出:RMS 在基调的目标范围内,无削波,段落对比符合预期(安静的引子、高音补强的升起、任何中断处的凹陷)。视频会读取 music.wav 以用于音频响应元素,因此请在渲染静帧之前渲染音频。

7. 场景,然后静帧审查——至少两轮

编写 scenes.swift,定义 func render(_ t: Double, frame: Int),然后运行:

~/.claude/skills/motion-video/scripts/mv.sh <dir> stills 0.5,2,4.25,6,8.5,10,13,16,20,22.5

打开 <dir>/sheet.png 并依据 references/motion-direction.md 中的清单进行检查(弹性超调处的重叠、裁剪的降部、过小的文本、混乱的淡入淡出、不一致的 UI、空白空间)。还需选取转场中间的节拍点,而不仅仅是静止状态。修复并重新渲染静态帧,直到某一轮检查结果干净无问题。静帧渲染速度约为 0.1 秒/帧,因此可以自由迭代。

8. 最终渲染与验证

mv.sh <dir> video <dir>/out.mp4 — 在 SUB=5 运动模糊下,渲染速度约为 0.3–0.5 秒/帧(15 秒 @ 60 fps ≈ 5–8 分钟),因此请在后台运行。探针会打印时长和轨道信息;此外,提取几帧(.build/probe out.mp4 <dir> 2,5,9,12)并进行查看。

9. 交付

复制到 ~/Downloads/<Product>_<Topic>_<duration>s[_vN].mp4,使用 SendUserFile 发送,并汇报:逐节拍的叙事(以秒为单位)、哪些资产和字符串是真实的、哪些是示意性的、您仅通过测量来判断音频,以及为用户提供一个简短的检查清单(调高音量收听、在手机上检查可读性、品牌/徽章使用情况)。修订时保留先前版本(v1/)。

修订

大多数反馈对应一个调节旋钮:更慢/更平静 → 降低 BPM + 减少场景 + 阻尼弹簧(k≈5, w≈6)+ 更长的揭示(0.9–1 节拍)+ 使用焦点变焦/光圈转场而非甩切;更高能量 → 使用高能量乐谱、带超调的弹簧、甩切、鼓点上的闪光效果;“我不理解功能 X” → 在一个设备上展示完整的因果链(请求 → 响应 → 结果),使用产品真实的响应文案,并以价值而非功能名称作为标题。

相关技能