Files
MediaCrawler/mac-agent-os-main/05_tools/09_ave/PLANS/AVE_IMPLEMENTATION_PLAN.md
T
butubb 2112c1a870
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s
feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。

**目前能用的(真环境实测,非推断)**:

    profile/other : 200, 7075 字节  —— 博主主页指标(粉丝/获赞/作品数/昵称)
    aweme/detail  : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)

**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
  1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
     带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
     同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
     挑中的恰好是「批量拉作品列表」这个最敏感的动作。
  2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
     代价,过几小时要重测)。

  所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。

**排查中控住变量后得到的两条事实**(都写进注释了):
  · `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
    UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
    (我先前猜的 sec-ch-ua 不是关键。)
  · 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
    从 CDP 取齐 cookie + UA + hints,而不是各自写死。

「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。

测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
2026-10-10 17:12:25 +08:00

18 KiB
Raw Blame History

AVE v2.0 落地实施计划

AudioScore Video Engine — 智能体可调用的自动化视频编排引擎

版本: v1.0 (规划) 创建: 2026-05-04 负责人: ghai / Claw 状态: 📋 规划阶段


一、项目概览

1.1 这是什么

AVE v2.0 是一个以双轨音频锚点为时间轴,通过导演脚本精确控制视听元素的自动化视频编排引擎。它接收结构化YAML指令,输出最终视频文件。

1.2 核心能力

能力 说明 技术方案
情绪化人声合成 一个音色演绎多种情绪 豆包语音 2.0 (火山引擎)
背景音乐生成 氛围化配乐,风格可控 ACE-Step 1.5 / MusicGen (云GPU)
数字人出镜 静态图→口播视频 Wan2.2-S2V (通义万相 API)
素材搜索 根据语义搜索视频素材 Pexels API (免费)
导演脚本 文案→结构化YAML→视频 本地大模型解析
渲染合成 多轨合成最终视频 Remotion + FFmpeg

1.3 系统架构图

                用户文案
                   │
              [01_director_parser]
             大模型解析 → director_script.yaml
                   │
     ┌─────────────┼─────────────┐
     │             │             │
     ▼             ▼             ▼
[02_voice]    [03_bgm]     [05_material]
豆包语音2.0   ACE-Step     Pexels + Wan2.2
     │             │             │
     └─────────────┼─────────────┘
                   │
              [04_anchor_extractor]
              双轨锚点对齐
                   │
              [06_composer]
            Remotion + FFmpeg
                   │
              final.mp4

二、目录结构与文件清单

2.1 工具模块路径

参照 05_tools/ 现有模块的 TOOL.md + scripts/ 结构:

~/workbuddy-agent-os/agent-sync/
├── 05_tools/
│   └── 09_ave/                          ← 工具模块根目录
│       ├── TOOL.md                      ← 工具说明文档 (必须)
│       ├── install.sh                   ← 一键安装脚本 (可选)
│       ├── requirements.txt.pip         ← Python 依赖
│       ├── config.yaml                  ← API 密钥/默认参数配置模板
│       │
│       ├── scripts/                     ← 核心脚本目录
│       │   ├── __init__.py
│       │   ├── main.py                  ← 统一 CLI 入口
│       │   │
│       │   ├── 01_director_parser/
│       │   │   ├── __init__.py
│       │   │   ├── parser.py            ← 文案 → director_script.yaml
│       │   │   └── schemas.py           ← YAML 结构校验
│       │   │
│       │   ├── 02_voice_synthesizer/
│       │   │   ├── __init__.py
│       │   │   ├── volcano.py           ← 豆包语音 2.0 适配器
│       │   │   └── aliyun.py            ← CosyVoice 备用适配器
│       │   │
│       │   ├── 03_bgm_generator/
│       │   │   ├── __init__.py
│       │   │   ├── ace_step.py          ← ACE-Step 1.5 适配器
│       │   │   └── suno.py              ← Suno API 备用适配器
│       │   │
│       │   ├── 04_anchor_extractor/
│       │   │   ├── __init__.py
│       │   │   └── extractor.py         ← librosa 锚点提取
│       │   │
│       │   ├── 05_material_producer/
│       │   │   ├── __init__.py
│       │   │   ├── pexels.py            ← Pexels 搜索
│       │   │   ├── wan2_2.py            ← Wan2.2-S2V 适配器
│       │   │   └── fallback.py          ← 本地素材回落
│       │   │
│       │   ├── 06_composer/
│       │   │   ├── __init__.py
│       │   │   ├── remotion.py          ← Remotion 项目生成
│       │   │   └── ffmpeg.py            ← FFmpeg 后处理
│       │   │
│       │   ├── 07_service_layer/
│       │   │   ├── __init__.py
│       │   │   ├── api.py               ← FastAPI 服务
│       │   │   └── skill_bridge.py      ← WorkBuddy 技能对接
│       │   │
│       │   └── lib/                     ← 通用工具库
│       │       ├── __init__.py
│       │       ├── config.py            ← 配置加载
│       │       ├── cache.py             ← 素材/结果缓存
│       │       └── logger.py            ← 日志
│       │
│       └── assets/                      ← 模板/参考资源
│           ├── director_template.yaml   ← 导演脚本模板
│           └── demo_scripts/            ← 测试脚本集
│
├── 02_skills/
│   └── ave/                             ← WorkBuddy 技能
│       ├── SKILL.md                     ← 技能定义
│       └── reference/                   ← 技能参考文档
│           └── director_schemas.md
│
└── agent-local/
    └── tools/
        └── ave/                         ← 本机数据(不同步)
            ├── config/
            │   └── local.yaml           ← 本地 API 密钥等敏感配置
            ├── cache/
            │   ├── materials/           ← 素材缓存
            │   └── outputs/             ← 渲染缓存
            └── templates/
                └── remotion/            ← Remotion 项目模板

2.2 核心文件清单

编号 文件 功能 优先级
P0 09_ave/TOOL.md 工具说明文档 ⭐ 必须
P0 09_ave/scripts/main.py CLI 入口 ⭐ 必须
P0 09_ave/scripts/01_director_parser/parser.py 文案解析 ⭐ 必须
P0 09_ave/scripts/02_voice_synthesizer/volcano.py 豆包语音 ⭐ 必须
P0 09_ave/scripts/05_material_producer/pexels.py 素材搜索 ⭐ 必须
P0 09_ave/scripts/06_composer/ffmpeg.py 合成 ⭐ 必须
P1 09_ave/scripts/03_bgm_generator/ace_step.py 背景音乐 建议
P1 09_ave/scripts/04_anchor_extractor/extractor.py 锚点提取 建议
P2 09_ave/scripts/05_material_producer/wan2_2.py 数字人 可选
P2 09_ave/scripts/07_service_layer/api.py FastAPI 服务 可选
P2 02_skills/ave/SKILL.md WorkBuddy 技能 可选

三、实施阶段(分4阶段推进)

阶段 1:基础设施(1天)

目标:目录结构搭建 + API 注册 + 配置就绪

任务清单:
☐ 创建 09_ave/ 完整目录结构
☐ 创建 agent-local/tools/ave/config/ 目录
☐ 注册火山引擎豆包语音 2.0 → 获取 API Key + App ID + Access Token
☐ 注册阿里云百炼 → 获取 API Key
☐ 注册 Pexels → 获取 API Key
☐ 编写 config.yaml 模板
☐ 编写 local.yaml(本地敏感配置)
☐ 编写 install.sh 安装脚本
☐ 编写 TOOL.md 工具说明
☐ 提交到 Git: git add, commit, push

产出:

  • 可 git clone 后在目标机器 bash install.sh 一键就绪
  • agentos upgrade 能识别并检查 09_ave 模块

阶段 2:核心链路 MVP(2-3天)

目标:跑通 文案→人声→素材→合成 的可用闭环

任务清单:

02_voice_synthesizer (半天)

☐ 实现 volcano.py 基础 TTS 调用
☐ 测试: python main.py voice --text "测试" --output test.wav
☐ 上传音色样本 → 获取 speaker_id
☐ 实现情感指令参数: emotion, speed, pitch
☐ 实现 CosyVoice 备用适配器

05_material_producer (半天)

☐ 实现 pexels.py 搜索+下载
☐ 实现回退策略: search → fallback cache
☐ 测试: python main.py material --search "sunset beach"

01_director_parser (半天)

☐ 实现 schemas.py YAML 结构校验 (Pydantic)
☐ 实现 parser.py 文案 → YAML
☐ 编写 director_template.yaml
☐ 测试: python main.py parse --script demo.txt

06_composer (半天)

☐ 实现 ffmpeg.py 音视频合成
☐ 实现字幕叠加 (ass/srt 字幕)
☐ 测试: python main.py compose --voice voice.wav --material clips/

MVP 集成测试

☐ 用一个小笑话脚本跑通完整链路
☐ 产出第一个 final.mp4(纯人声+素材画面)

阶段 3:品质提升(1-2天)

目标:加入背景音乐 + 锚点对齐 → 多轨精准编排

任务清单:

03_bgm_generator

☐ 调研 ACE-Step 1.5 部署方案 (云端 GPU)
☐ 或实现 Suno API 备用适配器
☐ 实现 ace_step.py → bgm.wav

04_anchor_extractor

☐ 实现 extractor.py (librosa 节奏检测)
☐ 实现人声字级锚点: word_timestamps → anchors.json
☐ 实现 BGM 段落锚点: section_boundaries

01_director_parser 升级

☐ 支持完整的导演脚本模板 (bgm_section, camera, avatar 等字段)

06_composer 升级

☐ 双轨混音: voice.wav + bgm.wav → mixed_audio.wav
☐ 基于锚点对齐画面切换
☐ 支持分段渲染 (3分钟以上视频)

阶段 4:数字人 + 技能封装(1天)

目标:数字人出镜 + 作为 WorkBuddy 技能可调用

任务清单:

05_material_producer 升级

☐ 实现 wan2_2.py (通义万相 S2V)
☐ 实现 detect 图片合规检查
☐ 实现异步任务轮询
☐ 回落策略: detect失败 → 重试 → 跳过数字人

07_service_layer

☐ FastAPI 服务: POST /ave/generate
☐ 任务队列 + 进度轮询
☐ 错误处理与重试逻辑

02_skills/ave/SKILL.md

☐ 技能触发词: 视频、剪辑、生成视频
☐ 输入: 文案文本 + 风格标签
☐ 流程: 调用大模型 → 生成 YAML → 调用 AVE API
☐ 输出: 返回 final.mp4 本地路径

四、API 注册清单与成本

4.1 必须注册的服务

服务 用途 注册步骤 预计耗时
火山引擎 豆包语音 2.0 注册→实名→ARK模型服务→创建API Key 30min
阿里云百炼 Wan2.2-S2V + CosyVoice 注册→实名→开通服务→创建API Key 20min
Pexels 素材搜索 注册→API Dashboard→创建Application 10min

4.2 各服务凭证清单

agent-local/tools/ave/config/local.yaml:

# 火山引擎 (豆包语音 2.0)
volcano:
  api_key: "sk-xxx"          # ARK → API Key 管理
  app_id: "xxx"              # 语音控制台 → App ID
  access_token: "xxx"        # 语音控制台 → Access Token
  speaker_id: "xxx"          # 声音复刻 → 训练后获取
  tts_model: "volcano_tts_2.0"

# 阿里云百炼
aliyun:
  api_key: "sk-xxx"          # 百炼 → API Key
  wan_model: "wan2.2-s2v"
  cosyvoice_model: "cosyvoice-v3.5-plus"

# Pexels
pexels:
  api_key: "xxx"             # Pexels API Dashboard
  rate_limit: 200             # 请求/小时

4.3 月费预估 (日更一条3分钟视频)

模块 方案 月费 备注
人声合成 豆包语音 2.0 年付 ~22元 首3月免费
数字人 HeyGen Creator ~211元 或用 Wan2.2 API 按量计费
背景音乐 ACE-Step 云端GPU ~2元 或 Suno API ~15-30元
素材搜索 Pexels 0元 免费
大模型调用 DeepSeek / 通义千问 ~1-10元 文案解析
合计 ~25-250元/月 取决于数字人方案

五、本地硬件需求

环节 部署位置 需求 Mac 16G 可行性
文案解析 云端 API 无 ✅ 直接调
人声合成 云端 API 无 ✅ 直接调
背景音乐 云端 GPU 6GB+ 显存 ❌ 需云 GPU
数字人 云端 API 无 ✅ 直接调
素材搜索 云端 API 无 ✅ 直接调
锚点提取 本地 CPU, librosa ✅
Remotion 本地 16GB RAM ✅ 3-5min 以内
FFmpeg 本地 无特殊要求 ✅ 已装

结论:Mac 16GB 内存足够处理 3 分钟内视频的本地环节。 仅背景音乐生成(ACE-Step)和 Remotion 渲染长视频需要云端或分段。


六、可能遇到的问题与应对

6.1 API 层问题

问题 概率 影响 应对方案
豆包语音 API 认证失败 中 人声不可用 实现 CosyVoice 备选;local.yaml 三重凭证逐一校验
Wan2.2-S2V 图片检测不通过 中 数字人无法生成 回落:跳过数字人片段,仅用素材画面+字幕
Pexels 搜索无结果 高 素材缺失 3层回落:search → AI生成 → fallback_mood_videos
Pexels 速率限制 低 搜索被限 本地缓存层,已搜过的关键词不重复请求
ACE-Step API 响应慢 中 BGM 生成延迟 异步队列,不影响主流程;或改用 Suno API

6.2 本地渲染问题

问题 概率 影响 应对方案
Remotion 内存不足 中 长视频渲染失败 分段渲染(3分钟/段)→ FFmpeg concat
FFmpeg 编码参数不合适 低 视频过大/质量差 预设多组编码参数,按场景切换
中间文件撑满磁盘 中 渲染中断 自动清理策略:渲染成功后删除 wav/clips
中文字幕编码乱码 低 字幕显示异常 强制 UTF-8 + ASS 格式(非 SRT)

6.3 编排逻辑问题

问题 概率 影响 应对方案
语音与画面不同步 中 观感差 锚点容差机制:画面切换 ±0.2s
BGM 段落与文案不匹配 中 情绪割裂 导演脚本中明确 bgm_section 映射
多个素材时长与口播不匹配 高 画面空白/超长 自动拼接/裁剪素材到精确时长
大模型解析 YAML 格式错误 中 链路中断 schemas.py 严格校验 + 自动修复

七、落地检查清单

7.1 基础设施

☐ 09_ave/ 目录创建完成
☐ TOOL.md 编写完成
☐ install.sh 编写完成
☐ agent-local/tools/ave/config/local.yaml 配置完成
☐ agentos upgrade 能识别 09_ave 模块
☐ git commit + push 到远程

7.2 MVP 链路

☐ 豆包语音 2.0 TTS 调用成功 → test.wav
☐ Pexels 搜索+下载成功 → material.mp4
☐ 文案→导演脚本 YAML 解析成功
☐ FFmpeg 音视频合成成功 → final.mp4
☐ 小笑话脚本跑通全链路

7.3 品质提升

☐ 背景音乐生成 (ACE-Step/Suno) → bgm.wav
☐ 双轨混音: voice + bgm
☐ 锚点提取 + 画面同步切换
☐ 分段渲染 + concat (长视频)

7.4 技能封装

☐ Wan2.2-S2V 数字人接入
☐ FastAPI 服务运行
☐ 02_skills/ave/SKILL.md 编写
☐ agentos sync 注册技能
☐ 技能调用测试: "帮我把这段文案做成视频"

八、技能定义草案

8.1 技能触发

技能名:ave_video_director

触发词:

  • 视频、剪辑、生成视频、做视频
  • 把这段话做成视频、AI 视频、自动剪辑
  • director script、导演脚本

8.2 技能流程

用户输入文案
    ↓
01_director_parser: 大模型解析文案 → director_script.yaml
    ↓
02_voice_synthesizer: 逐段合成情绪化人声 → voice_segments/
    ↓
03_bgm_generator: 生成背景音乐 → bgm.wav (可选)
    ↓
04_anchor_extractor: 双轨锚点提取 → anchors.json
    ↓
05_material_producer: 并行搜索素材 → material_clips/
                      + Wan2.2-S2V → avatar_clips/ (可选)
    ↓
06_composer: 编排渲染 + 编码 → final.mp4
    ↓
返回 final.mp4 路径给用户

8.3 用户输入示例

# 最简调用
python main.py generate --script "今天我们来聊聊..."

# 指定风格
python main.py generate --script demo.txt --style bedtime_story

# 高级:直接传导演脚本
python main.py compose --director-script script.yaml

九、首次启动步骤

# 1. 进入项目
cd ~/workbuddy-agent-os/agent-sync

# 2. 创建目录结构
mkdir -p 05_tools/09_ave/{scripts/{01_director_parser,02_voice_synthesizer,03_bgm_generator,04_anchor_extractor,05_material_producer/{pexels,wan2_2,fallback},06_composer,07_service_layer,lib},assets/demo_scripts}
mkdir -p agent-local/tools/ave/{config,cache/{materials,outputs},templates/remotion}

# 3. 配置 API 密钥 (参考 4.2 节)
# 编辑 agent-local/tools/ave/config/local.yaml

# 4. 安装 Python 依赖
pip install -r 05_tools/09_ave/requirements.txt.pip

# 5. 测试人声合成
python 05_tools/09_ave/scripts/main.py voice --text "你好,这是测试" --output test.wav

# 6. 跑通 MVP 闭环 (文案→人声→素材→合成)
python 05_tools/09_ave/scripts/main.py generate --script assets/demo_scripts/test_story.txt

# 7. 注册技能到 WorkBuddy
agentos sync

# 8. 提交到 Git
git add -A && git commit -m "feat: AVE v2.0 工具模块初始化" && git push

十、文件生成顺序(按依赖关系)

第1批 (并行,无依赖):
  ├── TOOL.md
  ├── config.yaml
  ├── requirements.txt.pip
  ├── lib/config.py
  ├── lib/cache.py
  └── lib/logger.py

第2批 (无内部依赖):
  ├── 02_voice_synthesizer/volcano.py
  ├── 05_material_producer/pexels.py
  └── 06_composer/ffmpeg.py

第3批 (依赖第2批):
  ├── 01_director_parser/parser.py
  ├── 01_director_parser/schemas.py
  ├── 02_voice_synthesizer/aliyun.py
  └── 05_material_producer/fallback.py

第4批 (依赖第2+3批):
  ├── 03_bgm_generator/ace_step.py
  ├── 03_bgm_generator/suno.py
  ├── 04_anchor_extractor/extractor.py
  └── 06_composer/remotion.py

第5批 (依赖前面全部):
  ├── main.py (CLI 入口)
  ├── 05_material_producer/wan2_2.py
  ├── 07_service_layer/api.py
  └── 07_service_layer/skill_bridge.py

第6批 (最后):
  ├── 02_skills/ave/SKILL.md
  ├── install.sh
  └── assets/director_template.yaml

文档版本: v1.0 最后更新: 2026-05-04 下一步: 开始阶段1 → 目录创建 + API 注册