# course-toolkit — YouTube 课程「下载 + 转写 + 成册」工具包 把某个 YouTube 课程/播放列表,批量变成 **本地视频 + 英文文稿 + 中文导读 Markdown**。 ## 组成 | 文件 | 作用 | |---|---| | `fetch_course.sh` | 主入口:枚举播放列表 → 并行下载+转写 → 清洗文稿 | | `worker.sh` | 单个视频的下载/抽音频/转写(被主脚本并行调用) | | `course_util.py` | 子命令:`manifest` / `clean` / `transcribe` / `build` | ## 快速开始 ```bash # 1) 下载 + 转写(默认英文,4 路并行) ./fetch_course.sh "https://www.youtube.com/playlist?list=XXXX" ~/course/我的课程 # 中文课程: MODEL=small LANG=zh ./fetch_course.sh # 2) 生成中文导读:在 /guides/ 下放 01.txt 02.txt ...(可直接让 AI 读 clean/NN.txt 生成) # 然后组装成册: python3 course_util.py build ~/course/我的课程 ``` 产物结构: ``` / ├── manifest.txt # NN|id|slug|title ├── videos/NN-slug.mp4 # 本地视频(默认 360p) ├── transcripts/ # 带时间轴文稿 ├── clean/NN.txt # 去时间轴文稿(供检索/摘要) ├── guides/NN.txt # 中文导读(可选,人工/AI 写) ├── NN-slug.md # 成册笔记(导读 + 全文) ├── README.md # 目录索引 └── build.log # 运行日志 ``` ## 环境变量 | 变量 | 默认 | 说明 | |---|---|---| | `PROXY` | `socks5://192.168.27.96:1080` | 访问 YouTube 的代理 | | `MODEL` | `base.en` | faster-whisper 模型(英文 base.en/small.en;中文 small)| | `LANG` | `en` | 转写语言 | | `JOBS` | `4` | 并行数 | | `FMT` | `18` | yt-dlp 格式(见下)| 依赖:`yt-dlp`、`ffmpeg`、`faster-whisper` + `python3`。 ## 关键经验(踩过的坑) 1. **画质问题**:YouTube 未登录下载被限,实测只有 `--extractor-args "youtube:player_client=android"` 能下 → **上限 360p**(格式 18,渐进式、含音轨)。`android_vr`/`tv_embedded` 会列出 1080p 但下载 **403**;要高清需 PO token / 登录 cookie。 2. **官方字幕不稳**:常遇 **429 限流**或该视频**根本没有字幕** → 故用**本地 ASR**替代。 3. **模型下载**:走 `hf-mirror`,并必须 `HF_HUB_DISABLE_XET=1`(否则 xet CAS 401)。 4. **速度**:faster-whisper `base.en` + `beam_size=1` + **单线程多进程并行**,实测 ~28x 实时(4 并行);19 集≈12 分钟。 5. **成册**:每集 md = 中文导读 + 英文全文;文稿为自动转写,**未人工校对**。 6. ⚠️ 版权:视频版权归原作者,建议仅作**个人学习**归档,勿公开分发。 _(本工具包由小五沉淀,首个用户:《Full Algorithmic Trading Using Python》19 集)_