Communitygithub.com

dyachkovp/product-motion

为任何产品制作关于其功能特性的短视频——教程、宣传片、投资演示或落地页——采用 Linear/Stripe 风格:产品界面居中、光标点击、文字键入、镜头引导视线、旁白解说操作过程。通过 Playwright 和 ffmpeg 进行逐帧 HTML 场景渲染,样式来自项目的品牌配置文件(代码中的 token、字体、标志),画面和文字来自当前项目的代码或原型,支持 16:9 和 9:16 格式,可带或不带字幕,支持任何语言。准备用于 Gemini TTS 配音的文本和提示词,将用户提供的配音音频按词语对齐,添加背景音乐或使用用户提供的曲目,最后合成并校验文件。当你看到“制作/录制/合成视频、短片、动效、教程、宣传片或 N 秒动画,关于某个功能、界面或板块”、“为故事制作竖版剪辑”、“准备配音”、“叠加配音或音乐”、“让短片更有动感”等需求时,始终使用此技能,即使其中没有明确提到“动效”一词。

product-motion 是什么?

**dyachkovp/product-motion** 是一个 AI 代理技能,用于生成产品功能特性的营销或教学短视频。它采用程序化方法,将视频定义为 HTML 场景,其中渲染函数按时间计算帧状态,通过 `scripts/render.py` 逐帧捕获并传递给 ffmpeg 合成,避免了 CSS 动画或屏幕录制带来的卡顿和不同步问题。技能的核心原则包括:只展示产品中实际存在的功能(从代码、原型或屏幕截图中获取);样式完全来自项目自身的品牌配置文件(颜色、字体、标志),而非预设模板;配音由用户通过 Gemini TTS 或自行录制完成,技能提供文本和提示词,并将音频按词语对齐到时间线。该技能支持 16:9 和 9:16 两种格式,可生成带或不带字幕的版本,适用于教程、宣传片、投资者演示和落地页等多种场景。它提供一个完整的工具链(环境检查、场景验证、帧渲染、音频对齐与混音、最终组装),并包含详细的参考文档,指导从项目品牌提取、故事板编写到最终输出的全过程。

兼容平台~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/dyachkovp/agent-skills/tree/HEAD/product-motion

在你喜欢的 AI 中提问

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

文档

Product Motion

制作展示功能介绍的短视频:产品界面居中、光标点击、文字键入、元素逐级显现、卡片级联弹出、镜头引导视线、旁白解说操作过程。此方法已在多个产品视频中得到验证;此处已与特定品牌解耦。

原则

  1. 帧即时间的函数。 视频是一个 HTML 页面,其中 render(t) 根据时间计算帧状态,scripts/render.py 逐帧捕获并传递给 ffmpeg。不使用 CSS 动画、定时器或屏幕录制:无卡顿或不同步,任何时刻均可通过单帧验证。引擎为 templates/engine.js(references/engine.md)。
  2. 只展示产品中已有的内容。 界面、文字、状态均来自当前项目的代码、原型、docs/ 或屏幕截图。视频中不含不存在的功能。数据使用虚构的简短名称。为场景虚构的内容(回复、状态文本)会告知用户以进行核对。
  3. 风格来自产品,而非本技能。 颜色、强调色、字体、标志均来自项目的品牌配置文件(motion/brand/),该配置从项目代码中提取(references/brand.md)。本技能的默认配置文件仅用于草稿。
  4. 我们不自行合成语音。 本地 TTS 听起来像机器人。用户将获得用于 Gemini TTS 的文本和提示词(或自行录音)并发送文件;align_vo.py 将音频按词语对齐。在此之前,视频仅包含字幕和音乐。
  5. 先看帧,再渲染。 在完整渲染前,提供选定格式关键帧的联系表,并通过 verify_scene.py 进行校验。在帧阶段捕获构图错误成本最低。
  6. 不猜测用户意图。 语言、格式、加速、音乐、发布方式均来自简报或问题。如下默认值仅在用户未说明时使用。

流程

0. 环境(每台机器一次)

python3 <skill>/scripts/check_env.py

需要 Python 3.9+、ffmpeg/ffprobe、pip install playwright numpy scipy pillow(+ faster-whisper 用于配音)、python -m playwright install chromium;加速版本需要带有 rubberband 的 ffmpeg。建议在项目的 venv 或附近目录中安装;未经用户同意不要自行安装依赖——请提示命令。

1. 简报

功能;时长(未说明则单个功能 30–35 秒,板块 60–75 秒);受众与用途(教程、宣传片、投资者、落地页);语言;格式(未说明则提供 16:9 和 9:16 竖版供选择)。一次不超过两个问题;其余内容采用合理默认值,并在回复中说明。详细说明见 references/brief.md。

2. 功能详情——从当前项目获取

阅读功能的代码和原型、docs/、屏幕截图:界面、精确的文字、占位符、按钮、状态、哪些存在哪些不存在。如果不清楚用户在主要操作后看到什么,请询问。

3. 品牌配置——每个项目一次

如果项目中不存在 motion/brand/,则根据 references/brand.md 创建:brand.css(来自 CSS 变量、主题、tailwind 配置的 token)、本地字体(已验证授权)、标志。在第一个视频前向用户展示一个示例帧。后续视频直接使用已有的配置。

4. 故事板

表格:时间码 · 画面内容 · 镜头/动画 · 台词(references/storyboard.md:按时长提供的骨架,文字密度 1.3–1.6 词/秒,场景原型)。视频长于 30 秒或简报不完整时,显示表格并等待用户确认“可以”;短视频且简报清晰时,可直接组装并在显示表格的同时展示首帧。

5. 视频项目

如果项目中已有存放视频的目录(如 promo/、design/motion/ 等),则放在那里;否则放在 motion/<slug>/。

python3 <skill>/scripts/new_project.py motion/<slug> --brand motion/brand --lang ru --title "功能 · 产品"

包含:video.html、plan.js、cues.js、tmap.js、engine.js、processing.js、base.css、brand/、build/、out/、README.md。build/ 和大型 out/*.mp4 应加入项目的 .gitignore,除非用户另有决定。如果项目中有 docs/,则添加一个指向视频及其 README 的简短链接。

6. plan.js 和场景

plan.js 是唯一数据源:duration、fps、canvas、language、product、audience、hold、语音提示 vo[](id、at、text、tts、subs)、pronounce、emphasis、music。window.PLAN = 后为严格的 JSON。

在 video.html 中,将演示内容替换为实际功能界面:build(重复元素)、setup(E.measureAt + E.rect 测量、两种格式的相机关键帧、光标、点击)、scene(t)。屏幕事件应与语音提示的词语同步(E.sync('p3:слово', 备用))。暗色界面和模态框通过 E.dim() 和 #app2 实现。场景配方见 references/scenes.md,运动与相机规则见 references/motion.md。使用滑块预览:video.html?preview=1,通过 python3 -m http.server 在视频目录中启动。

7. 帧校验

python3 <skill>/scripts/verify_scene.py video.html --fmt both
python3 <skill>/scripts/render.py video.html stills --fmt both --times 1,6,9,12,15,19,23,27,31,34 --sheet

打开 build/stills/sheet_h.jpg 和 sheet_v.jpg:相机对准动作;标签位于对应片段下方;文本无换行或截断;强调色仅在指定位置;“处理→结果”切换处无白色闪烁;9:16 格式文本足够大,字幕位于底部面板之上。调整至关键帧无误。首次渲染前阅读 references/pitfalls.md。

8. 配音

python3 <skill>/scripts/vo_pack.py plan.js            # --model 3.8 用于 Gemini 3.8 Flash TTS, --voice female

以两个独立的代码块提供 out/voiceover/tts_text.txt 和 tts_prompt.txt(文本放在文本字段,提示词放在样式字段)、语音(俄语男性建议首选 Schedar)、要求一次性完整录制以及来自 timing.md 的表格。用户也可以使用同一文本自行录制。规则见 references/voiceover.md。

9. 配音到达 → 对齐

python3 <skill>/scripts/align_vo.py plan.js voice.wav        # build/vo_aligned.wav, cues.js, out/subtitles.srt, 报告

阅读 build/align_report.md:将标记为“需人工校验”的词语连同时间码告知用户;偏移的语音提示最好在 plan.js 中修正。如果语音在最后一帧(hold)之后仍未结束,脚本将停止。

加速仅为建议。 如果视频感觉“拖沓”,建议使用 retime.py(朗读速度 +4.5%,更短的停顿,为视频、语音、音乐和字幕使用统一时间映射)。仅在用户同意后才执行加速。

10. 音乐、混音、渲染、组装

python3 <skill>/scripts/music.py plan.js --out build/music.wav                         # 根据 music 部分合成草稿音乐
python3 <skill>/scripts/prepare_music.py plan.js track.mp3 --end-align --out build/music.wav   # 或使用用户提供的曲目
python3 <skill>/scripts/mix.py build/music.wav build/vo_aligned.wav --out build/mix.wav
python3 <skill>/scripts/render.py video.html video --fmt h --out build/h_subs.mp4
python3 <skill>/scripts/render.py video.html video --fmt h --qs subs=0 --out build/h.mp4
python3 <skill>/scripts/assemble.py --video build/h.mp4 --audio build/mix.wav --out out/<slug>_16x9.mp4
python3 <skill>/scripts/assemble.py --video build/h_subs.mp4 --audio build/mix.wav --out out/<slug>_16x9_subs.mp4
#   ... 如果简报中包含竖版,则对 --fmt v 执行相同操作(_9x16,_9x16_subs)
python3 <skill>/scripts/verify_media.py plan.js out/*.mp4 --sheet

渲染速度约为每分钟视频 2–5 分钟(取决于格式)——请在后台或分段执行(--start/--end,使用 assemble.py --video part1 part2 … 拼接)。合成的音乐是临时的;对于公开视频,建议使用授权曲目。详情见 references/audio.md。如有要求,使用 export_web.py(纯净 MP4、WebVTT、海报图、最终帧)生成用于网站播放器的文件;未经用户单独决策不得执行发布。

交付给用户的内容

  • 选定格式的文件:<slug>_16x9.mp4、<slug>_16x9_subs.mp4(+ _9x16)、SRT、配音包(在录音之前)、联系表。提供文件路径;如有文件发送工具,请使用它发送。
  • 简要说明:时长、各场景内容;哪些内容是虚构的并需要与产品核对;音乐为临时;哪些内容未经验证(例如未人工试听)。
  • 更新视频文件夹的 README:状态、简报决策、如何重新构建。
  • 不重述流程,不宣传“革命性 AI”。

技能文件

templates/engine.js帧引擎:相机、光标、点击、暗化与上层 #app2、字幕(subs=0)、时间映射 tmap.js、预览 preview=1、测量、markup/grad/plural
templates/base.css基于品牌 token 的组件:头部、渐变输入框、标签、提示、暗色处理、输出、弹出框、聊天、评分、结尾
templates/brand/默认品牌配置:brand.css、Manrope(OFL)、占位标志
templates/processing.js默认处理动画(环形、强调色光晕、飞入卡片)
templates/starter.html、plan.js一个约 36 秒的演示视频“智能搜索”,用于虚构产品 Demo:吸引注意 → 带标签输入 → 提示 → 处理 → 带“为什么”的输出 → 保存 → 评分 → 结尾
scripts/check_env、new_project、verify_scene、render、vo_pack、align_vo、retime、music、prepare_music、mix、assemble、verify_media、export_web
references/brief.md · brand.md · storyboard.md · scenes.md · motion.md · engine.md · voiceover.md · audio.md · pitfalls.md

相关技能