Communitygithub.com

nathankim0/应用演示录制器

在 Android 模拟器或 iOS 模拟器上录制干净、快速的移动应用演示片段,适用于广告、商店预览、社交媒体发布或需要屏幕录制输入的 AI 视频工具。

应用演示录制器 是什么?

这是专为开发者和 AI 智能体设计的移动应用演示录制技能,名为“应用演示录制器”(App Demo Recorder)。它能够在 Android 模拟器或 iOS 模拟器上,自动完成录制全过程:包括管理构建选择、优化设备性能(如分配内存、核心数、隐藏状态栏图标)、清除调试覆盖层和广告干扰、使用宿主端录制避免性能竞争、自动裁剪等待时间,以及检查每个片段的质量。技能适用于 macOS 环境,依赖 ffmpeg、adb(Android)或 Xcode 的 simctl(iOS),需在沙盒外以提升权限运行。用户只需指定要演示的功能,技能就会引导录制,并最终输出原始片段、收紧后的片段(推荐用于编辑)及说明文档。该技能不适合自动化测试运行或编辑已完成视频。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nathankim0/app-demo-recorder/tree/HEAD/skills/app-demo-recorder

在你喜欢的 AI 中提问

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

文档

应用演示录制器 是做什么的?

制作像真人自信使用应用一样流畅的短屏录屏:每个片段只演示一个功能,无加载卡顿、无调试覆盖层、无广告、状态栏整洁。

$S 是该技能目录下的 scripts/appdemo.sh。它需要 ffmpeg(通过 brew install ffmpeg 安装),以及 Android 的 adb 或 iOS 的 Xcode 命令 xcrun simctl。在沙箱化的智能体中,请以提升权限运行:该脚本会与模拟器、仿真器通信,并在工作区外部写入文件。

1. 确定要演示的内容

  • 如果用户未明确说明,询问要演示哪些功能。每个功能录制一个片段,命名格式为 NN_功能(例如 01_价格查询、02_计算器)。优先展示产品最擅长的功能,而不是应用启动时默认的界面。
  • 如果用途不明确,询问要使用的构建版本和账户。营销素材通常需要生产发布版本搭配真实数据。调试/预发布构建会显示开发者菜单、警告提示、测试数据,且运行速度较慢。不要自行假设;预发布录制通常需要重做。
  • 如果片段需要付费或高级状态,在触及真实计费之前,先查找应用中的调试/开发者覆盖开关。
  • 用户提供的凭据:使用输出可丢弃的命令输入(Android 上使用 adb shell input text ... >/dev/null;iOS 上使用 printf ... | xcrun simctl pbcopy <udid> 然后粘贴),而不要使用会记录每条命令的工具输入,且不要将凭据写入文件。

2. 让设备快速且安静

  • Android 模拟器:分配足够资源。小型 AVD 会导致屏幕卡顿,卡顿会出现在录制片段中。 emulator -avd <名称> -memory 6144 -cores 4 -gpu host -no-snapshot-save -no-boot-anim 如果相同应用 ID 已使用不同签名密钥安装,请改用另一个 AVD 而非卸载(卸载会删除用户数据)。
  • 安装并运行发布版本;登录;在录制前关闭首次运行弹窗、权限提示和插屏广告。
  • $S statusbar on:固定时间(APPDEMO_TIME,默认为 9:41)、满电满信号、隐藏通知图标。$S statusbar off 可恢复。
  • 在 Android 上,不要在应用根界面按系统返回键。这会结束 Activity,导致应用内(如高级开关、功能标记)的覆盖设置丢失。

3. 排练,然后录制

  1. 每个片段在不录制的情况下先排练一次。 熟悉点击位置、坐标和等待时间。打开一次界面也能预热缓存,使得正式录制时加载更快。
  2. 录制:
    $S start 01_价格查询
    # 操作应用:adb shell input tap/swipe/text、xcrun simctl 或 UI 自动化工具
    $S stop 01_价格查询        # -> $APPDEMO_OUT/01_价格查询.mp4
    
    录制在宿主机上运行(adb emu screenrecord / simctl io recordVideo)。不要在模拟器内使用 adb shell screenrecord:它会与应用竞争 CPU,可能导致 UI 冻结,使滚动和点击无法显示。
  3. 将一个片段的所有操作作为一批发送,间隔短(0.5–2.5 秒),而不是每步调用一次工具。在步骤间检查屏幕会留下长时间的空白停顿。
  4. 滚动时采取有意的步进(约屏幕的 40%,每次滑动 600–800 毫秒),让观众能够阅读。
  5. 非 ASCII 文本(韩语、表情符号)使用 UI 驱动的文本输入;adb shell input text 仅支持 ASCII。
  6. 当某个功能只有包含数据才有价值时(如账本、日记、购物车),录制创建一条真实记录,然后立即删除它,并确认界面恢复到原始状态。先检查共享默认设置:新发帖可能是公开的。

4. 检查每个片段

$S strip $APPDEMO_OUT/01_价格查询.mp4 /tmp/01.jpg 8

查看截图序列,而不是只看脚本:确认每一步预期的操作确实发生了(滚动移动了、标签切换了、结果出现了),并且屏幕上没有不需要的内容:提示弹窗、遮挡内容的键盘、广告、个人数据(如真实地址)或调试横幅。重新录制失败的片段;不要发布一个操作静默失败的片段。

5. 剪掉等待时间

$S tighten in.mp4 out.mp4          # 裁剪空白开头、冻结片段 -> 0.35 秒,最终结果画面保留 1.5 秒
$S speed  in.mp4 out.mp4 1.3       # 可选的统一加速

tighten 会在第一个真实操作前 0.4 秒开始片段(start 后的空闲秒数不可能完全静止,仅靠冻结检测会漏掉),并缩短每个画面无变化的片段,使得点击像熟悉应用的人一样连贯。典型片段长度大约减半。使用 strip 再次检查收紧后的片段:如果微小变化(输入数字、切换标签)被裁剪,则降低 --noise;如果仍有停顿,则降低 --min-freeze。

6. 交付

将所有内容放入一个文件夹:原始片段、收紧后版本(推荐用于编辑),以及一个简短的 README,列出每个片段、演示内容以及用户需要知道的信息(创建并删除的数据、可见的个人数据、模拟器顶部的摄像头挖孔区域)。报告片段长度以及未能录制的内容及其原因。

相关技能