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 带网关原话 / 正常返回)。
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
# AVE BGM 素材库 v1.0
|
||||
|
||||
> 版本: 1.0 | 更新: 2026-05-13
|
||||
> 用途: 人工选曲参考 + AI 生成参考 (mlx-audiocraft prompt 模板)
|
||||
> 路径索引: 按情绪/场景/节奏三级分类
|
||||
|
||||
---
|
||||
|
||||
## 一、分类体系
|
||||
|
||||
### 按情绪 (Mood)
|
||||
|
||||
| 情绪 | 标签 | BPM 范围 | 适用场景 |
|
||||
|:-----|:-----|:--------:|:---------|
|
||||
| 激昂 | epic, triumphant, powerful | 100-130 | 科技突破、企业里程碑、颁奖 |
|
||||
| 大气 | cinematic, majestic, grand | 70-90 | 新闻联播、国家成就、纪录片 |
|
||||
| 紧张 | suspenseful, intense, urgent | 120-150 | 科技竞争、局势分析、倒计时 |
|
||||
| 温馨 | warm, gentle, cozy | 60-80 | 励志金句、生活记录、情感故事 |
|
||||
| 励志 | inspiring, uplifting, motivational | 80-110 | 金句合集、个人成长、正能量 |
|
||||
| 轻松 | happy, cheerful, light | 90-120 | Vlog、日常分享、旅游记录 |
|
||||
| 科技感 | futuristic, electronic, tech | 110-130 | 芯片、AI、数码产品、演示 |
|
||||
| 悬疑 | mysterious, dark, ambient | 50-70 | 深度分析、悬疑故事、揭秘 |
|
||||
| 悲伤 | sad, emotional, melancholic | 55-75 | 感人故事、离别、怀旧 |
|
||||
|
||||
### 按场景 (Scene)
|
||||
|
||||
| 场景 | 首选情绪 | 备选 | 典型时长 |
|
||||
|:-----|:--------:|:----:|:--------:|
|
||||
| 科技新闻/芯片突破 | 激昂 | 科技感、紧张 | 15-45s |
|
||||
| 励志金句/正能量 | 励志 | 温馨、轻松 | 30-60s |
|
||||
| 品牌宣传/企业视频 | 大气 | 激昂、科技感 | 30-90s |
|
||||
| 故事讲述/叙事 | 温馨 | 悬疑、悲伤 | 60-180s |
|
||||
| 卡点视频/节奏混剪 | 激昂 | 轻松、励志 | 15-30s |
|
||||
| 片头/片尾 | 大气 | 激昂、励志 | 3-8s |
|
||||
| 科普/知识分享 | 轻松 | 温馨、科技感 | 30-120s |
|
||||
|
||||
---
|
||||
|
||||
## 二、推荐曲库
|
||||
|
||||
### 🏆 激昂 · Epic (科技新闻/芯片突破)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Heroes Today** | 120 | 2:30 | CC0 | YouTube Audio Library | `epic orchestral, brass and strings, powerful drums, triumphant, building tension, 120 BPM, no vocals` |
|
||||
| **The Rising** | 115 | 3:00 | CC0 | Free Music Archive | `cinematic orchestral, rising strings, heroic brass, driving percussion, 115 BPM, no vocals` |
|
||||
| **Epic Cinematic** | 110 | 2:45 | CC0 | Pixabay Music | `epic cinematic, orchestral hits, powerful crescendo, 110 BPM, no vocals` |
|
||||
| **Beyond the Stars** | 105 | 3:30 | CC0 | YouTube Audio Library | `uplifting cinematic, building strings, triumphant brass, space ambient, 105 BPM, no vocals` |
|
||||
|
||||
### 🏆 大气 · Cinematic (品牌/新闻/纪录片)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Inspire** | 85 | 3:15 | CC0 | YouTube Audio Library | `cinematic ambient, gradual build, orchestral swells, inspiring, 85 BPM, no vocals` |
|
||||
| **Echoes of Truth** | 75 | 4:00 | CC0 | Free Music Archive | `cinematic ambient, serious tone, orchestra and choir, majestic, 75 BPM, no vocals` |
|
||||
| **Last Dawn** | 80 | 2:50 | CC0 | Pixabay Music | `cinematic slow build, atmospheric pads, emotional strings, 80 BPM, no vocals` |
|
||||
| **Documentary Background** | 90 | 3:00 | CC0 | Pixabay Music | `documentary style, soft piano, ambient strings, professional, 90 BPM, no vocals` |
|
||||
|
||||
### 🏆 励志 · Inspiring (金句/正能量/成长)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Uplifting Piano** | 95 | 2:30 | CC0 | Pixabay Music | `uplifting piano, soft strings, warm and emotional, inspirational, 95 BPM, no vocals` |
|
||||
| **Never Give Up** | 100 | 3:00 | CC0 | YouTube Audio Library | `motivational rock, driving beat, uplifting melody, 100 BPM, no vocals` |
|
||||
| **Warm Hope** | 85 | 2:40 | CC0 | Pixabay Music | `warm acoustic guitar, soft piano, hopeful, gentle rise, 85 BPM, no vocals` |
|
||||
| **Morning Motivation** | 105 | 2:20 | CC0 | YouTube Audio Library | `upbeat motivational, light percussion, cheerful piano, 105 BPM, no vocals` |
|
||||
|
||||
### 🏆 科技感 · Tech (数码/AI/产品演示)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Digital Horizon** | 120 | 3:00 | CC0 | Pixabay Music | `electronic futuristic, synth pads, glitch beats, tech, 120 BPM, no vocals` |
|
||||
| **Neon Lights** | 125 | 2:30 | CC0 | YouTube Audio Library | `electronic ambient, pulsing synth, modern tech feel, 125 BPM, no vocals` |
|
||||
| **Innovation** | 110 | 2:45 | CC0 | Free Music Archive | `corporate tech, clean synth, modern electronic, professional, 110 BPM, no vocals` |
|
||||
|
||||
### 🏆 温馨/轻松 · Warm (生活/Vlog/故事)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Gentle Breeze** | 70 | 3:00 | CC0 | Pixabay Music | `soft ambient, gentle piano, nature sounds, relaxing, 70 BPM, no vocals` |
|
||||
| **Sunny Day** | 95 | 2:15 | CC0 | YouTube Audio Library | `happy ukulele, cheerful melody, light percussion, 95 BPM, no vocals` |
|
||||
| **Cozy Morning** | 80 | 2:30 | CC0 | Pixabay Music | `warm acoustic, soft guitar, cozy atmosphere, 80 BPM, no vocals` |
|
||||
|
||||
---
|
||||
|
||||
## 三、AI 生成参考 (mlx-audiocraft Prompt 模板)
|
||||
|
||||
以下 prompt 与上述曲库风格对应, 可用于 `--use-mlx` 模式生成类似风格的 BGM:
|
||||
|
||||
```bash
|
||||
# 激昂 (对标 Heroes Today)
|
||||
python main.py bgm --mood epic --duration 60 --use-mlx
|
||||
# → prompt: epic orchestral, brass and strings, powerful drums, 120 BPM
|
||||
|
||||
# 大气 (对标 Inspire)
|
||||
python main.py bgm --mood inspiring --duration 60 --use-mlx
|
||||
# → prompt: uplifting cinematic, building strings, triumphant, 85 BPM
|
||||
|
||||
# 励志
|
||||
python main.py bgm --mood happy --duration 60 --use-mlx
|
||||
# → prompt: bright ukulele, cheerful melody, acoustic guitar, 90 BPM
|
||||
|
||||
# 科技感 (使用 custom prompt)
|
||||
HF_ENDPOINT=https://hf-mirror.com python main.py bgm --mood normal --duration 60 --use-mlx
|
||||
# → 用自定义 prompt 覆盖: electronic futuristic, synth pads, 120 BPM
|
||||
```
|
||||
|
||||
### Prompt 优化技巧
|
||||
|
||||
| 效果 | 关键词 |
|
||||
|:-----|:-------|
|
||||
| 更激昂 | `epic, triumphant, powerful crescendo, building tension` |
|
||||
| 更柔和 | `soft, gentle, warm, relaxing, smooth` |
|
||||
| 更快节奏 | `driving beat, fast tempo, energetic` |
|
||||
| 更有电影感 | `cinematic, orchestral, dramatic swells` |
|
||||
| 更科技感 | `electronic, synth, futuristic, digital` |
|
||||
| 更真实乐器 | `acoustic, piano, strings, live instruments` |
|
||||
| 不要打击乐 | `no percussion, no drums` |
|
||||
| 纯背景 | `ambient, background, subtle, pad` |
|
||||
|
||||
---
|
||||
|
||||
## 四、版权合规指南
|
||||
|
||||
| 来源 | 商用 | 需署名 | 费用 | 安全等级 |
|
||||
|:-----|:----:|:------:|:----:|:--------:|
|
||||
| **Pixabay Music** | ✅ 可 | ❌ 不强制 | 免费 | 🟢 安全 |
|
||||
| **YouTube Audio Library** | ✅ 可 | ⚠️ 部分需 | 免费 | 🟢 大部分安全 |
|
||||
| **Free Music Archive (CC0)** | ✅ 可 | ❌ 不强制 | 免费 | 🟢 安全 |
|
||||
| **Free Music Archive (CC BY)** | ✅ 可 | ⚠️ **必须** | 免费 | 🟡 需标注 |
|
||||
| **爱给网** | ✅ 可 | ❌ | ¥19-99/首 | 🟢 付费安全 |
|
||||
| **曲多多** | ✅ 可 | ❌ | ¥10-30/首 | 🟢 付费安全 |
|
||||
| **耳聆网** | ⚠️ 视具体 | ⚠️ 视具体 | 免费/付费 | 🟡 需逐首确认 |
|
||||
| **mlx-audiocraft AI 生成** | ⚠️ 见下 | ❌ | 免费 | 🟡 需确认 |
|
||||
|
||||
### mlx-audiocraft 商用说明
|
||||
- 模型权重: CC-BY-NC 4.0 (Meta 许可, 非商业)
|
||||
- 生成结果: 法律灰色地带, 建议非商用途
|
||||
- 替代: 如果用 Suno API 付费生成则无此顾虑
|
||||
|
||||
---
|
||||
|
||||
## 五、使用方式
|
||||
|
||||
### 人工选曲
|
||||
```bash
|
||||
# 查看此文档 → 按情绪/场景定位 → 按链接下载 → 放入对应目录
|
||||
python bgm_generator/bgm_download.py list
|
||||
```
|
||||
|
||||
### AI 生成 (替代选曲)
|
||||
```bash
|
||||
# 直接生成对应情绪的 BGM (如激昂类型)
|
||||
HF_ENDPOINT=https://hf-mirror.com python main.py bgm --mood epic --duration 60 --use-mlx
|
||||
|
||||
# 效果不满意可以加自定义 prompt
|
||||
python -c "
|
||||
from bgm_generator.suno import generate_bgm
|
||||
generate_bgm(
|
||||
mood='custom',
|
||||
duration=60,
|
||||
output='/tmp/custom_bgm.wav',
|
||||
use_mlx=True,
|
||||
)
|
||||
# 内部会使用自定义 mood 的 prompt
|
||||
"
|
||||
```
|
||||
|
||||
### 与视频工厂集成
|
||||
```bash
|
||||
# 口播 + BGM (选 AI 生成或已有曲目)
|
||||
python main.py video-factory --strategy 口播 --script script.yaml --bgm /path/to/bgm.wav --duck
|
||||
|
||||
# 卡点 + BGM (自动节拍检测)
|
||||
python main.py video-factory --strategy 卡点 --bgm /path/to/bgm.wav --search "nature"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、扩展曲库
|
||||
|
||||
如需扩充曲库, 推荐以下免费渠道:
|
||||
|
||||
| 渠道 | 数量 | 质量 | 获取方式 |
|
||||
|:-----|:----:|:----:|:---------|
|
||||
| **Pixabay Music** | 5万+ | ⭐⭐⭐⭐ | `search --mood happy` 打开浏览器下载 |
|
||||
| **YouTube Audio Library** | 2万+ | ⭐⭐⭐⭐⭐ | 需科学上网 |
|
||||
| **Free Music Archive** | 10万+ | ⭐⭐⭐⭐ | 需筛选 CC0 标签 |
|
||||
| **耳聆网** | 3万+ | ⭐⭐⭐ | 含音效+音乐 |
|
||||
| **爱给网** | 5万+ | ⭐⭐⭐⭐ | 付费商用 ¥19起 |
|
||||
|
||||
```bash
|
||||
# 快速添加新曲目:
|
||||
# 1. 下载 MP3 到 bgm_library/{mood}/ 目录
|
||||
# 2. 运行 scan 入库
|
||||
python bgm_generator/bgm_download.py scan
|
||||
```
|
||||
Reference in New Issue
Block a user