douyin-video-readlisted
Install: claude install-skill 52Siriyue/douyin-video-read
# 读取抖音视频内容
两级能力,按需选择:
| 级别 | 能拿到 | 耗时 | 用什么 |
| --- | --- | --- | --- |
| **L1 摘要** | 标题、作者、发布时间、互动数据、**抖音官方 AI 章节要点**(带时间戳的逐章摘要)、评论、推荐流 | 约 30-60 秒 | `scripts/read_douyin.py` |
| **L2 视频** | 画面关键帧 + **逐句口播讲稿**(来自画面硬字幕 OCR,带时间戳) | 约 3-5 分钟 | `scripts/capture_frames.py` + `scripts/ocr_subtitles.py` |
| **L2 图文** | 图文作品(`/note/`)的**轮播图片**(去重、按序命名)+ 标题/作者/互动数 | 约 1 分钟 | `scripts/capture_note_images.py` |
## ⚠️ 第一步永远是:判断视频还是图文
**分享文本里写着「图文作品」四个字 = 图文**;链接跳转后 `/note/{id}` = 图文,`/video/{id}` = 视频。
两者的内容位置完全不同,**搞错了会读到别人的内容(见下方"已知的坑")**:
| | 视频(`/video/`) | 图文(`/note/`) |
| --- | --- | --- |
| 内容在哪 | 画面字幕 + 口播音频 | **轮播图片里** |
| `body.innerText` | 含官方 AI 章节要点 | **基本只有页脚**,拿不到正文 |
| 官方 AI 章节要点 | ✅ 有 | ❌ 没有(该功能只对视频提供) |
| 怎么做 | `capture_frames.py` | `capture_note_images.py` → 再由视觉能力读图 |
| 兜底信息 | — | `<meta name="description">` 里有标题 + 作者 + 发布时间 + 点赞数 |
**先用 L1**。用户只是问"这视频讲了什么",L1 的官方章节要点就够,没必要跑 L2。
只有需要逐句原文、要引用具体表述、或视频没有 AI 章节要点时,才上 L2。
**图文作品必须走 L2** —— 它的正文在图片里,L1 拿不到任何正文。
## 核心原理
**L1**:抖音视频页渲染后,`document.body.innerText` 里含抖音**官方 AI 生成的分章要点**。直接读文本,不解析 DOM 选择器(类名被混淆且频繁变更)。
**L2**:不下载视频文件,而是让真实浏览器播放视频,再用 `canvas.drawImage(video)` 在任意时间点取帧 —— 可以精确按时间轴采样,且完全避开预加载污染。这类知识讲解视频通常是**双层文字**:顶部章节标题条 + 底部口播字幕,裁切时两块都要。
## 环境准备
```bash
pip install playwright requests Pillow
python -m playwright install chromium # 可跳过:会优先复用系统已装的 Edge / Chrome
```
OCR 后端三选一(脚本 `auto` 会按 winrt → tesseract → none 自动挑):
```bash
# A. Windows 内置 OCR(推荐:离线、免费、中文好)
pip install winrt-runtime winrt-Windows.M