Files
MediaCrawler/mac-agent-os-main/05_tools/09_ave/scripts/AVE_ARCHITECTURE_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

20 KiB
Raw Blame History

AVE 视频工厂 — 全链路架构规划 v1.0

日期: 2026-05-18 | 版本: 1.0 定位: 梳理所有生产路径 + 底层能力原子化 + 自审可行性


目录

  1. 核心洞察
  2. AVE 六条生产路径总览
  3. 底层能力层(原子化)
  4. 各生产路径的完整链路
  5. 新增:模仿视频线(Action Transfer)
  6. 交叉能力矩阵
  7. 优先级与落地路线图
  8. 自审与可行性分析
  9. 具体落地建议

1. 核心洞察

1.1 用户提到的三条线本质是同一逻辑

用户说的 本质 核心操作
卡点视频 音频节拍 → 视觉同步切换 BPM分析 + 拍点对齐 + 素材切换
模仿视频 参考视频 → 提取节奏/动作 → 复用结构 参考视频分析 + 动作迁移 + 结构复用
主人公更换 已有视频 → 替换角色 → 保持动作/场景 角色识别 + 角色替换 + 动作保持

三者共享同一条底层流水线: 参考源分析 → 结构提取 → 角色/素材替换 → 重新合成

1.2 AVE 当前状态

已实现 5 条独立生产路径,但存在三个结构性问题:

问题 后果
各策略独立实现,底层能力重复 口播的素材搜索和卡点的素材搜索各写一遍
角色系统只在"故事"策略中使用 口播、卡点、数字人都需要角色但没接入
AudioLine 刚刚建成但未接入主流程 音频处理能力独立于视频工厂

1.3 解决思路

分层架构: 底层能力层(原子操作) → 策略编排层(生产路径) → 接入层(CLI/Dashboard)


2. AVE 六条生产路径总览

AVE 视频工厂
│
├─ 1. 口播线        文案→TTS→素材→BGM→字幕→合成
├─ 2. 卡点线        BGM→节拍检测→素材→拍点切换→xfade
├─ 3. 数字人线      照片/视频→OmniHuman对口型/DreamActor动作模仿
├─ 4. 口播+卡点线    人声锚点+BGM变速→帧锁定拼接 (hybrid)
├─ 5. 故事/漫剧线    剧本→场景分解→Kling批量→角色拼接
├─ 6. 模仿视频线 ★  参考视频→结构分析→动作迁移/角色替换→合成
│
└─ 7. 音频制造线 (独立)
    ├─ 原创         AudioLine Layer3 创作模块
    ├─ 二创         分层改编 (节奏/歌词/旋律/混音)
    ├─ 卡点改编     节拍重塑 + BPM对齐
    └─ → 接入上述 1-6 条线输出成品

3. 底层能力层(原子化)

所有生产路径共享的原子能力。每个能力可独立测试、独立优化、被多种策略调用。

3.1 音频原子能力 ← AudioLine

原子能力 输入 输出 被哪些路径使用
A1. 音轨分离 音频文件 {vocals, drums, bass, other} 分轨 2-卡点, 4-hybrid, 6-模仿, 7-音频
A2. BPM/节拍检测 音频文件 BPM + 节拍时间戳 + 重拍 2-卡点, 4-hybrid, 6-模仿
A3. 歌曲结构解析 音频文件 [{label, start, end}] 段落 6-模仿, 7-二创
A4. 情绪分析 音频文件 mood + energy + danceability 1-口播(BGM选曲), 5-故事(风格匹配)
A5. 节奏生成 BPM+风格参数 鼓点/节奏音频 2-卡点, 7-原创
A6. 歌词创作 原歌词 + 主题 改写歌词 7-二创
A7. 旋律改编 音频 + 风格 改编旋律 7-二创
A8. 混音母带 多轨音频 混合主轨 + 响度归一 1-口播, 2-卡点, 7-原创/二创
A9. 分轨时间对齐 分轨 + 目标BPM 对齐后分轨 2-卡点, 6-模仿
A10. 歌词-节拍对齐 歌词 + 节拍 时间轴 + LRC/SRT 1-口播, 2-卡点
A11. 多格式导出 音频 + 格式 WAV/MP3/FLAC/AAC 全部

3.2 视觉原子能力

原子能力 输入 输出 被哪些路径使用
V1. 素材搜索 关键词 + 数量 视频素材列表(URL/本地) 1-口播, 2-卡点, 4-hybrid
V2. Ken Burns 效果 静态图片 缓慢缩放/平移视频 1-口播, 5-故事
V3. 节拍视觉对齐 素材 + 节拍 按拍点切割/过渡的视频段 2-卡点, 4-hybrid, 6-模仿
V4. 变速卡点 素材 + 节拍能量 高潮加速/低谷减速 4-hybrid
V5. 视频拼接 视频片段列表 完整视频 (xfade/crossfade) 全部
V6. 字幕叠加 时间轴 + 文本 ASS字幕文件 + 视频叠加 1-口播, 2-卡点, 5-故事
V7. 定妆照生成 角色描述 角色多角度参考图 (Grid Method) 5-故事, 6-模仿 ★
V8. 图生视频 图片 + Prompt 短视频片段 (Kling) 5-故事, 6-模仿 ★
V9. 首尾帧过渡 首帧 + 尾帧 + Prompt 平滑过渡视频 5-故事
V10. 语音驱动视频 图片 + 音频 对口型视频 (LipSync) 1-口播, 3-数字人

3.3 动作迁移原子能力 ★ 新增

源自 Doubao 对话的 Animate 模型思路,也可使用现有 DreamActor

原子能力 输入 输出 被哪些路径使用
M1. 参考视频结构分析 视频文件 分段结构 + 镜头节奏 + 动作时间轴 6-模仿
M2. 角色识别/分离 视频 + 角色标识 角色掩码/区域 6-模仿
M3. 动作迁移 (2D/3D) 参考视频 + 目标角色 目标角色复刻动作的视频 3-数字人(DreamActor), 6-模仿
M4. 动作骨架提取 视频 2D/3D 骨骼关键帧序列 6-模仿
M5. 背景替换/保留 视频 + 掩码 去除/保留背景后的视频 6-模仿
M6. 视频结构模板化 视频 → 分镜模板 可复用的 {时间轴 + 切换点 + 动作标记} 6-模仿

3.4 角色原子能力(跨线复用)

原子能力 输入 输出 被哪些路径使用
C1. 角色注册 角色描述 → registry 角色 ID + 属性 + 参考图 全部
C2. 角色锁定 剧本 + 角色 ID 注入角色描述块 5-故事, 6-模仿
C3. 角色一致性保持 角色参考图 + 场景 固定 seed + 定妆照 → 多场景生成 5-故事, 6-模仿
C4. 角色替换 原视频 + 新角色 新角色 + 保留原动作/表情 6-模仿

3.5 通用基础能力

原子能力 说明
G1. 配置加载 config.yaml + local.yaml 合并
G2. 成本追踪 每步操作计费 + API 调用计数
G3. 进度报告 状态机 + Dashboard 埋点
G4. 缓存管理 素材/模型/results 缓存
G5. 错误容错 模块失败不阻塞整条链路

4. 各生产路径的完整链路

用 [A1] 标记引用底层原子能力;[★] 标记待完善/新增

4.1 口播线 (Oral)

当前:  文案 → [TTS] → [素材搜索] → [BGM] → [字幕] → [合成]
        ↓
优化后: 文案 → [TTS] → [素材搜索+V2 Ken Burns] → [AudioLine A4情绪分析选BGM]
        → [混音A8 人声+BGM] → [A10歌词对齐→字幕] → [V10 LipSync] → [合成]

待完善:

  • 接入 AudioLine A4 情绪分析 → 自动匹配 BGM 风格
  • 接入 AudioLine A8 混音 → 专业级人声+BGM 电平平衡
  • V2 Ken Burns 效果 (已有 Pexels 素材多是静态风格需要)

4.2 卡点线 (Beat)

当前:  BGM → [节拍检测] → [素材搜索] → [拍点切换] → [xfade]
       ↓
优化后: BGM → [AudioLine A2节拍检测] → [A5节奏生成(替换/增强鼓点)]
       → [V3节拍视觉对齐] → [V4变速卡点]
       → [A9分轨对齐(对齐到目标BPM)] → [合成]

待完善:

  • 接入 AudioLine A5 节奏生成 → 在原BGM上叠加鼓点增强
  • 接入 AudioLine A9 分轨对齐 → BPM 变更时各轨统一伸缩
  • V3 节拍视觉对齐优化 → 当前只是简单切,需要更精确的拍点类型映射

4.3 数字人线 (Digital Human)

当前:  照片/视频 → [OmniHuman 对口型] / [DreamActor 动作模仿]
       ↓
优化后: 角色[C1注册] → 生成[C7定妆照] → [TTS] → [V10 LipSync] 
       → 可选 [M3动作迁移] → [合成+背景]

待完善:

  • 接入 C1 角色注册 → 数字人可被角色库管理
  • 接入 Asset Manager → 素材复用
  • DreamActor 轮询等待优化 → 当前 60 次循环硬编码

4.4 口播+卡点线 (Hybrid)

当前:  人声 + BGM → [变速卡点] → [帧锁定拼接]
       ↓
优化后: 人声 → [A1音轨分离] → 人声轨道锚点分析 
       + BGM → [A2节拍检测] → BGM能量曲线
       → [V4变速卡点(人声锚点+BGM能量双驱动)]
       → [A8混音(人声+BGM电平平衡)]
       → [V3节拍对齐素材] → [合成]

待完善:

  • 双驱动变速逻辑完善 (人声锚点优先级 > BGM 能量)
  • 接入 AudioLine A8 混音
  • 当前 compose_hybrid 需要和 beat_sync 统一底层

4.5 故事/漫剧线 (Story)

当前:  剧本 → [场景分解] → [桥接] → [Kling批量生成] → [角色拼接]
       ↓
优化后: 剧本 → [C2角色锁定] → [C7定妆照生成]
       → [场景分解(Multi-agent)] → [C3角色一致性保持]
       → [V8图生视频 + V9首尾帧过渡]
       → [AudioLine A6歌词创作 + A10对齐]  # 如有旁白/主题曲
       → [V6字幕叠加] → [合成]

待完善:

  • 角色锁定已实现 (character_locker.py) 但需要和 AudioLine 歌词输出配合
  • 定妆照 → 多场景的角色一致性已部分实现,需扩展到模仿视频线

5. 新增:模仿视频线 (Action Transfer)

这是本方案的核心新增。整合了"卡点模仿" + "主人公更换"两个场景。

[参考视频] → Layer1 分析层 → Layer2 动作迁移 → Layer3 替换合成

5.1 完整链路

输入: 参考视频 + (可选: 目标BGM / 目标角色 / 目标风格)

Step 1 — 参考视频分析 (M1 + A2 + A3)
  ├─ 视频结构分解: 镜头边界检测 → 分段标记
  ├─ 音频分析: [A2 BPM检测] + [A3结构解析] + [A4情绪分析]
  ├─ 视觉分析: [M4骨架提取] → 动作关键帧序列
  └─ 节奏模板: 镜头切换时间轴 + 动作标记 + 节拍映射

Step 2 — 素材/角色准备
  ├─ 使用原视频素材 → 只替换角色 [M5背景保留 + C4角色替换]
  ├─ 使用新素材 → [V1素材搜索] + [V3节拍对齐]
  └─ 使用原音频 → [A9分轨对齐到目标BPM]

Step 3 — 动作迁移 (M3)
  ├─ 路径A: DreamActor (火山引擎) → 高质量真人动作迁移
  ├─ 路径B: Animate模型 (ComfyUI+阿里) → 2D卡通动作迁移
  └─ 路径C: Pose2Pose (轻量开源) → 简单动作映射

Step 4 — 合成输出
  ├─ 角色一致性保持 [C3]
  ├─ 替换音频: [A8混音] 新BGM/语音 + 原视频动作节奏
  ├─ [V5视频拼接] + [V6字幕叠加]
  └─ [G3进度报告 + G2成本追踪]

5.2 三个子场景映射

用户场景 Step1 输入 Step2 替换 Step3 迁移方式 Step4 输出
卡点模仿 参考视频 换BGM + 换素材 保留原动作节奏 新BGM+新素材的卡点视频
主人公更换 有角色视频 换角色 + 保留动作 DreamActor/Animate 同场景新角色
风格重制 参考视频 换BGM + 换角色 + 换风格 全链路 全新风格视频

5.3 与现有能力的复用关系

模仿视频线 ← 已有  → 复用成熟度
  ├─ A2 BPM检测       → AudioLine ✅ 已实现
  ├─ A3结构解析       → AudioLine ✅ 已实现
  ├─ A9分轨对齐       → AudioLine ✅ 已实现
  ├─ A8混音           → AudioLine ✅ 已实现
  ├─ V1素材搜索       → pexels/search ✅ 已实现
  ├─ V3节拍视觉对齐   → beat_sync.py ✅ 已实现
  ├─ V5视频拼接       → ffmpeg.py ✅ 已实现
  ├─ V6字幕叠加       → ffmpeg.py ✅ 已实现
  ├─ C3角色一致性     → character_registry ✅ 部分实现
  ├─ M3动作迁移       → DreamActor ✅ 已有(DreamActor)
  │                    → Animate模型 ⚠️ 需接入(ComfyUI)
  ├─ M1参考视频分析   → ❌ 需新建
  ├─ M4骨架提取       → ❌ 需新建 (或集成 OpenPose)
  ├─ M5背景替换       → ❌ 需新建
  └─ C4角色替换       → ❌ 需新建 (组合 M3 + M5 + C3)

6. 交叉能力矩阵

每个 ⬜ = 可用,⬛ = 核心依赖,↔ = 可选接入

原子能力 口播 卡点 数字人 Hybrid 故事 模仿 音频制造
音频原子 (A1-A11)
A1 音轨分离 ↔ ⬛ ⬛ ⬛ ⬛
A2 BPM检测 ⬛ ⬛ ⬛ ⬛
A3 结构解析 ↔ ⬛ ⬛
A4 情绪分析 ⬛ ↔ ↔ ⬛ ⬛ ⬛
A5 节奏生成 ⬛ ↔ ↔ ⬛
A6 歌词创作 ↔ ⬛ ⬛
A7 旋律改编 ⬛
A8 混音母带 ⬛ ⬛ ↔ ⬛ ↔ ⬛
A9 分轨对齐 ⬛ ↔ ⬛ ⬛
A10 歌词对齐 ⬛ ↔ ⬛ ↔
A11 多格式导出 ↔ ↔ ↔ ↔ ↔ ↔ ⬛
视觉原子 (V1-V10)
V1 素材搜索 ⬛ ⬛ ⬛ ↔ ⬛
V2 Ken Burns ⬛ ⬛
V3 节拍对齐 ⬛ ⬛ ⬛
V4 变速卡点 ⬛ ⬛ ↔
V5 视频拼接 ⬛ ⬛ ⬛ ⬛ ⬛ ⬛
V6 字幕叠加 ⬛ ↔ ↔ ⬛ ↔
V7 定妆照 ↔ ⬛ ⬛
V8 图生视频 ⬛ ↔
V9 首尾帧 ⬛
V10 LipSync ⬛ ⬛ ↔ ⬛ ↔
动作原子 (M1-M6) ★
M1 视频结构分析 ⬛
M2 角色识别 ↔ ⬛
M3 动作迁移 ⬛ ⬛
M4 骨架提取 ⬛
M5 背景替换 ⬛
M6 模板化 ⬛
角色原子 (C1-C4)
C1 角色注册 ↔ ⬛ ⬛ ⬛
C2 角色锁定 ⬛ ⬛
C3 一致性保持 ⬛ ⬛
C4 角色替换 ⬛

7. 优先级与落地路线图

Phase 1: 接入现有能力 (1-2天) ← 立即开始

# 任务 工作量 价值
1 AudioLine 接入 AVE 主流程 (video_factory.py 调 AudioLine.run) 2h ⭐⭐⭐
2 口播线接入 AudioLine A4 情绪分析 → 自动选BGM 1h ⭐⭐
3 卡点线接入 AudioLine A9 分轨对齐 → 支持BPM变化 1h ⭐⭐⭐
4 口播线接入 AudioLine A8 混音替代简单叠加 1h ⭐⭐
5 角色注册接入数字人线 1h ⭐

Phase 2: 模仿视频线 MVP (3-5天)

# 任务 工作量 依赖
6 M1 参考视频结构分析 (ffmpeg 场景检测 + A2节拍) 4h A2, V5
7 M4 骨架提取集成 (OpenPose 轻量版) 6h -
8 M3 动作迁移路径C (Pose2Pose 轻量) 4h M4
9 模仿视频线编排器 (复用 orchestrator 模式) 4h M1, M3, A2
10 CLI 接入: video-factory --strategy 模仿 2h #9

Phase 3: 角色替换 + 高级动作迁移 (5-7天)

# 任务 工作量 依赖
11 M5 背景替换 (RMBG/rembg) 3h -
12 C4 角色替换组合 (M3+M5+C3) 4h M3, M5
13 M6 视频结构模板化 (保存/加载模板) 3h M1
14 M3 路径A DreamActor 优化 (异步轮询改为 Webhook) 2h M3
15 M3 路径B Animate 模型 ComfyUI 接入 8h -

Phase 4: 优化 + 自动化 (持续)

# 任务 说明
16 原子操作 CLI 化 → 每个原子能力可独立调用
17 Dashboard 接入模仿线 + 动作线数据
18 素材缓存 + 结果缓存 (避免重复 API 调用)
19 批量处理模式 (一次性处理多个参考视频)

8. 自审与可行性分析

8.1 架构合理性审查

审查维度 评分 说明
模块内聚性 ⭐⭐⭐⭐ 每条生产路径独立,底层能力原子化
耦合度控制 ⭐⭐⭐⭐ 上层通过 orchestrator 调用下层,不跨层调用
可扩展性 ⭐⭐⭐⭐⭐ 新增生产路径 = 新编排器 + 复用底层原子
测试可行性 ⭐⭐⭐ 原子能力可单独测试,但端到端链路依赖API
容错能力 ⭐⭐⭐ 模块级容错已实现,但动作迁移线无回退方案

8.2 具体落地问题

问题1: DreamActor 视频轮询耗时太长

  • 现状: 60×10s = 10 分钟轮询,阻塞整条链路
  • 建议: 改为异步任务,提交流程后立即返回 task_id,后台 Dashboard 显示进度

问题2: Animate 模型依赖 ComfyUI

  • 现状: ComfyUI 非本地部署,需额外启动
  • 建议: Phase 2 先用 DreamActor 跑通 MVP,ComfyUI 接入作为 Phase 3 优化项

问题3: 骨架提取 (M4) 精度

  • 现状: OpenPose 需要 GPU,轻量版(MediaPipe Pose)精度有限
  • 建议:
    • 路径A: 用 MediaPipe (免费,精准度70%)
    • 路径B: 用阿里 Animate 内置骨骼提取 (精准度90%,需 ComfyUI)
    • 路径C: 跳过骨架提取,直接用原始视频做帧匹配 (最简单)

问题4: AudioLine 依赖 oMLX + Suno + Mubert

  • 现状: oMLX 需手动启动,Suno/Mubert 需 API key
  • 建议:
    • 无 API key 时模块自动回退到本地方案 (已实现)
    • oMLX 启动自动化加入 launchd 或 Start Server 脚本

问题5: 角色替换的"合理性"问题

  • 现状: 替换角色后,原视频中的人脸/手部动作可能与新角色不匹配
  • 建议:
    • 2D 卡通角色替换比真人替换更容易获得合理结果
    • 真人替换建议用 DreamActor(原生支持面部替换)
    • 首次测试建议用卡通角色 + 卡点场景,不要一步上真人

8.3 是否有更优解?

现有方案 更优解 评估
每条线独立编排器 统一编排器 + 插件模式 更优但重构成本高,建议 Phase 4
DreamActor 轮询 Webhook 回调 更优,但需服务端支持,暂不可行
OpenPose 本地骨架 阿里 Animate 内置骨骼 更优,但需接入 ComfyUI
手动 API Key 配置 环境变量 + .env 文件 更优,建议 Phase 1 顺便完成
stand-alone AudioLine AudioLine as AVE plugin 已在设计范围内

8.4 风险矩阵

风险 概率 影响 缓解措施
API 限频/涨价 中 高 本地回退 + 成本预警
动作迁移质量不达标 中 高 Phase 2 MVP 先用简单场景验证
ComfyUI 部署复杂 高 中 先用 DreamActor,ComfyUI 后接
角色替换效果假 中 中 用卡通角色测试,真人暂缓
AudioLine 依赖未启动 低 中 oMLX 自动启动 + 模块自检告警

9. 具体落地建议

9.1 立即执行 (今天/明天)

# Step 1: AudioLine 接入 AVE 主流程
# 在 video_factory.py 中新增:
#   from audio_line import AudioLine
#   al = AudioLine()
#   
#   # 口播线: 用 AudioLine 情绪分析选BGM
#   emotion = al.emotion_analyzer.analyze(voice_path)
#   bgm_style = emotion_to_bgm(emotion.mood)
#
#   # 卡点线: 用 AudioLine BPM分析 + 分轨对齐
#   beat = al.beat_detector.detect(bgm_path)
#   aligned_stems = al.stem_aligner.align_to_bpm(...)

9.2 本周内

1. 模仿视频线 MVP:
   - 输入: 参考视频 
   - 输出: 提取的结构模板 + 骨架序列
   - 不生成最终视频,只验证分析层
   
2. 角色系统统一:
   - 数字人注册到 CharacterRegistry
   - 口播脚本支持引用角色

9.3 需要注意的坑

  1. 不要一步到位:先跑通 MVP 再迭代优化
  2. 每个原子能力先单测再集成:特别是 M1-M6 动作迁移线
  3. AudioLine 已经写好,但 demo/ 里还没跑的端到端测试:先跑通一个卡点场景的端到端
  4. 模仿视频线的骨架提取不要依赖 GPU:用 MediaPipe 或完全跳过骨架,直接用帧匹配

本方案已包含自审环节 (Section 8),所有建议均有明确的落地路径。 下一步建议: 确认方案方向 → Phase 1 将 AudioLine 接入 AVE → Phase 2 开始模仿视频线 MVP