withme-youtube
# With me. YouTube 视频制作工作流 v2.0
## 核心原则
**小米(Content)是制作总指挥。** Ken 只在关键节点审核,其余全自动。
Main 不参与具体制作,只在跨部门协调时介入。
## 项目路径
```
~/Projects/withme-youtube/
├── audio/v{N}/ ← 音频素材(音乐+环境音+氛围音)
├── images/originals/v{N}/ ← AI 生成原图
├── images/4k-upscaled/v{N}/ ← 4K 放大版
├── videos/v{N}/ ← 制作中间文件
├── licenses/v{N}/ ← Envato 授权证书
├── thumbnails/v{N}/ ← YouTube 封面
├── scripts/ ← FFmpeg 构建脚本
└── exports/ ← 最终导出
```
## Agent 分工
| 任务 | 负责 | 说明 |
|------|------|------|
| 选题/策划/全流程调度 | **小米(Content)** | 总指挥 |
| 场景 Prompt 优化 | @designer | 小米直接调度 |
| AI 图片生成 | @designer → exec | 小米派 designer,designer 直接 exec generate_image.py |
| 4K 放大 | @designer → exec | 使用放大工具 |
| Envato 音频搜索+下载 | @research → browser | 用 browser 工具访问 Envato(Ken 账号已登录) |
| FFmpeg 合成脚本 | 小米 | 复制模板 + 填参数 |
| FFmpeg 执行 | Ken / exec | 本地算力执行 |
| 封面制作 | @designer | 3 个备选 |
| 标题/描述/SEO | @seo | 品牌格式 + 30 标签 |
| 翻译 | @writing | 英文→繁中 |
| YouTube 上传 | exec youtube_upload.py | 脚本自动上传+排程 |
| Shorts 切片 | 小米 | 参考 youtube-shorts skill |
## 品牌标题体系
格式:`With me. | [Mood] — [Scene Description] [Emoji] [Duration] [Resolution]`
示例:`With me. | Rainy Night — Tropical Rainforest Ambience 🌧️ 2 Hours 4K`
---
## 制作流程(8 阶段)
### 阶段 1:选题 ⏱️ 即时
1. 读取 `HANDOFF-FROM-MAIN.md`(如有)获取主题
2. 从情绪×空间矩阵选择组合(见 `references/content-matrix.md`)
3. 向 Ken 确认:「即将开始制作 V{N}:{主题},确认启动?」
4. Ken 回「好/确认/go」→ 进入阶段 2
### 阶段 2:AI 图片生成 ⏱️ ~10 分钟
1. 根据主题确定 5 个场景描述
2. 派 @designer 优化 prompt(构图、光影、色调、镜头参数)
3. **designer 直接执行生图:**
```bash
GEMINI_API_KEY="$(python3 -c "import json; print(json.load(open('$HOME/.openclaw/openclaw.json'))['models']['providers']['google']['apiKey'])")" \
uv run /Users/withme/.openclaw/shared/generate_image.py \
--prompt "<prompt>" \
--filename "~/Projects/withme-youtube/images/originals/v{N}/scene_{i}.png" \
--resolution 2K
```
4. 生成完毕发给 Ken 预览
5. Ken 确认 / 要求修改 → 调整后重新生成
**⚠️ 不写 pending.json,不等 Main 巡检。**
### 阶段 3:4K 放大 ⏱️ ~15 分钟
1. 将 5 张图放大至 ≥3840×2160(支持 Ken Burns 裁切)
2. 存入 `~/Projects/withme-youtube/images/4k-upscaled/v{N}/`
### 阶段 4:音频准备 ⏱️ ~30 分钟(全自动)
> Envato 下载需 CDP + browser 配合,流程已验证可行。
1. 根据主题情绪确定搜索关键词(参考 `references/content-matrix.md`)
2. 用 `browser` 工具搜索 Envato Music,筛选 Claim Clear 曲目
3. **自动下载流程(每首重复):**
```python
# Step 1: 用 CDP 设定下载路径(每个 page target 需单独设定)
import asyncio, json, websockets, urllib.request
targets = json.loads(urllib.request.urlopen("http://127.0.0.1:18800/json").read())
page_ws = [t["webSocketDebuggerUrl"] for t in targets if "envato" in t.get("url","")][0]
async with websockets.connect(page_ws) as ws:
await ws.send(json.dumps({"id":1,"method":"Network.enable"}))
await ws.recv()
await ws.send(json.dumps({"id":2,"method":"Page.setDownloadBehavior",
"params":{"behavior":"allow","downloadPath":"<目标目录>"}}))
await ws.recv()
# Step 2: JS 点击 Download 按钮
await ws.send(json.dumps({"id":3,"method":"Runtime.evaluate",
"params":{"expression":"document.querySelectorAll('button').forEach(b=>{if(b.textContent.trim()==='Download')b.click()})"}}))
# Step 3: 等待下载完成(监听文件出现)
```
4. 下载清单:
- **5-6 首主题音乐**(总循环 ~2 小时)
- **1 个环境音循环**(雨声/海浪/壁炉/鸟鸣等)
- **1 个氛围音循环**
5. 下载后自动解压 ZIP → 存入 `~/Projects/withme-youtube/audio/v{N}/`
6. 发送曲目清单给 Ken 确认
**⚠️ 关键:必须用 `Page.setDownloadBehavior`(非 Browser 级),必须用 `browser` 工具(`web_fetch` 会被 Cloudflare 403)。**
### 阶段 5:FFmpeg 合成 ⏱️ ~5 分钟出脚本
1. 复制 `scripts/build-template.sh` → `scripts/build-v{N}.sh`
2. 填入实际路径(图片、音频、输出)
3. 设定参数:
- 总时长 7200 秒(2 小时)
- 5 场景各 1440 秒,Ken Burns 缓动
- 场景间 3 秒交叉淡入淡出
- 音量:音乐 -20dB / 环境音 -16dB / 氛围音 -22dB
- 开头 10 秒淡入,结尾 30 秒淡出
- 输出:4K H.264 CRF 18 + AAC 192k
4. 发给 Ken 审核后执行
### 阶段 6:封面 + 发布资料包 ⏱️ ~15 分钟(可与阶段 5 并行)
1. 派 @designer 制作 1280×720 封面(3 个备选)
2. 派 @seo 准备:
- **标题** — 品牌格式
- **英文描述** — 氛围叙事 + 时间戳 + 使用场景 + 频道介绍 + Envato credit block
- **30 个标签** — 高流量/中竞争/长尾三层
3. 派 @writing 翻译繁中版
4. 整合为 `memory/youtube-publish-v{N}.md`
5. 发给 Ken 选封面 + 审核
### 阶段 7:上传排程 ⏱️ ~5 分钟
1. Ken 确认成品后,写入上传队列:
```json
// ~/.openclaw/shared/upload-queue.json
{
"title": "With me. | ...",
"file": "~/Projects/withme-youtube/exports/v{N}.mp4",
"thumbnail": "~/Projects/withme-youtube/thumbnails/v{N}.jpg",
"description": "...",
"tags": ["..."],
"publishAt": "下周五 10:00 GMT+8",
"status": "pending"
}
```
2. 上传脚本:`~/.openclaw/shared/youtube_upload.py`
3. OAuth 凭证:`~/.openclaw/shared/youtube_client_secret.json`
4. Google 账号:`kylin1986@gmail.com`
### 阶段 8:Shorts 切片 ⏱️ ~10 分钟(上传后自动)
1. 从成品影片切出 5 支 Shorts(每支 30 秒,各场景一支)
2. 制作 Shorts 标题/描述(参考 youtube-shorts skill)
3. 排程:每周 3-5 条,穿插在工作日
---
## Ken 手动介入的节点(3 个)
| 节点 | 原因 |
|------|------|
| 阶段 1 确认主题 | 确保方向正确 |
| 阶段 5 审核 FFmpeg 参数 | 本地算力 + 美学微调 |
| 阶段 6 选封面 + 审核资料包 | 最终品质把关 |
## 全自动节点
- 图片生成 + 放大(@designer exec)
- Envato 音频搜索+下载(@research browser + CDP)
- SEO 资料包(@seo)
- 翻译(@writing)
- YouTube 上传排程(youtube_upload.py)
- Shorts 切片
---
## 状态追踪
每个阶段完成后更新 `memory/youtube-progress-v{N}.md`:
```markdown
# V{N} 制作进度 — {主题}
- [x] 阶段 1:主题确认 ✅ 2026-03-XX
- [x] 阶段 2:图片生成 ✅ 5/5 张
- [ ] 阶段 3:4K 放大
- [ ] 阶段 4:音频准备
- [ ] 阶段 5:FFmpeg 合成
- [ ] 阶段 6:封面+资料包
- [ ] 阶段 7:上传排程
- [ ] 阶段 8:Shorts 切片
```
---
## 发布设定
### 排程
- **每周五 10:00 台湾时间 (GMT+8)**
- 对应北美周四 18:00 PST
### YouTube Studio 设定
- 类别:音乐
- 语言:English
- Made for Kids:否
- 允许嵌入:是
- 通知订阅者:是
- 评论:开启 / 基本管理
### 音乐数量指南
- **最低 5-6 首**(单循环 ~15 分钟)
- 3 首循环感明显,影响留存
- 甜区:5-8 首
### 发布后检查
- [ ] 确认排程时间正确
- [ ] 繁中翻译填入 Translations
- [ ] 版权检测通过,有 claim 用 License PDF 争议
- [ ] Shorts 排程就位
---
## 一键触发
Ken 或 Main 发送:「开始制作 V{N}:{主题}」
小米自动执行阶段 1-8,仅在 3 个节点暂停等 Ken 确认。
标签
skill
ai