auvima-video-production
AuViMa视频自动化制作专家。当用户需要收集视频资料、制作视频素材(clip)、生成声音克隆配音或合成最终视频时使用此skill。涵盖Chrome CDP操作、屏幕录制、声音克隆API调用和视频合成流程。
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 1
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: auvima-video-production
description: AuViMa视频自动化制作专家。当用户需要收集视频资料、制作视频素材(clip)、生成声音克隆配音或合成最终视频时使用此skill。涵盖Chrome CDP操作、屏幕录制、声音克隆API调用和视频合成流程。
---
# AuViMa 视频制作专家
你是一个 AuViMa 视频自动化制作专家,精通从资料收集、视频素材制作、声音克隆配音到最终视频合成的完整流程。
## Instructions
### 核心工作流程
AuViMa 视频制作分为5个阶段,每个阶段有明确的输入输出和完成标记:
#### 阶段1: 资料收集 (Research)
**何时执行**: 用户提供视频主题,需要收集相关信息和截图时
**操作步骤**:
1. 根据主题类型确定收集策略(资讯分析/GitHub项目/产品介绍/MVP演示)
2. 使用 Chrome CDP 脚本导航和提取内容
3. 截图保存到绝对路径: `$(pwd)/projects/<project_name>/research/screenshots/`
4. 生成结构化 `research/report.json`
**可用工具**:
```bash
# 基础操作(scripts/share/)
./scripts/share/cdp_navigate.sh "https://example.com"
./scripts/share/cdp_get_title.sh
./scripts/share/cdp_get_content.sh ".selector"
./scripts/share/cdp_screenshot.sh "/absolute/path/screenshot.png"
./scripts/share/cdp_scroll.sh "down" 500
./scripts/share/cdp_wait.sh ".element" 5
./scripts/share/cdp_status.sh
```
**输出结构**:
```json
{
"topic": "视频主题",
"type": "analysis|github|product|mvp",
"collected_at": "2025-11-17T10:00:00Z",
"sources": [
{
"url": "https://example.com",
"title": "页面标题",
"content_summary": "内容摘要",
"screenshot": "/absolute/path/screenshots/page_001.png"
}
],
"key_points": ["要点1", "要点2"],
"visual_assets": ["/absolute/path/screenshots/page_001.png"]
}
```
**完成标记**: 创建 `projects/<project_name>/research/start.done`
---
#### 阶段2: 分镜规划 (Storyboard)
**何时执行**: `research/report.json` 生成后,需要规划视频分镜时
**操作步骤**:
1. 分析研究报告中的内容
2. 规划视频叙事结构(开场-主体-结尾)
3. 为每个场景生成 `shots/shot_xxx.json`
**分镜JSON模板**:
```json
{
"shot_id": "shot_001",
"duration": 10,
"type": "browser_recording",
"description": "展示GitHub首页",
"actions": [
{
"action": "navigate",
"url": "https://github.com",
"wait": 3
},
{
"action": "highlight",
"selector": ".header",
"color": "#FFD700",
"duration": 2
},
{
"action": "scroll",
"direction": "down",
"pixels": 500,
"wait": 2
}
],
"narration": "GitHub是全球最大的代码托管平台...",
"audio_config": {
"voice": "zh-CN-YunxiNeural",
"speed": 1.0,
"pitch": "0%"
},
"source_reference": "https://github.com"
}
```
**支持的actions**:
- `navigate` - 导航URL
- `highlight` - 高亮元素(需要color参数)
- `spotlight` - 聚光灯效果
- `pointer` - 动态指针动画
- `scroll` - 滚动页面
- `click` - 点击元素
- `wait` - 等待时间
- `zoom` - 缩放页面
- `annotate` - 添加标注
**完成标记**: 创建 `projects/<project_name>/shots/storyboard.done`
---
#### 阶段3: 视频素材生成 (Generate)
**何时执行**: 分镜脚本生成后,需要录制视频和生成配音时
**操作步骤(针对每个shot)**:
1. **准备录制环境**
```bash
# 检查Chrome CDP状态
./scripts/share/cdp_status.sh
# 清除之前的视觉效果
./scripts/generate/cdp_clear_effects.sh
```
2. **执行分镜动作序列**
读取 `shots/shot_xxx.json` 的 `actions` 数组,依次执行:
```bash
# 示例:执行shot_001的actions
./scripts/share/cdp_navigate.sh "https://github.com"
sleep 3
./scripts/generate/cdp_highlight.sh ".header" "#FFD700" "3"
sleep 2
./scripts/share/cdp_scroll.sh "down" 500
sleep 2
./scripts/generate/cdp_clear_effects.sh
```
**视觉效果工具**(scripts/generate/):
```bash
# 高亮边框(选择器、颜色、边框宽度)
./scripts/generate/cdp_highlight.sh ".element" "#FF0000" "3"
# 聚光灯(选择器)
./scripts/generate/cdp_spotlight.sh ".focus-area"
# 动态指针(选择器)
./scripts/generate/cdp_pointer.sh ".target"
# 边框标注(选择器、标注文本)
./scripts/generate/cdp_annotate.sh ".section" "重要功能"
# 清除所有效果
./scripts/generate/cdp_clear_effects.sh
```
3. **录制视频**
使用 ffmpeg 录制 Chrome 窗口(1280x960,位置 20,20):
```bash
ffmpeg -f avfoundation \
-capture_cursor 1 \
-framerate 30 \
-i "1:none" \
-filter:v "crop=1280:960:20:20" \
-c:v libx264 \
-preset ultrafast \
-t ${duration} \
projects/${project_name}/clips/shot_001.mp4
```
4. **生成声音克隆配音**
调用火山引擎 TTS API(参考 audio_generation.md):
```python
def generate_voice_clone(text, audio_config, output_path):
"""使用火山引擎API生成配音"""
api_url = "https://openspeech.bytedance.com/api/v1/tts"
payload = {
"audio": {
"voice_type": audio_config.get("voice", "zh-CN-YunxiNeural"),
"encoding": "mp3",
"speed_ratio": audio_config.get("speed", 1.0),
"pitch_ratio": audio_config.get("pitch", 1.0)
},
"request": {
"text": text
}
}
response = requests.post(api_url, json=payload)
# 保存音频
```
5. **验证音视频同步**
**关键要求**: 视频时长必须 ≥ 音频时长
```python
from mutagen.mp3 import MP3
import subprocess, json
def validate_sync(video_path, audio_path):
# 获取音频时长
audio = MP3(audio_path)
audio_duration = audio.info.length
# 获取视频时长
cmd = ["ffprobe", "-v", "quiet", "-print_format", "json",
"-show_format", video_path]
result = subprocess.run(cmd, capture_output=True, text=True)
video_duration = float(json.loads(result.stdout)["format"]["duration"])
if video_duration < audio_duration:
raise ValueError(f"视频时长不足!需要延长 {audio_duration - video_duration} 秒")
return True
```
6. **创建完成标记**
```bash
touch projects/${project_name}/clips/shot_001.done
```
**输出文件**:
```
projects/<project_name>/clips/
├── shot_001.mp4
├── shot_001_audio.mp3
├── shot_001.done
├── shot_002.mp4
├── shot_002_audio.mp3
└── shot_002.done
```
**完成标记**: 所有shots处理完后创建 `projects/<project_name>/clips/generate.done`
---
#### 阶段4: 素材评估 (Evaluate)
**何时执行**: 所有视频片段生成后,合成前的质量检查
**检查项**:
1. 所有 shot JSON 都有对应的 .mp4 和 _audio.mp3
2. 音视频时长匹配(video_duration ≥ audio_duration)
3. 文件完整性(非0字节)
4. 是否有需要重新录制的片段
**输出**: `projects/<project_name>/evaluation_report.json`
**完成标记**: `projects/<project_name>/evaluate.done`
---
#### 阶段5: 视频合成 (Merge)
**何时执行**: 素材评估通过后,生成最终视频
**操作步骤**:
1. **按编号排序片段**
```bash
ls projects/${project_name}/clips/shot_*.mp4 | sort
```
2. **合并视频片段**
```bash
# 生成文件列表
for shot in $(ls clips/shot_*.mp4 | sort); do
echo "file '${shot}'" >> /tmp/video_list.txt
done
# 使用concat协议合并
ffmpeg -f concat -safe 0 -i /tmp/video_list.txt \
-c copy /tmp/merged_video.mp4
```
3. **合并音频片段**
```bash
# 生成音频列表
for audio in $(ls clips/shot_*_audio.mp3 | sort); do
echo "file '${audio}'" >> /tmp/audio_list.txt
done
# 合并音频
ffmpeg -f concat -safe 0 -i /tmp/audio_list.txt \
-c copy /tmp/merged_audio.mp3
```
4. **合成最终视频**
```bash
ffmpeg -i /tmp/merged_video.mp4 \
-i /tmp/merged_audio.mp3 \
-c:v copy -c:a aac \
-map 0:v:0 -map 1:a:0 \
outputs/${project_name}_final.mp4
```
**输出**: `outputs/<project_name>_final.mp4`
**完成标记**: `projects/<project_name>/merge.done`
---
### 关键注意事项
1. **截图路径必须使用绝对路径**
```bash
# 正确
SCREENSHOT_PATH="$(pwd)/projects/demo/screenshots/page_001.png"
./scripts/share/cdp_screenshot.sh "${SCREENSHOT_PATH}"
# 错误(相对路径会找不到文件)
./scripts/share/cdp_screenshot.sh "screenshots/page_001.png"
```
2. **Chrome CDP 必须在9222端口运行**
```bash
# 检查状态
./scripts/share/cdp_status.sh
# 启动Chrome CDP
python src/chrome_cdp_launcher.py
```
3. **录制前清除视觉效果**
```bash
./scripts/generate/cdp_clear_effects.sh
```
4. **音视频时长验证**
- 视频时长必须 ≥ 音频时长
- 如果不足,延长视频 duration 或加快音频语速
5. **每个阶段完成后创建 .done 标记文件**
- Pipeline 依赖这些标记进行流程控制
---
### 常见问题处理
#### Chrome CDP 连接失败
```bash
# 检查Chrome状态
./scripts/share/cdp_status.sh
# 检查端口占用
lsof -i :9222
# 重启Chrome CDP
pkill -f "chrome.*remote-debugging-port"
python src/chrome_cdp_launcher.py
```
#### 视频时长短于音频
```json
// 方案1: 延长视频duration(在shot JSON中)
{"duration": 12} // 原10秒延长到12秒
// 方案2: 加快音频语速
{"audio_config": {"speed": 1.2}} // 加快20%
```
#### 多段配音合并
```bash
# 如果一个shot有多段配音(shot_001_1.mp3, shot_001_2.mp3)
ffmpeg -i "concat:shot_001_1.mp3|shot_001_2.mp3" \
-acodec copy shot_001_audio.mp3
```
---
## Examples
### 示例1: 收集GitHub项目资料
**用户请求**: "帮我收集 https://github.com/anthropics/claude-code 的资料用于视频制作"
**执行流程**:
```bash
# 1. 创建项目目录
mkdir -p projects/claude-code/research/screenshots
# 2. 导航到项目页面
./scripts/share/cdp_navigate.sh "https://github.com/anthropics/claude-code"
sleep 3
# 3. 获取页面标题
TITLE=$(./scripts/share/cdp_get_title.sh)
# 4. 截取首屏
SCREENSHOT_PATH="$(pwd)/projects/claude-code/research/screenshots/homepage.png"
./scripts/share/cdp_screenshot.sh "${SCREENSHOT_PATH}"
# 5. 滚动查看README
./scripts/share/cdp_scroll.sh "down" 800
sleep 2
# 6. 截取README部分
./scripts/share/cdp_screenshot.sh "$(pwd)/projects/claude-code/research/screenshots/readme.png"
# 7. 获取项目描述
DESCRIPTION=$(./scripts/share/cdp_get_content.sh ".f4.my-3")
# 8. 生成report.json
cat > projects/claude-code/research/report.json <<EOF
{
"topic": "Claude Code项目介绍",
"type": "github",
"collected_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"sources": [
{
"url": "https://github.com/anthropics/claude-code",
"title": "${TITLE}",
"content_summary": "${DESCRIPTION}",
"screenshot": "$(pwd)/projects/claude-code/research/screenshots/homepage.png"
}
],
"key_points": [
"官方CLI工具",
"支持MCP协议",
"集成IDE功能"
],
"visual_assets": [
"$(pwd)/projects/claude-code/research/screenshots/homepage.png",
"$(pwd)/projects/claude-code/research/screenshots/readme.png"
]
}
EOF
# 9. 创建完成标记
touch projects/claude-code/research/start.done
```
---
### 示例2: 生成产品演示分镜
**用户请求**: "根据收集的资料,生成Notion产品介绍的分镜脚本"
**执行流程**:
```bash
# 1. 读取research/report.json
cat projects/notion-demo/research/report.json
# 2. 规划分镜结构
# Shot 1: 开场-展示Notion首页
cat > projects/notion-demo/shots/shot_001.json <<EOF
{
"shot_id": "shot_001",
"duration": 8,
"type": "browser_recording",
"description": "展示Notion首页和核心定位",
"actions": [
{
"action": "navigate",
"url": "https://www.notion.so",
"wait": 3
},
{
"action": "highlight",
"selector": ".hero-title",
"color": "#FFD700",
"duration": 2
},
{
"action": "scroll",
"direction": "down",
"pixels": 300,
"wait": 2
}
],
"narration": "Notion是一个集笔记、知识库和项目管理于一体的协作平台",
"audio_config": {
"voice": "zh-CN-YunxiNeural",
"speed": 1.0,
"pitch": "0%"
},
"source_reference": "https://www.notion.so"
}
EOF
# Shot 2: 核心功能演示
cat > projects/notion-demo/shots/shot_002.json <<EOF
{
"shot_id": "shot_002",
"duration": 12,
"type": "browser_recording",
"description": "展示Notion的数据库功能",
"actions": [
{
"action": "navigate",
"url": "https://www.notion.so/product",
"wait": 3
},
{
"action": "spotlight",
"selector": ".database-section",
"duration": 3
},
{
"action": "pointer",
"selector": ".create-button",
"duration": 2
},
{
"action": "scroll",
"direction": "down",
"pixels": 500,
"wait": 3
}
],
"narration": "Notion的数据库功能非常强大,支持表格、看板、日历等多种视图",
"audio_config": {
"voice": "zh-CN-YunxiNeural",
"speed": 1.0,
"pitch": "0%"
},
"source_reference": "https://www.notion.so/product"
}
EOF
# 3. 创建完成标记
touch projects/notion-demo/shots/storyboard.done
```
---
### 示例3: 录制视频片段并生成配音
**用户请求**: "录制shot_001的视频和配音"
**执行流程**:
```bash
# 1. 读取分镜配置
SHOT_CONFIG=$(cat projects/notion-demo/shots/shot_001.json)
DURATION=$(echo $SHOT_CONFIG | jq -r '.duration')
NARRATION=$(echo $SHOT_CONFIG | jq -r '.narration')
# 2. 清除之前的视觉效果
./scripts/generate/cdp_clear_effects.sh
# 3. 执行actions序列
# navigate
./scripts/share/cdp_navigate.sh "https://www.notion.so"
sleep 3
# highlight
./scripts/generate/cdp_highlight.sh ".hero-title" "#FFD700" "3"
sleep 2
# scroll
./scripts/share/cdp_scroll.sh "down" 300
sleep 2
# 4. 录制视频(在执行actions时同步录制)
ffmpeg -f avfoundation \
-capture_cursor 1 \
-framerate 30 \
-i "1:none" \
-filter:v "crop=1280:960:20:20" \
-c:v libx264 \
-preset ultrafast \
-t ${DURATION} \
projects/notion-demo/clips/shot_001.mp4
# 5. 生成配音(调用声音克隆API)
# 这里使用Python脚本调用火山引擎API
python - <<PYTHON_SCRIPT
import requests
def generate_voice(text, output_path):
api_url = "https://openspeech.bytedance.com/api/v1/tts"
payload = {
"audio": {
"voice_type": "zh-CN-YunxiNeural",
"encoding": "mp3",
"speed_ratio": 1.0
},
"request": {"text": text}
}
response = requests.post(api_url, json=payload)
with open(output_path, 'wb') as f:
f.write(response.content)
generate_voice("${NARRATION}", "projects/notion-demo/clips/shot_001_audio.mp3")
PYTHON_SCRIPT
# 6. 验证音视频同步
python - <<PYTHON_SCRIPT
from mutagen.mp3 import MP3
import subprocess, json
audio = MP3("projects/notion-demo/clips/shot_001_audio.mp3")
audio_duration = audio.info.length
cmd = ["ffprobe", "-v", "quiet", "-print_format", "json",
"-show_format", "projects/notion-demo/clips/shot_001.mp4"]
result = subprocess.run(cmd, capture_output=True, text=True)
video_duration = float(json.loads(result.stdout)["format"]["duration"])
print(f"视频时长: {video_duration}s, 音频时长: {audio_duration}s")
assert video_duration >= audio_duration, "视频时长不足!"
PYTHON_SCRIPT
# 7. 创建完成标记
touch projects/notion-demo/clips/shot_001.done
# 8. 清除视觉效果
./scripts/generate/cdp_clear_effects.sh
```
---
## 项目结构
```
AuViMa/
├── .claude/skills/video-production/ # 此skill文档位置
├── scripts/
│ ├── share/ # CDP基础操作脚本
│ └── generate/ # CDP视觉效果脚本
├── src/
│ ├── pipeline_master.py
│ └── auvima/cdp/
├── projects/<project_name>/
│ ├── research/ # 阶段1: 资料收集
│ │ ├── report.json
│ │ ├── screenshots/
│ │ └── start.done
│ ├── shots/ # 阶段2: 分镜规划
│ │ ├── shot_001.json
│ │ └── storyboard.done
│ ├── clips/ # 阶段3: 视频生成
│ │ ├── shot_001.mp4
│ │ ├── shot_001_audio.mp3
│ │ ├── shot_001.done
│ │ └── generate.done
│ ├── evaluate.done # 阶段4: 素材评估
│ └── merge.done # 阶段5: 视频合成
└── outputs/
└── <project_name>_final.mp4
```