视频视觉分析
从视频中抽取关键帧,使用视觉模型进行多轮深度分析,提取UI设计规范、功能模块、产品信息等关键视觉信息,输出结构化分析报告。适用于从产品演示视频、界面展示视频中获取设计灵感和创建工作台/应用的参考。
工作流程
第一步:获取视频信息
使用 bash 执行 ffprobe 获取视频基本信息(时长、分辨率、帧率、编码格式):
ffprobe -v quiet -print_format json -show_format -show_streams "<视频文件路径>" 2>/dev/null
从返回 JSON 中提取 duration(秒)、width、height、r_frame_rate(帧率)。
第二步:抽取关键帧
运行技能自带的 extract_keyframes.py 脚本抽取关键帧:
python skills/video-visual-analysis/extract_keyframes.py --input "<视频文件路径>" --output "<输出目录>" --count <帧数>
参数说明:
- --input:视频文件路径(必填)
- --output:关键帧输出目录(必填)
- --count:要抽取的帧数(默认12,建议8-15帧)
- --prefix:帧文件名前缀(默认"frame")
脚本会在输出目录下生成 <prefix>_<秒数>s.jpg 格式的关键帧文件。
抽取策略:
- 时长 < 30秒:抽 6-8 帧
- 时长 30秒-3分钟:抽 8-12 帧
- 时长 > 3分钟:抽 12-15 帧
- 帧均匀分布在视频时间线上,跳过开头2秒和结尾2秒
第三步:视觉模型分析
将关键帧分批(每批2-3张)使用 read_image 工具进行分析。分析分多轮进行,每轮聚焦不同维度:
第一轮:整体概览
- 选取最能代表整体界面的2-3张关键帧
- 分析query:"分析这个界面截图的整体布局结构、配色方案、主要功能区域划分。具体描述:1. 整体布局(侧边栏/主内容区比例)2. 主色调和辅助色(给出具体色值)3. 主要功能模块有哪些 4. 导航结构 5. 字体风格 6. 所有可见的文字内容"
第二轮:组件细节
- 选取展示组件细节的关键帧
- 分析query:"仔细观察这个UI界面的组件样式细节。具体描述:1. 卡片边框(粗细、颜色、圆角)2. 阴影效果(内/外阴影、偏移、模糊)3. 按钮样式(形状、颜色、边框、立体感)4. 输入框/表单样式 5. 弹窗/模态框设计 6. 标签/徽章样式 7. 进度条/滑块样式 8. 所有精确色值 9. 字体大小层级 10. 间距和留白比例 11. 所有可见文字"
第三轮(如需要):特定页面/功能
- 选取展示特定功能页面的关键帧
- 分析query根据用户需求定制,例如:"详细描述这个页面的功能设计、交互流程、表单字段、数据展示方式。列出所有功能点、按钮、选项的名称和用途"
分析轮次根据视频内容复杂度决定:
- 简单界面(1-2个页面):2轮分析
- 中等复杂度(3-5个页面):3轮分析
- 高复杂度(6+个页面或深度功能展示):3-4轮分析
第四步:综合输出报告
将多轮分析结果综合为结构化报告,包含以下部分:
# 视频视觉分析报告
## 一、视频基本信息
- 文件名、时长、分辨率、帧率、编码格式
## 二、产品/内容概述
- 产品名称、定位、出镜人(如有)、核心价值主张
## 三、整体视觉设计规范
### 配色方案(精确色值)
| 用途 | 色值 | 说明 |
|------|------|------|
### 组件样式
- 边框、阴影、圆角、字体、按钮等
### 布局结构
- 整体布局比例、导航结构、内容区组织方式
## 四、功能模块详解
- 每个模块的名称、功能描述、交互方式、UI元素
## 五、设计灵感与参考
- 可复用的设计模式、配色方案、交互模式
- 适用于哪些类型的应用/工作台创建
## 六、关键帧索引
- 每个关键帧的时间点、对应内容、保存路径
输入
- 视频文件路径(必填):用户上传的视频文件
- 分析重点(可选):用户希望重点分析的维度,如"UI设计规范"、"功能模块"、"配色方案"、"交互设计"等。未指定时进行全面分析。
输出
- 结构化 Markdown 分析报告
- 关键帧图片文件(保存在指定输出目录)
边界情况处理
- 视频格式不支持:ffprobe 无法识别时,提示用户确认视频格式,尝试转换为 mp4 后重试
- 视频过短(<5秒):减少抽取帧数到3-5帧,直接抽取
- ffmpeg/ffprobe 不存在:提示需要安装 ffmpeg
- 关键帧抽取失败:尝试用不同时间点重新抽取,或增加抽取数量
- 视觉模型分析结果不清晰:换用不同角度的 query 重新分析,或放大特定区域
- 用户指定特定时间点分析:支持用户指定时间点抽取帧,而非均匀分布