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

8.9 KiB
Raw Blame History

AVE v2.0 架构重构方案

版本: v2.0 (草案) 创建: 2026-05-15 核心理念: 结果推导 — 从目标视频反推创作链路 知识基础: AI视频提示词系统教科书(19章)+ 全网调研


一、核心差距分析

当前 AVE v1.x 的问题

维度 现状 目标
输入 仅支持 YAML 或 纯文本 支持小说/故事/RSS/链接等多种输入
分镜 直接 LLM 解析,无结构化分镜 四步工作流:场景拆分→镜头分配→风格定调→prompt生成
风格控制 无 统一的风格锚点 + 角色一致性
素材来源 Pexels(单一) Kling API / 百炼 / 即梦网页版 / Pexels / 数字人 多引擎
提示词 简单关键词搜索 五要素结构化提示词 + 正向/负向 + 权重控制
输出 1080p mp4 仅口播类型 支持宣传片/故事片/TVC/漫剧等多类型

二、五层架构设计

┌─────────────────────────────────────────────────────────┐
│ Layer 1: 输入层  (文案/小说/RSS/链接 → 结构化内容)      │
├─────────────────────────────────────────────────────────┤
│ Layer 2: 分镜引擎 (LLM拆分场景→分配镜头→风格定调→生prompt) │
├─────────────────────────────────────────────────────────┤
│ Layer 3: 素材生产 (Kling/百炼/即梦/Pexels/数字人 多引擎)  │
├─────────────────────────────────────────────────────────┤
│ Layer 4: 合成引擎 (TTS + KenBurns + BGM + 字幕 → mp4)  │
├─────────────────────────────────────────────────────────┤
│ Layer 5: 输出层  (1080x1920.mp4 → 抖音/快手/视频号)      │
└─────────────────────────────────────────────────────────┘

Layer 1: 输入层

输入类型:
├─ YAML脚本    → 直接解析(当前已有)
├─ 纯文本文案   → LLM结构化(当前已有)
├─ 小说/故事   → 四步工作流:规范→分镜→场景表→完整脚本
├─ 网页链接/RSS → web_crawler采集 → 同上流程
└─ 已有视频     → 逆向解构(video-to-prompt)

Layer 2: 分镜引擎(新增/重写)

替换当前的 director_parser,核心能力:

① LLM场景拆分
   输入: 文案/故事
   输出: 场景列表 (每个场景有时间/地点/氛围)

② 镜头分配
   - 景别: 远景/全景/中景/特写/过肩
   - 运镜: 推/拉/摇/移/跟/升降/环绕
   - 时长: 3-15秒

③ 风格定调
   - 风格锚点: "超写实电影感" / "水墨国风" / "扁平化3D"
   - 色彩方案: 暖调/冷调/高饱和/低饱和
   - 光照方案: 晨光/逆光/霓虹/戏剧光

④ Prompt生成(五要素)
   = [风格] + [主体] + [环境] + [镜头运动] + [光线质感]
   + 负向词 + 权重控制

Layer 3: 素材生产层(多引擎)

素材引擎路由:
├─ bailian_kling (主力)  → ¥0.5-1/段, 45s, 已跑通
├─ kling_official        → ¥1/段, 5min, 100积分
├─ jimeng_web (Peekaboo) → ¥0.3/段, 排队, 自动化中
├─ pexels_free           → ¥0/段, 静态, 兜底
├─ wan2.2_digital_human  → 数字人口播
└─ buddy_cloud           → ¥1.8/段, 备用

Layer 4: 合成引擎

人声合成: CosyVoice TTS + 字级时间戳
素材处理: Ken Burns (5种随机运镜)
背景音乐: 和弦垫音 / mlx-audiocraft / 即梦BGM
音量避让: duck_bgm (基于字级时间戳)
字幕: ASS 精确字幕

Layer 5: 输出层

参数: 1080x1920, 30fps, h264, 8Mbps
格式: mp4
分发: 抖音 / 快手 / 视频号

三、提示词引擎设计(核心升级)

3.1 YAML 脚本格式升级

meta:
  project_id: "daoist_002"
  style: "knowledge_lecture"
  global_style_anchor: "水墨国风,工笔山水画质感"  # 新增:全局风格
  global_negative: "畸形、扭曲、面瘫、比例失调"     # 新增:全局负向词
  fps: 24                                          # 新增:帧率
  voice:
    provider: aliyun
    emotion: 专业沉稳
  bgm:
    mood: calm
  output:
    resolution: 1080x1920
    fps: 24

segments:
- id: 1
  text: "上善若水,水善利万物而不争。——《道德经》"
  duration_sec: 10
  # 新增:镜头语言
  camera: "镜头缓慢俯拍,从高空逐渐推进"
  shot_type: "全景"     # 远景/全景/中景/特写
  # 新增:分镜描述(替代旧的 material.search)
  material:
    provider: bailian   # 引擎选择
    prompt_subject: "清澈溪水流过圆石,水滴晶莹"
    prompt_environment: "云雾缭绕的深山幽谷"
    prompt_lighting: "晨雾中的柔光"
  subtitles: true

3.2 Prompt 组装逻辑

def build_prompt(seg, global_style):
    """五要素+ 权重 + 负向词 组装"""
    prompt = (
        f"({global_style}:1.3), "
        f"({seg['prompt_subject']}:1.5), "
        f"({seg['prompt_environment']}:1.2), "
        f"({seg['camera']}:1.1), "
        f"({seg['prompt_lighting']}:1.0)"
    )
    negative = f"({global_negative}:1.5)"
    return prompt, negative

3.3 四步分镜工作流

输入: "今天我要讲一个关于水的故事。上善若水..."

Step 1: LLM规范整理
  → [场景描述]深山溪谷 [人物动作]无 [对话]旁白

Step 2: 镜头规划
  → 需要 8 个镜头,分布: 全景(2) → 中景(3) → 特写(2) → 全景(1)

Step 3: 场景与角色表
  → 场景1: 深山溪谷,清晨,薄雾
  → 场景2: 水库大坝,午后,阳光强烈

Step 4: 生成完整分镜脚本
  → 镜号 | 景别 | 画面描述 | 旁白 | 场景 | 提示词

四、多内容类型支持

4.1 口播知识类(当前)

  • 文案 → TTS → AI素材 → 合成
  • 适用:道家金句、知识分享、观点输出

4.2 故事叙事类(新增)

  • 小说/故事 → 四步分镜 → AI素材 → 合成
  • 适用:民间故事、寓言、历史小故事

4.3 漫剧动画类(新增)

  • 剧本 → 分镜 → 文生图(角色一致) → 图生视频 → 配音
  • 适用:短剧、条漫转视频、AI漫剧
  • 工具:Kling图生视频 + CosyVoice配音

4.4 宣传片类(新增)

  • 产品介绍 → 分镜 → 风格化素材 → 合成
  • 适用:品牌宣传、产品展示

五、实施路线图

阶段 内容 工作量 优先级
P0 本周 分镜引擎: YAML升级 + prompt五要素组装 1天 🔴
P0 本周 接入百炼Kling API替换Pexels 0.5天 🔴
P1 下周 四步分镜工作流(LLM驱动) + 场景/角色表 2天 🟡
P1 下周 即梦网页版Peekaboo自动化收尾 1天 🟡
P2 本月 故事输入 + 漫剧管线 3天 🟢
P2 本月 风格库 + 模板库建设 2天 🟢
P3 储备 宣传片类型 + 批量生产流水线 3天 🔵

六、知识体系关联

AVE模块 关联教科书章节 知识点
director_parser ch14 脚本转提示词 四步工作流
material_producer ch12 模型对比, ch13 工具工作流 Kling/即梦/百炼接入
composer ch3 参数(ch4 分镜运镜), ch5 光影色彩 帧率/景别/光线设计
bgm_generator ch6 音频设计 音景/情绪音乐
animate ch7 微表情 动作拆解/表情控制
strategy planner ch1 核心逻辑, ch2 结果驱动 逆向推导方法论
style library ch8-11 多领域应用 电影/动漫/TVC/科幻风格

七、AVE 当前状态 vs 目标

当前 AVE:
  输入 → 解析 → Pexels → TTS → 合成 → mp4
  │        │       │       │      │
  │ 仅YAML  │ 无分镜 单一素材 │ CosyVoice 无BGM
  
目标 AVE v2.0:
  输入 → 分镜引擎 → 多引擎素材 → TTS→BGM→合成 → mp4
  │        │          │            │
  │ 多类型  │ 四步分镜  │ Kling/即梦  │ 风格统一
  │ 统一入口 │ 五要素prompt │ /Pexels/数字人 │ 全链路控制

核心理念总结:

  1. 结果推导 — 先想清楚最终画面,再反向拆解指令
  2. 分镜先行 — 不做文字到视频的直接跳转,先做好分镜
  3. 风格统一 — 全局风格锚点锁死一致性
  4. 多引擎 — 根据成本/速度/质量动态选择素材来源
  5. 持续迭代 — 每次只改5%进行AB测试