视频制作人技能描述
创建包含语音旁白、音乐和视觉效果的完整视频。
这是一个编排器技能,它整合了以下组件:
- 脚本/故事板生成(Claude)
- 语音合成(Gemini TTS)
- 背景音乐(Lyria)
- 视频片段生成(Veo 3.1)或图片动画
- 最终合成(FFmpeg,通过 media-utils)
工作流程
第一步:收集需求(必选)
⚠️ 不要跳过此步骤。在获得所有答案之前,不要运行 init_project.py。
使用交互式提问——每次只问一个问题,等待回复后再问下一个。这创建了一个协作式的规格驱动过程。
提问流程
⚠️ 对下列每个问题,请使用 AskUserQuestion 工具。 不要仅仅在你的回复中打印问题——请使用该工具创建交互式提示,并附上选项。
Q1: 主题
"我来制作那个视频!首先——它关于什么?
(例如:产品发布、品牌故事、教程、讲解——或描述你自己的主题)"
等待回复。
Q2: 时长
"视频应该多长?
- 15秒 (快速吸引)
- 30秒 (标准广告)
- 60秒 (讲解)
- 2分钟以上 (详细)
- 或者指定你自己的时长"
等待回复。
Q3: 风格
"什么样的视觉风格?
- 高端/奢华
- 有趣/俏皮
- 企业/专业
- 戏剧化/电影感
- 简约/干净
- 或者描述你自己的风格"
等待回复。
Q4: 素材
"你有现有的图片或视频片段可以使用吗?
- 没有,全部生成
- 有,我有图片 (提供路径)
- 有,我有视频片段 (提供路径)"
等待回复。
Q5: 音频策略
"我们应该如何处理音频?
- 自定义 — 我生成旁白 + 背景音乐
- Veo原生 — 使用 Veo 内置的对白/音效/环境音
- 静音 — 无音频,后期添加"
等待回复。
Q6: 语音 (如果选择自定义音频)
"旁白使用什么语音语调?
- 专业
- 友好/温暖
- 充满活力
- 平静/舒缓
- 戏剧化
- 或者描述你自己的语调"
等待回复。
Q7: 音乐 (如果选择自定义音频)
"什么样的音乐氛围?
- 现代电子
- 电影/史诗
- 欢快流行
- 氛围/轻松
- 企业风格
- 或者描述你自己的风格"
等待回复。
Q8: 格式
"什么宽高比?
- 16:9(YouTube,网页)
- 9:16(抖音,Reels,Shorts)
- 1:1(Instagram 信息流)"
等待回复。
Q9: 分辨率
"什么分辨率?
- 720p(生成更快)
- 1080p(标准高清)"
等待回复。
Q10: 模型
"使用哪个 Veo 模型?
veo-3.1— 最新,最高质量(默认)veo-3.1-fast— 生成更快,质量略低veo-3— 上一代veo-3-fast— 上一代,更快"
等待回复。
快速参考
| 问题 | 决定内容 |
|---|---|
| 主题 | 场景内容和提示词 |
| 时长 | 场景数量(Veo 片段必须是 4、6 或 8 秒) |
| 风格 | 视觉提示词和音乐选择 |
| 素材 | 生成还是使用现有资源 |
| 音频 | 自定义、veo_audio 或静音 |
| 语音 | TTS 语音选择 |
| 音乐 | Lyria 提示词 |
| 格式 | Veo 的宽高比 |
| 分辨率 | 720p 或 1080p 输出质量 |
| 模型 | veo-3.1、veo-3.1-fast、veo-3、veo-3-fast |
第二步:初始化项目
一旦你获得用户的答案,用他们的偏好初始化项目:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/video-producer-agent/scripts/init_project.py \
--name "产品发布视频" \
--duration 30 \
--aspect-ratio 16:9 \
--audio-strategy custom \
--scenes 5
第三步:配置 project.json
根据用户的答案编辑 project.json,填入场景提示词、旁白文本和音乐风格。
第四步:合成视频
python3 ${CLAUDE_PLUGIN_ROOT}/skills/video-producer-agent/scripts/assemble.py \
--project ~/my_video_project/
项目结构
初始化项目时,会创建以下文件夹结构:
my_project/
├── project.json # 配置:场景、旁白、音乐、设置
├── storyboard.md # 视频规划文档
├── scenes/ # 从 Veo 生成的视频片段
│ ├── scene1_intro.mp4
│ ├── scene2_features.mp4
│ └── scene3_cta.mp4
├── audio/ # 音频素材
│ ├── voiceover.wav # 生成的旁白
│ ├── background_music.wav # 生成的音乐
│ └── final_mix.mp3 # 混合后的音频轨道
├── work/ # 中间文件(自动生成)
│ ├── silent_scene1.mp4
│ ├── video_concatenated.mp4
│ └── ...
└── output/ # 最终交付物
└── product_launch_video_final.mp4
脚本
init_project.py
初始化一个新的视频项目,包含文件夹结构和模板。
# 基础项目
python3 init_project.py --name "我的视频" --duration 30
# 在指定目录创建
python3 init_project.py --name "演示视频" --output ~/Videos/
# 竖版社交视频
python3 init_project.py --name "Instagram Reel" --aspect-ratio 9:16 --duration 15
# 使用 Veo 的原生音频(无自定义旁白/音乐)
python3 init_project.py --name "电影场景" --audio-strategy veo_audio
# 更多场景
python3 init_project.py --name "长视频" --duration 60 --scenes 5
选项:
| 选项 | 默认值 | 描述 |
|---|---|---|
--name | 必填 | 项目名称 |
--output | 当前目录 | 父目录 |
--duration | 30 | 目标时长(秒) |
--aspect-ratio | 16:9 | 16:9、9:16、1:1、4:3 |
--audio-strategy | custom | custom、veo_audio、silent |
--scenes | 3 | 场景占位符数量 |
assemble.py
编排完整的视频合成流水线。
# 完整流水线(生成所有内容 + 合成)
python3 assemble.py --project ~/my_project/
# 跳过生成(使用现有的场景/音频文件)
python3 assemble.py --project ~/my_project/ --skip-generation
# 试运行(显示将要执行的操作)
python3 assemble.py --project ~/my_project/ --dry-run
流水线步骤:
- 生成视频场景(Veo 3.1)
- 从场景中剥离音频(如果使用自定义音频)
- 生成旁白(Gemini TTS)
- 生成背景音乐(Lyria)
- 混合旁白和音乐
- 拼接视频片段
- 将音频与视频合并
- 输出最终视频
project.json 配置
{
"name": "产品发布视频",
"duration_target": 30,
"aspect_ratio": "16:9",
"resolution": "720p",
"audio_strategy": "custom",
"scenes": [
{
"id": 1,
"name": "scene1_hero",
"prompt": "电影感慢推镜头拍摄高端产品,戏剧性灯光,高端商业广告风格",
"duration": 6,
"notes": "仅音乐,无旁白"
},
{
"id": 2,
"name": "scene2_features",
"prompt": "产品功能演示,流畅动画,现代科技美学",
"duration": 8,
"notes": "旁白从这里开始"
},
{
"id": 3,
"name": "scene3_cta",
"prompt": "产品与logo在干净背景上,行动号召时刻",
"duration": 6,
"notes": "音乐增强,旁白结束"
}
],
"voiceover": {
"enabled": true,
"text": "介绍音频的未来。水晶般清晰的声音。全天候舒适。体验不同。",
"voice": "Charon",
"style": "专业、自信、高端品牌声音"
},
"music": {
"enabled": true,
"prompt": "现代电子,高端,流畅,产品展示,微妙的低音",
"duration": 35,
"bpm": 100,
"brightness": 0.6
},
"assembly": {
"transition": "fade",
"transition_duration": 0.5,
"music_volume": 0.3,
"fade_in": 1.0,
"fade_out": 2.0
}
}
音频策略
| 策略 | 描述 | 使用场景 |
|---|---|---|
custom | 剥离 Veo 音频,添加自定义旁白和音乐 | 大多数视频 |
veo_audio | 保留 Veo 生成的音频(对白、音效) | 电影场景、对白 |
silent | 剥离音频,输出无声视频 | 后期添加音频 |
工作流程:创建视频
第一步:初始化项目
python3 init_project.py --name "无线耳机促销" --duration 30
第二步:规划故事板
编辑 storyboard.md 来规划你的视频结构:
## 场景 1:主角展示 (0-5s)
- 视觉:耳机从阴影中浮现,高端灯光
- 音频:仅音乐(戏剧性开场)
## 场景 2:音质 (5-12s)
- 视觉:声波,享受音乐的人
- 音频:旁白:"水晶般清晰的声音。沉浸式低音。"
## 场景 3:舒适度 (12-20s)
- 视觉:贴合特写,跑步的人
- 音频:旁白:"全天候舒适。稳固贴合。"
## 场景 4:行动号召 (20-30s)
- 视觉:产品 + logo
- 音频:旁白:"体验不同。" + 音乐增强
第三步:配置 project.json
根据你的故事板填写场景提示词、旁白文本和音乐风格。
第四步:合成
python3 assemble.py --project ~/wireless_earbuds_promo/
第五步:审查与迭代
检查 output/ 中的输出。如果需要调整:
# 使用现有场景重新运行(仅重新混合音频)
python3 assemble.py --project ~/wireless_earbuds_promo/ --skip-generation
你可以创建的内容
| 类型 | 示例 |
|---|---|
| 产品视频 | 30秒产品展示视频 |
| 讲解视频 | 操作指南或功能解释 |
| 宣传/广告视频 | 营销广告 |
| 演示视频 | 产品演示 |
| 培训视频 | 内部培训内容 |
| 客户评价 | 客户引用风格视频 |
| 品牌视频 | 公司/品牌故事 |
前提条件
GOOGLE_API_KEY— 用于 Veo(视频)、Gemini TTS(语音)、Lyria(音乐)- 已安装 FFmpeg:
brew install ffmpeg
视频风格与音乐搭配
| 风格 | 音乐提示词 | 语音 |
|---|---|---|
| 高端/奢华 | "优雅,极简,氛围,精致" | Charon(信息型) |
| 科技/现代 | "电子,未来感,干净,创新" | Kore(坚定型) |
| 有趣/俏皮 | "欢快,愉快,原声,积极" | Puck(活泼型) |
| 企业 | "专业,鼓舞人心,轻管弦乐" | Orus(坚定型) |
| 生活方式 | "轻松,有抱负,独立,温暖" | Aoede(轻松型) |
| 戏剧/电影 | "史诗,管弦乐,情感,渐强" | Gacrux(成熟型) |
常见视频结构
产品视频 (30s)
0-5s: 主镜头(仅音乐)
5-15s: 功能(旁白 + 音乐)
15-25s: 生活方式/使用场景(旁白 + 音乐)
25-30s: Logo + 行动号召(音乐淡出)
讲解视频 (60s)
0-5s: 吸引/问题陈述
5-20s: 解决方案介绍
20-45s: 工作原理(3个步骤)
45-55s: 优点总结
55-60s: 行动号召
客户评价视频 (45s)
0-5s: 介绍/姓名卡片
5-35s: 评价引用(多场景)
35-45s: 产品镜头 + logo
手动工作流程(不使用脚本)
如果你更愿意手动执行每个步骤:
生成场景:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/video-generation/scripts/veo.py \
--batch scenes.json
生成旁白:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/voice-generation/scripts/gemini_tts.py \
--text "你的旁白文本..." \
--voice Charon \
--style "专业,温暖"
生成音乐:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/music-generation/scripts/lyria.py \
--prompt "现代电子,高端" \
--duration 35
从片段中剥离音频:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_strip_audio.py \
-i scene*.mp4
拼接视频:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_concat.py \
-i silent_*.mp4 --transition fade -o video.mp4
混合音频:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/audio_mix.py \
--voice voiceover.wav --music music.wav -o audio.mp3
合并音频和视频:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_audio_merge.py \
--video video.mp4 --audio audio.mp3 -o final.mp4
你可以提供的输入文件
| 文件类型 | 使用方式 |
|---|---|
| 产品图片 | 用 Veo 作为第一帧动画化 |
| Logo(PNG) | 叠加在最终场景上 |
| 现有旁白 | 放在 audio/voiceover.wav |
| 品牌音乐 | 放在 audio/background_music.wav |
| 视频片段 | 放在 scenes/ 文件夹 |
| 脚本/文案 | 用于旁白文本 |
限制
- Veo 视频时长:每个片段最长 8 秒(拼接得到更长时间)
- Veo 3.1 包含音频:所有片段都有生成的音频(如果使用自定义音频则剥离)
- 处理时间:视频生成每个片段需要 1-3 分钟
- 分辨率:目前为 720p 或 1080p(1080p 仅对 8 秒片段有效)
错误处理
| 错误 | 解决方案 |
|---|---|
| "GOOGLE_API_KEY not set" | 根据 README 设置 API 密钥 |
| "FFmpeg not found" | 安装:brew install ffmpeg |
| "project.json not found" | 先运行 init_project.py |
| 视频生成超时 | 重试,或使用更短的时长 |
| 音频/视频同步问题 | 调整场景时长 |
示例提示词
简单:
"为我的新咖啡机创建一个30秒的产品视频"
详细:
"为我们的新无线耳机创建一个45秒的产品视频。高端、奢华的感觉。我附上了产品照片。专业男声旁白。现代电子音乐。16:9 格式用于 YouTube。"
带项目:
"初始化一个名为 '应用演示' 的视频项目,5个场景,总共60秒,竖版格式用于 TikTok"