feat(video-from-script): 批量生产元数据增强 — 选题/转发文案/草稿命名/导出/草稿箱改名
- batch-pipeline.js: 新增 mark 元数据字段(topicA/B, draftName, forwardCopy, hashtags) - batch-pipeline.js: 新增 export 命令导出 CSV/XLSX 最终表格 - batch-pipeline.js: 新增 rename-drafts 命令批量重命名剪映草稿(Mac 直接 mv 文件夹) - batch-pipeline.js: 完善 displayTitle 向后兼容旧 topic 字段 - lib/phase-tts: 增强 TTS 生成稳定性 - lib/phase-videos: 视频生成优化 - lib/video-poll-utils: 提取轮询重试共享工具 - CLAUDE.md: 补充批量生产选题/转发文案/草稿命名/导出/草稿箱改名文档 - 执黑先行 account.json: 配置更新 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
98
CLAUDE.md
98
CLAUDE.md
@@ -39,7 +39,49 @@
|
||||
|
||||
用户给一个 Excel/CSV,每行一条视频,Agent 逐条 spawn Worker 子 Agent 执行完整 pipeline。
|
||||
|
||||
**Excel 格式:** `选题 | 脚本 | 账号 | 模式 | 音色`(账号/模式/音色可选,可由 CLI 参数指定默认值)
|
||||
**Excel 格式:** `选题 | 脚本 | 账号 | 模式 | 音色 | 转发文案带话题`(账号/模式/音色/转发文案可选,可由 CLI 参数指定默认值)
|
||||
|
||||
## 选题 & 转发文案自动生成
|
||||
|
||||
如果 Excel 中**选题**或**转发文案带话题**列为空,Orchestrator 必须在生成视频前自动填充:
|
||||
|
||||
1. `batch-pipeline.js next --file <manifest> --with-script` 获取脚本内容
|
||||
2. 根据脚本内容生成:
|
||||
|
||||
**选题(封面标题)— 两种方案:**
|
||||
- **方案A**(封面双句):≤12字,上下句中间用「·」分隔,每半句 5-7 字。语不惊人死不休,首要目标是点击欲望。示例:「闭嘴做事·才是狠人」「你的烦恼·就是缺钱」
|
||||
- **方案B**(封面短标题):≤4字,极致精简,制造悬念缺口。用于草稿命名。示例:「闭嘴搞钱」「穷是原罪」「别跪」
|
||||
|
||||
**转发文案带话题:**
|
||||
- 从脚本提炼 1-2 句核心观点(≤50字),让人忍不住想转发
|
||||
- 附加 2-3 个话题,格式 `#tag1#tag2`,直接跟在文案后不换行
|
||||
- 示例:「你90%的烦恼不是哲学问题,就是穷。别矫情了,爬起来搞钱。#搞钱逻辑 #人性真相」
|
||||
|
||||
**草稿名称:**
|
||||
- 格式:`账号名_月日_序号_方案B名称`
|
||||
- 月日为视频完成日期(MMDD),序号为 Excel 行号(两位数补零)
|
||||
- 示例:`执黑先行_0513_01_别跪`
|
||||
|
||||
3. 通过 `mark` 命令回写元数据,再 spawn Worker 生产视频:
|
||||
|
||||
```bash
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js mark \
|
||||
--file <batch-manifest> --row <N> --status processing \
|
||||
--topic-a "闭嘴做事·才是狠人" --topic-b "闭嘴搞钱" \
|
||||
--draft-name "执黑先行_0513_01_闭嘴搞钱" \
|
||||
--forward-copy "嘴巴是用来吃饭的,不是用来树敌的" \
|
||||
--hashtags "#反派人格#强者思维"
|
||||
```
|
||||
|
||||
**话题库参考(根据脚本内容选用,也可自创):**
|
||||
|
||||
| 领域 | 常用话题 |
|
||||
|------|---------|
|
||||
| 人性/心理 | `#人性解码` `#反派人格` `#认知升级` `#暗黑心理学` `#人性真相` |
|
||||
| 权谋/博弈 | `#执黑先行` `#权力游戏` `#博弈论` `#厚黑学` `#权谋智慧` |
|
||||
| 成长/逆袭 | `#强者思维` `#底层逆袭` `#认知觉醒` `#阶层跨越` |
|
||||
| 情感/关系 | `#亲密关系` `#情感操控` `#两性博弈` `#关系本质` |
|
||||
| 商业/赚钱 | `#商业思维` `#搞钱逻辑` `#财富密码` `#赚钱思维` |
|
||||
|
||||
**CLI 命令:**
|
||||
|
||||
@@ -50,24 +92,66 @@ node .claude/skills/video-from-script/scripts/batch-pipeline.js init --file <xls
|
||||
# 2. 查看进度
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js status --file output/batch_XXX/batch-manifest.json
|
||||
|
||||
# 3. 获取下一条待处理(JSON 格式)
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js next --file output/batch_XXX/batch-manifest.json
|
||||
# 3. 获取下一条待处理(JSON 格式,--with-script 附带脚本正文)
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js next --file output/batch_XXX/batch-manifest.json [--with-script]
|
||||
|
||||
# 4. 标记状态
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js mark --file ... --row <N> --status <completed|failed> [--manifest-path <path>] [--error <msg>]
|
||||
# 4. 标记状态(含元数据回写)
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js mark \
|
||||
--file ... --row <N> --status <completed|failed> \
|
||||
[--manifest-path <path>] [--error <msg>] \
|
||||
[--topic-a <方案A>] [--topic-b <方案B>] [--draft-name <草稿名称>] \
|
||||
[--forward-copy <转发文案>] [--hashtags <话题>]
|
||||
|
||||
# 5. 重跑失败项
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js retry-failed --file output/batch_XXX/batch-manifest.json
|
||||
|
||||
# 6. 导出最终表格(批次完成后)
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js export --file output/batch_XXX/batch-manifest.json [--format csv|xlsx]
|
||||
|
||||
# 7. 批量重命名剪映草稿箱(Mac 版:文件夹名 = 显示名,直接 mv)
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js rename-drafts --file output/batch_XXX/batch-manifest.json
|
||||
```
|
||||
|
||||
**执行策略:Orchestrator-Worker**
|
||||
|
||||
- **Orchestrator(主 Agent)**:读 batch-manifest 元数据,逐条 spawn Worker 子 Agent,收集结果
|
||||
- **Worker(子 Agent)**:独立上下文,处理单条视频的完整流程(分镜 → 生图 → 生视频 → TTS → 成片)。Worker 调用 `pipeline.js init` 时通过 `--tts-voice` 传入音色
|
||||
- **Orchestrator(主 Agent)**:读 batch-manifest 元数据,逐条处理每条视频
|
||||
- **每条视频分两步**:
|
||||
1. **预处理**:`next --with-script` 获取脚本 → 生成选题/转发文案/话题 → `mark --status processing` 回写元数据
|
||||
2. **生产**:spawn Worker 子 Agent,处理完整视频流程(分镜 → 生图 → 生视频 → TTS → 成片)
|
||||
- **Worker(子 Agent)**:独立上下文,处理单条视频的完整流程。Worker 调用 `pipeline.js init` 时通过 `--tts-voice` 传入音色
|
||||
- Orchestrator 上下文只存 batch-manifest 元数据,不读脚本正文
|
||||
- 脚本正文通过文件路径传给 Worker,Worker 自行 Read
|
||||
- 批量模式下人工确认环节自动跳过(`confirm --all`)
|
||||
|
||||
## 批量完成后 — 导出表格
|
||||
|
||||
批次全部完成后,执行导出输出最终表格:
|
||||
|
||||
```bash
|
||||
node .claude/skills/video-from-script/scripts/batch-pipeline.js export --file output/batch_XXX/batch-manifest.json
|
||||
```
|
||||
|
||||
输出 CSV 表格,列:`选题 | 脚本 | 账号 | 模式 | 音色 | 转发文案带话题 | 草稿名称`
|
||||
|
||||
- **选题**列 = 方案A(封面双句)
|
||||
- **草稿名称**列 = `账号名_月日_序号_方案B`
|
||||
- CSV 文件路径:`batch-manifest_export.csv`(与 manifest 同目录)
|
||||
- 导出后询问用户是否打包草稿到桌面
|
||||
|
||||
## 草稿箱改名
|
||||
|
||||
Mac 版剪映(JianyingPro)草稿箱显示名称 = `com.lveditor.draft/` 下的**文件夹名**。
|
||||
|
||||
**直接 `mv` 重命名文件夹即可**,不要改内部 JSON 文件(`draft_content.json`、`draft_meta_info.json` 等)。
|
||||
|
||||
草稿路径:`~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/`
|
||||
|
||||
```bash
|
||||
# 改名示例
|
||||
mv "~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/20260514123331fc3c6352" \
|
||||
"~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/执黑先行_0514_14_造局者"
|
||||
```
|
||||
|
||||
**草稿 = CapCut 剪映项目文件**,由 pipeline 的 `assemble` 阶段生成,输出到本地剪映目录。
|
||||
|
||||
# 参考文档
|
||||
|
||||
Reference in New Issue
Block a user