Files
MediaCrawler/mac-agent-os-main/05_tools/09_ave/PLANS/AVE_V3_ARCHITECTURE.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

15 KiB
Raw Blame History

AVE v3 全链路架构规划书

版本: v3.0-draft | 最后更新: 2026-05-15 基于全域调研(Kling API / HoloCine / BeatSync-Engine / LatentSync / Lights-Camera-Consistency)


一、现状总览

1.1 已实现能力 ✅

模块 功能 依赖
口播策略 文案→TTS→素材搜索→混音→字幕→合成 CosyVoice + Pexels + FFmpeg
卡点策略 BGM→librosa节拍检测→素材→拍点切换→xfade librosa + FFmpeg
数字人策略 图片+音频→Wan2.2 OmniHuman 对口型/M1动作模仿 火山引擎 DreamActor
Kling API 视频生成 文生视频/图生视频 (kling-v3) 百炼 DashScope / Kling JWT
剧本解析 文案→LLM分镜→YAML脚本 LLM (模板/在线)
锚点切换 静音检测驱动画面切换 librosa
BGM 避让 说话时压低BGM / 间隙恢复 字级时间戳驱动
字幕生成 ASS字幕 (字级精确时间戳) CosyVoice 时间戳
长视频分段 >180s 自动分段 + concat FFmpeg

1.2 待增强能力 🔧

模块 现状 目标
变速卡点 仅固定速度 xfade 切换 setpts + atempo 动态速度曲线
Kling LipSync 无集成 对接 fal.ai Kling LipSync API
角色一致性 仅手动 prompt 工程 定妆照→参考图→批量生成的自动化管线
节拍检测 单层 beat_track BeatSync-Engine 6阶段架构 (能量/结构/剪切策略)
素材复用 无缓存系统 索引+缓存+标签体系

1.3 调研中能力 🔍

模块 来源 预计投入
角色叙事策略 HoloCine + Lights-Camera-Consistency 2-3天
本地 Lip-Sync LatentSync v1.5 (字节跳动) 0.5天部署
多场景批量生成 Kling Image O1 多图融合 0.5天
数字资产索引 本地素材库 + 生成历史 1天

二、四策略管线详解

策略 A:口播(主路径,已成熟)

输入: 文案(.txt/.yaml)
流程:
  文案 → [剧本解析] → YAML分镜脚本
  → [TTS: CosyVoice] → 带字级时间戳的人声 WAV
  → [素材搜索: Pexels] → 每段 2 个视频素材
  → [混音] → 人声 + BGM (可选避让)
  → [字幕: ASS] → 字级精确时间戳
  → [合成: FFmpeg] → 1080×1920 竖版视频
输出: final.mp4

可直接执行的命令: python main.py video-factory --strategy 口播 --script script.yaml

增强方向:

  • 🔧 Kling LipSync 后处理: 合成后加一步 LipSync 让口型匹配
  • 🧠 Kling AI 素材替代 Pexels: 图生视频生成更精准的场景素材

策略 B:卡点(已实现,需增强)

输入: BGM + 素材 (提供/Pexels搜索)
流程:
  BGM → [节拍检测: librosa beat_track] → BPM + 拍点列表
  → [分组: N拍/组] → 每组时长 = N × (60/BPM)
  → [素材分配] → 循环取素材, 精确裁剪到组时长
  → [拼接: xfade] → 过渡拼接 (≤8组)
输出: beat_sync.mp4

可直接执行的命令: python main.py video-factory --strategy 卡点 --bgm bgm.wav --search 风景

待增强:

功能 来源 实现方式
变速卡点 (speed ramp) FFmpeg setpts setpts=(1/v)*PTS + atempo=v 滤波器链
能量波切密度 BeatSync-Engine 高能段落更密集剪切, 低能段落保持
歌曲结构检测 BeatSync-Engine Intro→Verse→Chorus→Bridge→Outro 分区
视觉智能选素材 BeatSync-Engine Qwen3-VL 动作/美感/质量评分, 语义标签匹配

策略 C:数字人(已实现,分模式)

输入: 角色头像 + 文案/参考视频
流程 (对口型):
  头像 + 文案 → [TTS: CosyVoice] → 音频
  → [Wan2.2 OmniHuman] → 带口型的数字人视频
输出: /tmp/ave_digital_human.mp4

流程 (动作模仿):
  头像 + 参考视频 → [火山引擎 DreamActor M1] → 动作模仿视频

可直接执行的命令: python main.py video-factory --strategy 数字人 --image photo.jpg --text "文案"

增强方向:

  • 🔧 Kling LipSync: 将 OmniHuman 换成 Kling LipSync (成本可控, 质量更高)
  • 🔧 LatentSync v1.5 本地部署: 零成本, 中文优化
  • 🧠 Wan2.2-S2V-14B: 远期替换, 音频→视频一步到位

策略 D:角色叙事(新策略,调研中)

输入: 定妆照 + 剧本(.yaml) → 多场景故事
流程:
  [定妆照生成] → 角色 sheet / 参考图
  → [场景分解] → 剧本 → N个场景 + 每个场景的 Prompt
  → [批量生成] → Kling 图生视频 (每场景固定seed + 角色描述块)
  → [Temporal Bridge] → 上场景末帧 → 下场景首帧条件
  → [卡点合成] → BGM + 节拍 + 变速过渡
  → [LipSync] → 语音驱动口型
输出: story_final.mp4

这个策略目前不存在,需要从零构建。它吸收外部项目的核心思路:

来源 吸收点 实现方式
HoloCine (CVPR 2026) 全局场景一致性, 稀疏注意力 用 Kling 的固定seed + 参考图模拟
Lights-Camera-Consistency Asset-First, Temporal Bridge, JSON蓝图 设计 AVE 剧本 YAML 扩展格式
Kling 3.0 参考图 单参考图锚定全片 定妆照→参考图→每场景生成
Grid Method 2x3 多视角 Character Sheet 先生成定妆照网格, 再逐一入场景

三、数字资产管理体系

3.1 资产分类

资产类型 来源 存储位置 复用方式
角色定妆照 AI生成/用户提供 assets/characters/ Kling 参考图 / IP-Adapter
角色 LoRA CharForge 训练 assets/lora/ ComfyUI / SD 生态
生成视频片段 Kling API cache/generations/ 剪辑拼接 / 素材库
Pexels 素材 网络搜索 cache/pexels/ 各策略通用
BGM 文件 Pixabay/生成 assets/bgm/ 卡点 / 口播策略
剧本 YAML 用户编写/LLM生成 scripts/ 版本管理 / 批量生产
历史输出 各策略成品 output/ 回放 / 二次剪辑
LipSync 缓存 LatentSync cache/lipsync/ 重复使用

3.2 资产流转图(跨策略复用)

定妆照    ────→ 口播 (片头数字人)
  │
  ├──────→ 数字人 (恒等保持)
  │
  └──────→ 角色叙事 (场景批量生成)
              │
              ├──────→ 卡点 (混剪素材)
              │
              └──────→ 口播 (最终合成)

生成片段  ───→ 口播 (Pexels 素材替代)
  │
  ├──────→ 卡点 (素材复用)
  │
  └──────→ 素材缓存 → 下一次复用

BGM      ─────→ 口播 / 卡点 / 角色叙事 (通用)

3.3 资产索引建议

当前没有素材索引系统。建议新增 scripts/asset_manager/ 模块:

# asset_manager/index.py — 素材索引
class AssetIndex:
    def index_pexels_cache(self, cache_dir): ...
    def index_generations(self, gen_dir): ...
    def search(self, tags: list[str], type: str): ...
    def get_character_ref(self, char_id: str): ...
    def get_lipsync_cache(self, audio_hash: str): ...

四、外部项目集成点矩阵

外部项目 类型 集成方式 优先级 投入
BeatSync-Engine 开源 6阶段架构 → 升级 AVE beat_sync.py P1 0.5天
Kling LipSync (fal.ai) API scripts/composer/lipsync.py 新增 P0 0.5天
LatentSync v1.5 开源 scripts/latentsync/ 本地推理 P2 0.5天
HoloCine 论文 角色叙事策略的核心理论框架 P2 2天
Lights-Camera-Consistency 论文 JSON蓝图+Temporal Bridge 设计模式 P2 1天
CharForge / IC-LoRA 开源 LoRA 训练管线 P3 1天
Grid Method (Midjourney社区) 方法论 定妆照生成 prompt 模板 P0 0.2天
Wan2.2-S2V-14B 开源 远期替换数字人引擎 P3 待定
MoneyPrinterTurbo 开源 参考其全自动化架构设计 P3 0.3天
ComfyUI-vidflows 开源 ComfyUI 内的多镜头叙事参考 P3 0.3天

五、开发路线图(按优先级)

Sprint 1 (P0, ~1天)

序号 任务 产出文件 来源
1 定妆照生成 — 2x3 Grid Method Prompt 模板 + 自动化脚本 scripts/character_sheet.py Grid Method
2 Kling LipSync 集成 — 新增 lipsync.py 模块 + CLI 子命令 scripts/composer/lipsync.py fal.ai
3 角色描述块锁定 — Scene YAML 扩展 character_ref 字段 scripts/director_parser/schemas.py Lights-Camera

Sprint 2 (P1, ~1天)

序号 任务 产出文件 来源
4 变速卡点引擎 — setpts + atempo 动态速度曲线 scripts/composer/speed_ramp.py BeatSync-Engine
5 节拍检测升级 — 能量曲线+歌曲结构+剪切策略 (6阶段) 改写 scripts/composer/beat_sync.py BeatSync-Engine
6 卡点+口播融合管线 — 口播场景中插入变速卡点过渡 scripts/composer/hybrid.py 新设计

Sprint 3 (P2, ~2天)

序号 任务 产出文件 来源
7 角色叙事策略 — 定妆照→场景批量生成→Temporal Bridge scripts/story_director/ HoloCine + LCC
8 本地 LatentSync 部署 — Docker / venv 部署 + AVE 集成 scripts/latentsync/ 字节跳动
9 素材资产管理器 — 索引 + 缓存 + 标签 + 搜索 scripts/asset_manager/ 新设计

Sprint 4 (P3, 可选)

序号 任务 来源
10 LoRA 训练管线 (CharForge) CharForge
11 Wan2.2-S2V-14B 本地部署 Wan-AI
12 ComfyUI 工作流导出支持 ComfyUI-vidflows

六、关键决策记录

6.1 Kling LipSync vs. 本地 LatentSync

维度 Kling LipSync (fal.ai) LatentSync v1.5 (本地)
成本 $0.014/5s (¥0.10/镜头) 免费
质量 ⭐⭐⭐⭐ 商业级 ⭐⭐⭐⭐⭐ 中文优化
部署 零部署 (API调用) 需 8GB VRAM + Docker
延迟 ~12分钟/次 数秒数十秒
适合 短期快速集成 中期大批量场景

结论:先上 Kling LipSync(P0,半天完成集成),LatentSync 作为 P2 储备。

6.2 角色叙事 vs. 增强现有策略

不新建策略,而是在现有策略上叠加 3 个增强层:

  1. 定妆照层 — 所有策略共享(P0)
  2. 角色锁定层 — 场景 YAML 加 character_ref 字段(P0)
  3. LipSync 层 — 合成后后处理(P0)

角色叙事策略本质上是"口播 + 定妆照 + 批量场景 + 卡点的融合产物",不是独立的全新管线。

6.3 素材策略:Pexels vs. Kling AI vs. 即梦VIP

策略 成本 质量匹配度 可用性
Pexels (当前) 免费 (需API Key) ⭐⭐ (通用素材, 不精确) ✅ 稳定
Kling AI 图生视频 ¥1/5s ⭐⭐⭐⭐ (精准匹配) ✅ AVE已集成
即梦VIP (网页版) ¥0.22-0.37/段 ⭐⭐⭐⭐⭐ 🚧 需Peekaboo
即梦API ¥1-3/段 ⭐⭐⭐⭐⭐ 🚧 高级会员

结论:维持 Pexels 为默认素材源(免费),Kling AI 素材为按需增强(高精度场景),即梦为长期优化方向。


七、自纠偏:架构辩论

辩论 1:要不要做统一的"剧本→多场景→角色叙事"管线?

正方:这是用户需要的最终形态——输入一个故事,输出一个完整的角色化视频 反方:这会是一个很重的投入(2-3天),且依赖多个未成熟的外部模型 裁决:先不做统一管线。改为在现有 3 个策略上加"角色一致性增强层"和"LipSync 层",角色叙事是"口播+定妆照+卡点"的组合产物。等 P0/P1 完成后,自然就知道统一的管线应该长什么样。

辩论 2:Kling LipSync API 还是本地模型?

正方:API 零部署、零维护、商业级质量、价格合理 反方:12分钟推理时间太长、依赖服务商、文本模式仅120字 裁决:API 先上(P0),本地模型作为中期增强(P2)。API 的 12 分钟可以通过并行提交缓冲。

辩论 3:变速卡点值不值得单独做一个模块?

正方:这是用户明确提到的核心需求,也是和竞品差异化的关键 反方:FFmpeg setpts/atempo 实现简单,不需要单独模块 裁决:值。但不是单独做"speed_ramp.py",而是把变速作为 beat_sync 管线的一个可选滤波器链。BeatSync-Engine 的能量波切密度策略才是真正的核心创新——变速只是具体实现手段。


八、项目文件结构建议

scripts/
├── main.py                           # CLI 入口
├── video_factory.py                  # 工厂路由 (已有, 扩展)
├── character_sheet.py                # 🆕 定妆照生成 (Grid Method)
├── asset_manager/                    # 🆕 资产管理
│   ├── index.py                      #    素材索引
│   ├── cache.py                      #    缓存管理
│   └── tags.py                       #    标签系统
├── composer/
│   ├── beat_sync.py                  # 🔧 节拍检测升级 (6阶段)
│   ├── speed_ramp.py                 # 🆕 变速滤波器链
│   ├── lipsync.py                    # 🆕 Kling LipSync 集成
│   ├── ffmpeg.py                     # (已有)
│   └── hybrid.py                     # 🆕 口播+卡点融合
├── story_director/                   # 🆕 角色叙事 (P2)
│   ├── scene_planner.py              #    场景分解
│   ├── temporal_bridge.py            #    Temporal Bridge
│   └── batch_generator.py            #    批量 Kling 生成
├── director_parser/
│   ├── parser.py                     # 🔧 扩展 character_ref
│   └── schemas.py                    # 🔧 YAML schema 扩展
├── material_producer/
│   ├── kling/kling.py                # 🔧 增加 seed 参数
│   └── pexels/search.py              # (已有)
├── voice_synthesizer/                # (已有)
└── lib/
    └── config.py                     # (已有)

九、下一步行动

立即做 (P0):

  1. 定妆照 Grid Method Prompt 模板
  2. Kling LipSync 集成 (lipsync.py + CLI)
  3. YAML Schema 扩展 (character_ref 字段)

明天做 (P1): 4. 变速卡点引擎 5. 节拍检测升级

本周做 (P2): 6. 角色叙事管线初版 7. 素材资产管理器