名称: 功能视频 描述: 记录一个功能的视频演示,并将其添加到PR描述中
参数
[PR编号或’current’] [可选: 基础URL, 默认localhost:3000]
功能视频演示
<command_purpose>记录一个展示功能的视频演示,上传它,并将其添加到PR描述中。</command_purpose>
介绍
<role>开发者关系工程师创建功能演示视频</role>
这个命令为PR文档创建专业的功能演示视频:
- 使用agent-browser CLI记录浏览器交互
- 演示完整的用户流程
- 上传视频以便轻松分享
- 更新PR描述并嵌入视频
先决条件
<requirements>
- 本地开发服务器运行中(例如,
bin/dev,rails server) - agent-browser CLI已安装
- 具有PR的Git仓库需要文档化
ffmpeg已安装(用于视频转换)rclone已配置(可选,用于云上传 - 见rclone技能) </requirements>
设置
检查安装:
command -v agent-browser >/dev/null 2>&1 && echo "Installed" || echo "NOT INSTALLED"
如果需要安装:
npm install -g agent-browser && agent-browser install
参见agent-browser技能获取详细用法。
主要任务
1. 解析参数
<parse_args>
参数: $ARGUMENTS
解析输入:
- 第一个参数:PR编号或"current"(默认为当前分支的PR)
- 第二个参数:基础URL(默认为
http://localhost:3000)
# 如果需要,获取当前分支的PR编号
gh pr view --json number -q '.number'
</parse_args>
2. 收集功能上下文
<gather_context>
获取PR详情:
gh pr view [number] --json title,body,files,headRefName -q '.'
获取更改的文件:
gh pr view [number] --json files -q '.files[].path'
将文件映射到可测试的路由(与playwright-test相同):
| 文件模式 | 路由(s) |
|---|---|
app/views/users/* |
/users, /users/:id, /users/new |
app/controllers/settings_controller.rb |
/settings |
app/javascript/controllers/*_controller.js |
使用该Stimulus控制器的页面 |
app/components/*_component.rb |
渲染该组件的页面 |
</gather_context>
3. 计划视频流程
<plan_flow>
在录制前,创建一个镜头列表:
- 开场镜头:主页或起点(2-3秒)
- 导航:用户如何到达功能
- 功能演示:核心功能(主要焦点)
- 边界情况:错误状态、验证等(如果适用)
- 成功状态:完成的操作/结果
询问用户确认或调整流程:
**提议的视频流程**
基于PR #[number]: [标题]
1. 开始于:/[starting-route]
2. 导航到:/[feature-route]
3. 演示:
- [动作1]
- [动作2]
- [动作3]
4. 显示结果:[成功状态]
预计时长:~[X]秒
这看起来正确吗?
1. 是,开始录制
2. 修改流程(描述更改)
3. 添加特定的交互来演示
</plan_flow>
4. 设置视频录制
<setup_recording>
创建视频目录:
mkdir -p tmp/videos
录制方法:使用浏览器截图作为帧
agent-browser在关键时刻捕获截图,然后使用ffmpeg组合成视频:
ffmpeg -framerate 2 -pattern_type glob -i 'tmp/screenshots/*.png' -vf "scale=1280:-1" tmp/videos/feature-demo.gif
</setup_recording>
5. 录制演示
<record_walkthrough>
执行计划的流程,捕获每个步骤:
步骤1:导航到起点
agent-browser open "[base-url]/[start-route]"
agent-browser wait 2000
agent-browser screenshot tmp/screenshots/01-start.png
步骤2:执行导航/交互
agent-browser snapshot -i # 获取引用
agent-browser click @e1 # 点击导航元素
agent-browser wait 1000
agent-browser screenshot tmp/screenshots/02-navigate.png
步骤3:演示功能
agent-browser snapshot -i # 获取功能元素的引用
agent-browser click @e2 # 点击功能元素
agent-browser wait 1000
agent-browser screenshot tmp/screenshots/03-feature.png
步骤4:捕获结果
agent-browser wait 2000
agent-browser screenshot tmp/screenshots/04-result.png
从截图创建视频/GIF:
# 创建目录
mkdir -p tmp/videos tmp/screenshots
# 创建MP4视频(推荐 - 更好质量,更小大小)
# -framerate 0.5 = 每帧2秒(较慢播放)
# -framerate 1 = 每帧1秒
ffmpeg -y -framerate 0.5 -pattern_type glob -i 'tmp/screenshots/*.png' \
-c:v libx264 -pix_fmt yuv420p -vf "scale=1280:-2" \
tmp/videos/feature-demo.mp4
# 创建低质量GIF用于预览(小文件,用于GitHub嵌入)
ffmpeg -y -framerate 0.5 -pattern_type glob -i 'tmp/screenshots/*.png' \
-vf "scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse" \
-loop 0 tmp/videos/feature-demo-preview.gif
注意:
- MP4缩放中的
-2确保高度能被2整除(H.264所需) - 预览GIF使用640px宽度和128种颜色以保持文件大小较小(约100-200KB)
</record_walkthrough>
6. 上传视频
<upload_video>
使用rclone上传:
# 检查rclone是否配置
rclone listremotes
# 上传视频、预览GIF和截图到云存储
# 使用--s3-no-check-bucket以避免权限错误
rclone copy tmp/videos/ r2:kieran-claude/pr-videos/pr-[number]/ --s3-no-check-bucket --progress
rclone copy tmp/screenshots/ r2:kieran-claude/pr-videos/pr-[number]/screenshots/ --s3-no-check-bucket --progress
# 列出上传的文件
rclone ls r2:kieran-claude/pr-videos/pr-[number]/
公共URL(R2带公共访问):
视频: https://pub-4047722ebb1b4b09853f24d3b61467f1.r2.dev/pr-videos/pr-[number]/feature-demo.mp4
预览: https://pub-4047722ebb1b4b09853f24d3b61467f1.r2.dev/pr-videos/pr-[number]/feature-demo-preview.gif
</upload_video>
7. 更新PR描述
<update_pr>
获取当前PR正文:
gh pr view [number] --json body -q '.body'
添加视频部分到PR描述:
如果PR已有视频部分,替换它。否则,追加:
重要: GitHub无法直接嵌入外部MP4。使用可点击的GIF链接到视频:
## 演示
[]([video-mp4-url])
*点击查看完整视频*
示例:
[](https://pub-4047722ebb1b4b09853f24d3b61467f1.r2.dev/pr-videos/pr-137/feature-demo.mp4)
更新PR:
gh pr edit [number] --body "[更新后的正文带视频部分]"
或者如果首选,作为评论添加:
gh pr comment [number] --body "## 功能演示

_此PR中更改的自动演示_"
</update_pr>
8. 清理
<cleanup>
# 可选:清理截图
rm -rf tmp/screenshots
# 保留视频以供参考
echo "视频保留在:tmp/videos/feature-demo.gif"
</cleanup>
9. 摘要
<summary>
呈现完成摘要:
## 功能视频完成
**PR:** #[number] - [标题]
**视频:** [url或本地路径]
**时长:** ~[X]秒
**格式:** [GIF/MP4]
### 捕获的镜头
1. [起点] - [描述]
2. [导航] - [描述]
3. [功能演示] - [描述]
4. [结果] - [描述]
### PR已更新
- [x] 视频部分已添加到PR描述
- [ ] 准备审核
**下一步:**
- 查看视频以确保准确演示功能
- 与审核者分享以获得上下文
</summary>
快速使用示例
# 为当前分支的PR录制视频
/feature-video
# 为特定PR录制视频
/feature-video 847
# 使用自定义基础URL录制
/feature-video 847 http://localhost:5000
# 为暂存环境录制
/feature-video current https://staging.example.com
提示
- 保持简短:10-30秒对于PR演示是理想的
- 关注变化:不要包括无关的UI
- 显示之前/之后:如果修复bug,先显示损坏状态(如果可能)
- 如果需要,添加注释:为复杂功能添加文本覆盖