用途 该技能用于根据真实应用录制,编辑出一段新的移动端 Demo 视频。内置渲染器生成静音视频,可配置画面尺寸、帧率、取景和淡入淡出。默认 1080x1920、30fps,使用手机边框和暖色纸质背景。一个不错的默认节奏是一个功能 20 到 40 秒,可按需求调整叙事和节奏。
前置条件 使用 Python 3.10+、Pillow 10.1+ 和 ffmpeg(包含 ffprobe 和 libx264)。使用 mobile-demo-record 进行录制需要 macOS;编辑已有素材则不需要。字体发现依次尝试 macOS 系统字体、Linux DejaVu 字体、Pillow 回退字体;为保证跨机器排版一致,应指定字体文件。在临时虚拟环境中安装 Pillow:
python3 -m venv <scratch>/film-venv <scratch>/film-venv/bin/pip install "Pillow>=10.1"
之后使用该环境的 Python 执行下列命令。命令假定仓库根目录为工作目录。输出目录会自动创建;已有输出会被覆盖;源素材和合成规格不能用作影片输出。
工作流 规划一个故事:写一张简短的屏幕动作与时长表。从用户操作开始,展示应用响应,最后落在可见结果上;游览类视频也可以从完成后的成品开始。拍摄前先确认功能可用。 用 mobile-demo-record 采集真实素材,使用演示数据,每个节拍单独一条拍摄。如果故事需要智能体执行工作,使用可用的主机和智能体。需要桌面切入镜头时用 cdp-verification 采集。 在选择剪辑点前先归一化。模拟器录制帧率可变:
python3 .agents/skills/mobile-demo-film/scripts/film.py normalize raw/01.mov cfr/01.mp4
从这份恒定帧率副本中选择起止时间戳。24fps 项目可加 --fps 24(默认 30)。 在录制文件旁编写 JSON 规格并合成:
python3 .agents/skills/mobile-demo-film/scripts/film.py compose <scratch>/film.json
检查联系表并完整播放影片:
python3 .agents/skills/mobile-demo-film/scripts/film.py sheet <scratch>/film.mp4 <scratch>/sheet.jpg
可加 --frames 12 --height 480 自定义采样和缩略图高度。默认联系表采样 8 帧;播放时也要检查转场和打字。检查文字被裁切、界面不可读、隐私信息、加载转圈和意外的时钟变化。 交付影片并说明构建版本、环境、预置数据和省略的步骤。仅在要求时起草配套发布文案;发布需要用户授权。 打字和阅读保持自然节奏,裁剪或加速等待,让时间跳跃清晰。用标题卡解释缺失的上下文,而不是暗示应用里发生了未录制的操作。取景、遮罩和模拟灵动岛属于呈现层,不要在录制内容里伪造应用状态。
合成规格 以下示例组合手机画面、桌面切入镜头、结果和片尾卡。替换其中的路径、切点和文案以适配要演示的功能。
{ "output": "film.mp4", "backdrop": "#F2F0EB", "segments": [ { "type": "phone", "src": "cfr/01.mp4", "start": 1, "end": 7, "label": "Start on your phone" }, { "type": "card", "eyebrow": "Meanwhile", "title": "The agent works on your Mac.", "image": "shots/desktop.png", "duration": 4 }, { "type": "phone", "src": "cfr/02.mp4", "start": 0, "end": 10 }, { "type": "end", "wordmark": "Superset", "caption": "Review the result anywhere", "duration": 2.2 } ] }
媒体、输出以及可选的 titleFont/sansFont 路径相对规格文件解析,也支持绝对路径。顶层 backdrop、bezel、ink、muted 接受 #RRGGBB。
输出与取景 在规格中添加 render 对象。已有规格不带该对象则保持竖屏默认值。横屏演示示例:
"render": { "width": 1920, "height": 1080, "fps": 24, "crf": 18, "fade": 0.2, "phone_width": 0.45, "phone_height": 0.8, "bezel_width": 0.012, "corner_radius": 0.1 }
方形片段使用 "width": 1080, "height": 1080。卡片和排版随画布缩放;居中的手机在保持源宽高比的同时适配宽度和高度限制。桌面素材不加框时使用 raw。
渲染选项:
- width、height:画布像素,偶数整数至少 64。默认 1080、1920。
- fps:整数 1–120,默认 30。
- crf:最终 H.264 质量,0–51,越低质量越高、文件越大,默认 18。
- fade:淡入淡出秒数,0 关闭,默认 0.35;上限为每个带框/静帧片段时长的一半;raw 片段无淡入淡出。
- phone_width、phone_height:屏幕最大宽高占画布比例,大于 0 且至多 0.95。默认 0.615、0.82。
- bezel_width:边框厚度占较小画布尺寸比例,0–0.25,默认 0.015。
- corner_radius:屏幕圆角占屏幕宽度比例,0–0.25,默认 0.137。
片段类型:
- phone:src,可选 start/end(秒)、speed(默认 1)、label、island(false 关闭叠加)。
- raw:src,可选 start/end、speed;不加框素材适配输出画布并加黑边。
- card:title,可选 eyebrow、caption、image、footer、duration(默认 4 秒)。
- end:wordmark 或透明 PNG 标志,可选 caption、duration(默认 2.2 秒)。
切点须在源时长内且 speed 为正,每个片段至少持续一个输出帧。渲染器在编码前校验所有片段和源路径。卡片标题会换行;caption、label、footer 应简短。渲染器会移除音频,因此需要旁白或应用声音时应改用其他剪辑流程。
将原始拍摄、规格和成片存放在临时目录。同事需要重新编辑某个演示时,共享输入和规格即可;创建新演示时则不需要。
复用与检查渲染器 运行 film.py --help 或子命令加 --help 查看 CLI 选项。该 Python 模块也可导入:normalize(src, dst, fps=30)、compose(spec_path)(返回输出 Path)、sheet(src, dst, frames=8, height=900) 均可不经 CLI 调用。RenderSettings 保存布局计算,不依赖可变的全局画布设置。 修改渲染器后,运行其针对性测试(需要 ffmpeg 和 Pillow):
python3 -B -m unittest discover -s .agents/skills/mobile-demo-film/scripts -p 'test_*.py'
这些测试渲染小的竖屏、横屏和方形合成,检查输出尺寸、帧率和时长,并覆盖无效规格。还要按预期交付尺寸检查联系表;自动化检查无法判断可读性和构图。
适用场景 适合把真实移动应用录屏整理成产品功能演示短视频,支持竖屏、横屏、方形输出,可组合手机画面、标题卡、桌面切入镜头和片尾卡。
限制 需要 ffmpeg 和 Pillow 环境;使用 mobile-demo-record 录制需 macOS;输出为静音视频,不支持音频;渲染器会移除音频,需要旁白或声音时应改用其他剪辑流程。缺少的具体功能、收费、价格或平台信息暂未提供。