Communitygithub.com

MoizIbnYousaf/marketing-cli

录制产品演示和操作视频,用于市场营销素材。支持两种模式:使用 ply + ffmpeg 快速截图拼接演示,或使用 Remotion 制作精美合成视频。

marketing-cli 是什么?

这是一个 AI 代理技能,用于为市场营销资产录制产品演示和操作视频。它提供了两种视频制作路径:一种是使用 ply 和 ffmpeg 进行快速截图拼接的简短演示,另一种是使用 Remotion 制作更具品牌化、带有过渡和文字叠加的精美营销视频。该技能首先读取品牌指南(如颜色、字体、Logo),然后根据用户需求(如英雄视频、功能亮点、完整教程、社交媒体短片)确定演示类型,并规划镜头列表。之后,它根据所选的制作模式执行:快速模式依靠命令行截图和 ffmpeg 拼接,而精美模式则会生成一个 Remotion 合成结构,包括开场、演示场景、过渡和结尾,并内置了演示讲故事原则(如“以结果开场”、“一个功能一个演示”、“展现魔法时刻”)和错误恢复机制。所有输出都统一保存在 `marketing/demos/` 目录下,并附带摘要。该技能适用于 Cursor 等支持 CLI 工具的 AI 编程助手,但需要系统安装 `ply`、`ffmpeg` 和 `npx` 等工具。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/MoizIbnYousaf/marketing-cli/tree/HEAD/skills/marketing-demo

在你喜欢的 AI 中提问

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

文档

/marketing-demo — 产品演示录制器

为市场营销录制产品演示。提供两种制作路径:快速路径(使用 ply + ffmpeg)适用于粗糙演示,精美路径(使用 Remotion)适用于品牌营销视频。

读取内容

  • brand/creative-kit.md — 品牌叠加层的颜色、字体、Logo 路径
  • brand/voice-profile.md — 文字叠加层的语调指南
  • brand/stack.md — 可用工具(ply、ffmpeg、remotion)

激活时

  1. 读取 brand/creative-kit.md 以获取颜色、字体、Logo 路径。如果缺失,询问品牌颜色和 Logo。
  2. 读取 brand/voice-profile.md 以获取文字叠加层的语调指南。如果缺失,使用清晰/中性语调。
  3. 读取 brand/stack.md 以确认可用工具。如果缺失,直接检测工具。
  4. 检查工具可用性:
    command -v ply && echo "ply: ready" || echo "ply: missing"
    command -v ffmpeg && echo "ffmpeg: ready" || echo "ffmpeg: missing"
    command -v npx && echo "remotion: available" || echo "remotion: unavailable"
    
  5. 如果 ply 或 ffmpeg 缺失,发出警告并建议安装。

镜头时长规则

演示类型每镜头时长备注
快速概览0.5-1s快速剪辑,营造兴奋感
功能演示2-3s留出阅读和理解的时间
操作指南4-5s教学节奏
社交媒体片段1-2s吸引注意力,节奏快

演示讲故事原则

如果演示只是机械地展示产品,而不是讲述一个故事,那就会失败。观众需要一个继续观看的理由。这些原则来自在落地页和社交媒体上真正能获得参与度的方法:

  1. 以结果开场,而非设置过程。 前 2 秒决定是否有人观看剩余部分。展示“之后”的状态——带有数据的仪表盘、完成的设计、最终结果。设置过程(登录、加载、导航)不会获得任何关注。
  2. 一个功能 = 一个演示。 试图在 30 秒内塞入 5 个功能会让所有功能都变得容易被遗忘。一个专注于一个功能的演示胜过一次匆忙的巡览。
  3. 展现魔法时刻。 每个产品都有一次交互能让用户发出“哇”的感叹。找到那个时刻,并围绕它构建演示——这是人们点击“试用”的原因。
  4. 用文字叠加层提供上下文。 社交媒体视频在自动播放时会静音。如果没有文字标注,观众只会看到界面在变化,却不知道发生了什么以及为什么重要。每个镜头都需要一个 3-6 个字的叠加层来解释其价值。
  5. 节奏:每个概念 2-3 秒。 这感觉很快,但观众的注意力非常有限。如果一个镜头没有提供新信息来赢得屏幕时间,就剪掉它。

步骤 1:确定演示类型

类型时长分辨率格式用途
英雄演示15-30s1280x800MP4落地页首屏
功能亮点5-15s1280x800GIF/MP4功能板块、文档
完整操作指南60-180s1280x800MP4YouTube、销售演示
社交媒体片段5-15s1080x1080MP4Instagram、Twitter/X
邮件 GIF3-8s600x400GIF邮件营销活动
操作教程30-90s1280x800MP4帮助文档、新手引导

询问用户选择哪种类型,或从上下文中推断。

步骤 2:规划镜头列表

在录制前,规划每个镜头:

## 镜头列表

1. [操作:导航至落地页]
   - URL: https://example.com
   - 等待:1s 用于加载
   - 高亮:英雄板块

2. [操作:点击“开始入门”按钮]
   - 等待:过渡动画
   - 高亮:注册表单

3. [操作:填写演示数据]
   - 输入:[email protected]
   - 高亮:成功状态

每个镜头 = 一个 ply 截图或交互序列。

步骤 3:选择制作模式

模式 A:快速演示(ply + ffmpeg)

将截图快速拼接成视频的粗糙演示。

捕获截图:

# 导航并截图每个镜头
ply navigate "https://example.com"
ply screenshot --output marketing/demos/shot-01.png
ply click "Get Started"
ply screenshot --output marketing/demos/shot-02.png

使用 ffmpeg 拼接:

# 从截图生成 MP4(每帧 2 秒)
ffmpeg -framerate 0.5 -i marketing/demos/shot-%02d.png \
  -c:v libx264 -pix_fmt yuv420p \
  -vf "scale=1280:800:force_original_aspect_ratio=decrease,pad=1280:800:(ow-iw)/2:(oh-ih)/2" \
  marketing/demos/demo.mp4

# 预览 GIF(较低质量,较小文件)
ffmpeg -i marketing/demos/demo.mp4 \
  -vf "fps=10,scale=640:-1:flags=lanczos" \
  -c:v gif marketing/demos/demo-preview.gif

# 邮件 GIF(600px 宽,已优化)
ffmpeg -i marketing/demos/demo.mp4 \
  -vf "fps=8,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
  marketing/demos/demo-email.gif

# 为社交媒体裁剪为正方形(1080x1080)
ffmpeg -i marketing/demos/demo.mp4 \
  -vf "crop=min(iw\,ih):min(iw\,ih),scale=1080:1080" \
  marketing/demos/demo-square.mp4

模式 B:精美演示(Remotion)

用于营销级输出,包含过渡、文字叠加层、品牌化开场。

生成 Remotion 合成:

# 如果需要,初始化
npx remotion init marketing/demos/remotion-demo

# 渲染最终视频
npx remotion render marketing/demos/remotion-demo/src/index.tsx \
  --output marketing/demos/demo-polished.mp4

合成结构:

src/
├── index.tsx          # 根合成
├── Intro.tsx          # 品牌化开场(Logo、标语)
├── DemoScene.tsx      # 带文字叠加层的截图
├── Transition.tsx     # 场景间的淡入/滑动
└── Outro.tsx          # CTA + URL

关键 Remotion 模式(完整组件代码请参见 references/remotion-examples.md):

  • 使用 <Img> 显示截图,<AbsoluteFill> 进行布局
  • 使用 useCurrentFrame() + interpolate() 实现动画
  • 从 brand/creative-kit.md 获取品牌颜色
  • 使用 30fps 实现流畅播放,分辨率 1280x720 或 1920x1080
  • 使用 <Sequence> 添加标注功能的文字叠加层

开场场景(2-3 秒): Logo 居中,标语淡入。使用品牌颜色作为背景渐变。保持简短——产品才是主角。

演示场景(每镜头): 截图填充 80% 的帧。在顶部或底部放置文字叠加层,包含一行功能介绍。使用 interpolate() 实现微妙的缩放效果(在场景持续时间内从 1.0 到 1.05),增加动感。

场景间过渡: 淡入 + 轻微滑动(200 毫秒)。永远不要使用花哨的转场效果——它们会分散对产品的注意力。

结尾场景(3-4 秒): CTA 文字(“在 [url] 免费试用”)、Logo 和可选的社会证明语句。这是唯一一个用于推销的幻灯片——保持所有其他幻灯片专注于展示。

错误恢复

ply 失败(页面未加载、元素未找到、超时):跳过到镜头 N+1,并在镜头列表中记录失败。所有镜头完成后,审查跳过的镜头并重试一次。如果仍然失败,使用手动截图作为备用方案。

ffmpeg 失败(未找到编解码器、格式错误):使用 ffmpeg -codecs 检查可用编解码器。如果缺少 libx264,尝试 -c:v h264 或通过 brew install ffmpeg 安装。对于 GIF 调色板问题,简化滤镜链——删除 split/palettegen/paletteuse,使用基本的 -vf "fps=10,scale=640:-1"。

Remotion 失败(渲染崩溃、合成错误):检查 Node 版本(node -v,需要 18+)。如果 npx remotion render 失败,尝试使用 npx remotion render --gl=angle 或 --gl=swangle 解决 GPU 问题。对于合成错误,验证所有 <Img> src 路径正确且图片存在。

步骤 4:转换和输出

所有输出都保存到 marketing/demos/。按类型命名:

输出文件名备注
MP4(桌面)demo-hero.mp4H.264,1280x800
MP4(社交媒体)demo-social-1080.mp4正方形,1080x1080
GIF(预览)demo-preview.gif640px 宽,<5MB
GIF(邮件)demo-email.gif600px 宽,<2MB
MP4(精美)demo-polished.mp4Remotion 输出

步骤 5:完成摘要

## 创建的演示资产

| 资产 | 大小 | 格式 | 建议用途 |
|-------|------|--------|--------------|
| demo-hero.mp4 | 1.2MB | MP4 1280x800 | 落地页英雄视频 |
| demo-preview.gif | 3.4MB | GIF 640px | README、文档 |
| demo-email.gif | 1.1MB | GIF 600px | 邮件营销活动 |
| demo-social-1080.mp4 | 800KB | MP4 1080x1080 | Instagram、X |

所有资产已保存到 `marketing/demos/`。

视口配置

平台宽度高度缩放比例
桌面12808001x
桌面 HD192010801x
移动端3908442x
Instagram108010801x
Twitter/X12006751x
邮件6004001x

反模式

错误失败原因
录制登录/注册流程没人关心你的认证界面。从登录后开始。
显示加载中的旋转图标编辑掉它们或直接跳到加载完成状态。旋转图标会破坏节奏。
静音自动播放时没有文字叠加层社交媒体视频自动播放时会静音。没有文字,观众不知道他们在看什么。
演示超过 60 秒且没有章节分隔注意力在 15 秒后就会下降。如果时间较长,添加清晰的章节标题。
使用不一致的视口大小录制在不同大小之间跳转的镜头显得业余。在录制前锁定视口。
展示每一个功能最多选择 3-5 个功能。什么都展示的演示最终什么都卖不出去。
鼠标光标随意游荡规划每一次点击。光标应指向明确目标——直线移动。

相关技能

  • /creative — 广告视觉、产品图片(静态资产,非演示)
  • /content-atomizer — 将演示转化为平台特定的帖子
  • /page-cro — 审核演示所展示的页面

相关技能