# 视频/音频取数与多模态喂入 · 实测

> 实测日期 2026-06-16，在阿里云海外开发机（新加坡，出口 47.245.103.121）上，对 `crawler.aiddit.com` 各平台 detail 接口 + 真实下载 + Gemini（经 OpenRouter）逐一实测。结论以本文为准；样例 id 见各小节，原始抓包在 `captures/`。

## 1. 平台可取数据矩阵（实测）

| 平台 | 图文（图片+文字） | 视频文件 | 音频（口播） | 取数难度 |
|---|---|---|---|---|
| 小红书 | ✅ 图片可下载 | ❌ 详情不给视频直链（视频帖也只给封面图） | — | 最简单 |
| 抖音 | ✅ | ✅ 干净 mp4，多码率 540/720/1080 | ✅ 含在 mp4 | 简单 |
| 快手 | （图文未单测） | ✅ 干净 mp4 | ✅ 含在 mp4 | 简单 |
| B站 | （仅封面图） | ✅ 但 DASH 分轨 m4s | ✅ 但在 `voice_data` 单独音轨 | 较麻烦（需合并） |

实测证据：
- 小红书视频帖 `6976f6fd000000001a01eede`：`content_type=video` 但 `video_url_list=null`，只有 `image_url_list`（封面）。图文帖 `67e4bdf50000000006028a59`：5 张图，图片下载 200 image/jpeg。
- 抖音 `7612631899479648866`：`video_url_list[0].video_url` + `multi_bitrate{540p,720p,1080p}`；540p 下载 206 `video/mp4`（13.5MB / 1.2s）。
- B站 `BV1qd4y1x76w`：视频轨 m4s + 音频轨在 `voice_data.play_url`；合并后 ffmpeg 验流含 `Video h264 (avc1)` + `Audio aac (HE-AAC) 44100Hz stereo`。
- 快手 `3xepqgwddgbickc`：`video_url_list` 一条，206 `video/mp4`。

## 2. 下载方法（实测可用）

### 图片：不用下载
把图片 URL 直接作为 `image_url` 给 Gemini，模型自己抓取（各平台图片/封面同此）。

### 抖音 / 快手 视频：干净 mp4
1. detail → `video_url_list[0].video_url`（抖音可把 `ratio=default` 改 `ratio=540p` 控体积）。
2. GET 该 URL，必带：
   - `User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15`（iOS UA）
   - `Referer: https://www.douyin.com/`（快手用 `https://www.kuaishou.com/`）
   - 跟随重定向（302 → CDN）
3. 得到完整 mp4（音视频一体）。新加坡云端直连 CDN `douyinvod.com` 可达。

### B站 视频：DASH 分轨，必须合并
1. detail →
   - 视频轨：`video_url_list[0].video_url`（`..._nb3-1-30016.m4s`，**30016=视频 AVC**）
   - 音频轨：**`voice_data.play_url`**（`..._nb3-1-30216.m4s`，**30216=音频 AAC**）——不在 video_url_list，藏在 `voice_data` 字段（dict，含 id_str/duration/play_url）。
2. 下两轨，**用 curl 且不跟随重定向**：
   ```bash
   curl -s --connect-timeout 15 -A 'Mozilla/5.0' -e 'https://www.bilibili.com/' -o v.m4s "<video_url>"
   curl -s --connect-timeout 15 -A 'Mozilla/5.0' -e 'https://www.bilibili.com/' -o a.m4s "<voice_data.play_url>"
   ```
   ⚠️ **坑**：B站 m4s 的 `*.mcdn.bilivideo.cn` 节点，用 httpx `follow_redirects=True` 会被带到 P2P 死节点、连接超时（实测两次都卡死）；curl 不跟随重定向直接 206 秒下。视频轨主 host 是 `upos-sz-mirrorcos.bilivideo.com`（稳）。
3. 合并：`ffmpeg -i v.m4s -i a.m4s -c copy out.mp4` → 含视频+音频的 mp4。

## 3. 喂给 Gemini 的方式（实测，经 OpenRouter）

通道：`OPENROUTER_API_KEY`（**无直连 GEMINI key**，`.env` 里 GEMINI_API_KEY 为空）；`POST {OPENROUTER_BASE_URL}/chat/completions`；model `google/gemini-3-flash-preview`。

- **图片**：`{"type":"image_url","image_url":{"url": <图片URL>}}` —— 传 URL，模型抓取。✅
- **视频**：**必须 base64 data URL** —— `{"type":"video_url","video_url":{"url":"data:video/mp4;base64,<...>"}}`。
  - ⚠️ 实测：把**远程视频 URL 直接**当 video_url（不 base64）→ 返回 HTTP 200 但**无有效结果**（无 choices/usage），等于没处理。OpenRouter 对 Gemini 只接受 **YouTube 远程链接**，其余一律要 base64。
- provider 实际落 **Google AI Studio**，按 `video_tokens` 计费（约 25.6k tokens / 4分钟 540p / ≈$0.0157）。

## 4. 接入建议（优先级）
1. **抖音、快手**：mp4 干净、音视频一体，原生视频提炼直接可用 → 优先接。
2. **小红书**：走图文（图片 URL 给 Gemini）；视频帖够不着，放弃。
3. **B站**：可做，但要「取 `voice_data` 音轨 + ffmpeg 合并 + 下载不跟随重定向」三处特殊处理 → 建议排在抖音/快手之后。

> 另：新加坡开发机网络——下载抖音/快手/B站 CDN、调 OpenRouter/Gemini、连 RDS、调 crawler 均通；唯一不通的是内网 GitLab（仅构建期用）。运行期"下载→提炼→落库"可全在云端一条龙。
