youtube-to-pdf
将 YouTube 视频通过 NotebookLM 深度分析后,转换为结构化的 PDF 教程文档。 适用于将教程、播客、课程类视频转化为书面内容。 Triggers: "视频转PDF"、"生成教程"、"视频转文字教程"、"YouTube to PDF"、"video to tutorial PDF"
소스 정보
- 저장소
- yang0/youtube-to-pdf
- 최근 소스 활동
- 2026년 5월 11일 22:35
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 0
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SKILL.md 표시 중
SKILL.md
소스 지침 · 읽기 전용 미리보기- name
- youtube-to-pdf
- description
- 将 YouTube 视频通过 NotebookLM 深度分析后,转换为结构化的 PDF 教程文档。 适用于将教程、播客、课程类视频转化为书面内容。 Triggers: "视频转PDF"、"生成教程"、"视频转文字教程"、"YouTube to PDF"、"video to tutorial PDF"
# YouTube to PDF — 视频转PDF教程
将 YouTube 视频通过 NotebookLM 渐进式分析,提取为结构化 Markdown,最终输出 PDF 教程。
## 核心链路
```
YouTube URL → NotebookLM(创建notebook→添加source→渐进式ask)
→ 本地Markdown(分章节保存) → 合并 → md-to-pdf → PDF
```
## 前置环境
| 工具 | 用途 | 安装 |
|------|------|------|
| `notebooklm` CLI | NotebookLM 操作入口 | 已全局安装 |
| `notebooklm-py` + `curl_cffi` | NotebookLM 底层依赖 | `pip install curl_cffi` |
| Chrome CDP | NotebookLM 认证提取 | 预登录 YouTube/Google 的 Chrome profile |
| `cdp_login.py` | 一键刷新 NotebookLM 认证 | 位于 `use-notebooklm/scripts/` |
| `md-to-pdf` | Markdown → PDF 转换 | `npm install -g md-to-pdf` |
| Python 3 | 文件合并脚本 | 系统已有 |
## 四阶段工作流
### Phase 0: 认证检查
**每次操作 NotebookLM 前必须先确认认证有效。**
```bash
# 快速检查
notebooklm status
```
如果返回 `Authentication expired`:
```bash
# 1. 确认 Chrome CDP 在运行
Invoke-WebRequest -Uri "http://127.0.0.1:9223/json/version" -UseBasicParsing
# 2. 如果 Chrome 未启动,先启动 CDP
Get-Process chrome -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep 2
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9223 `
--user-data-dir="G:\chrome_data\remote_debug" `
--remote-allow-origins=* `
about:blank
# 3. 提取认证 cookies
python E:\projectHome\use-notebooklm\scripts\cdp_login.py --port 9223
# 4. 验证
notebooklm status
```
> **根因**: NotebookLM 认证通过 Chrome CDP 从预登录 Google 账号的 profile 提取 cookies。Chrome profile `G:\chrome_data\remote_debug` 必须已经登录 Google/NotebookLM。
---
### Phase 1: 创建 Notebook + 添加 Source
```bash
# 1. 创建新 notebook
notebooklm create --json "教程标题" 2>&1
# → 记录返回的 notebook.id (UUID)
# 2. 添加 YouTube 视频作为 source
notebooklm source add "https://www.youtube.com/watch?v=VIDEO_ID" -n <notebook-id>
# → 返回 source-id,等待处理完成(通常 30 秒内)
```
**重要约定**:
- 一个视频 = 一个 notebook,避免多 source 内容交叉污染
- Source 上限 30 条,单视频教程通常只需 1 条
- YouTube URL 直接作为 source 传入,NotebookLM 自动处理转写
---
### Phase 2: 渐进式内容提取
**核心原则: 反思驱动,非计划驱动。** 每一轮提问基于前一轮的返回结果决定下一轮要深入什么。
#### Round 1: 获取章节目录(索引)
```bash
notebooklm ask "把这个视频内容拆成一个详细的章节目录。对每一章列出: (1) 标题 (2) 核心概念 (3) 3-5个关键要点。" -n <notebook-id> 2>&1
```
**反思**: 哪些章节是核心?哪些只是过渡?根据返回决定接下来深入哪些章节。
#### Round 2-N: 逐章深挖
每轮只提取一章,英文提问更稳定(NotebookLM 中文编码偶有乱码):
```bash
notebooklm ask "Extract Chapter N on [主题] in complete tutorial detail. Cover: [3-5个具体要点]. Include examples and quotes. Write with markdown formatting." -n <notebook-id> 2>&1
```
**Round 模板**:
| 章类型 | 提问模板 |
|--------|---------|
| 概念章 | "Extract Chapter X on [概念] in detail. Cover: (1) definition and analogy, (2) core mechanism, (3) real-world example, (4) why it matters." |
| 工具章 | "Extract Chapter X on [工具/框架] in detail. Cover: (1) what it is, (2) key features, (3) comparison with alternatives, (4) setup steps, (5) best practices." |
| 实操章 | "Extract Chapter X on [实操主题] as a step-by-step tutorial. Cover: (1) prerequisites, (2) detailed steps with code/examples, (3) common pitfalls, (4) final result." |
**反思清单** (每轮必须回答):
- [ ] 这次返回覆盖了哪些内容?
- [ ] 哪些重要内容明显被省略了?
- [ ] 是否有概念需要前置解释?
- [ ] 下一步最值得深入的是哪个部分?
**每轮拿到结果后**,立即用 `write` 工具保存为本地文件:
- `tutorial/ch01-xxx.md`
- `tutorial/ch02-xxx.md`
- ...
> 不要等所有章节问完再统一保存。每轮问完立刻存,防止 NotebookLM 会话丢失。
---
### Phase 3: 翻译与打磨
NotebookLM 提取的内容是英文的(更稳定),需要翻译成中文。
**策略**: 用当前 LLM(你自身)翻译,而非 NotebookLM。
每章保存为 Markdown 后,由编排层逐章翻译:
1. 读取英文 Markdown
2. 翻译为中文(保持 Markdown 格式、术语一致、口语化)
3. 覆盖写入为中文 Markdown
**翻译规范**:
- 技术术语统一(参考视频配音阶段建立的 glossary)
- 口语化表达,适合阅读(非字幕的 4 字/秒限制,此处无字数限制)
- 保留原文中的引用块(`>`)和重点标记(`**`)
- 关键概念首次出现时保留英文原名,如"智能体(Agent)"
---
### Phase 4: 合并 → PDF
```bash
# 1. 用 Python 合并所有章节为单文件
python -c "
import os
base = r'<output-dir>'
chapters = ['ch01-xxx.md', 'ch02-xxx.md', ...]
titles = ['第一章 xxx', '第二章 xxx', ...]
lines = ['# <书名>', '## 来源: <YouTube URL>', '', '## 目录', '']
for i, t in enumerate(titles, 1):
lines.append(f'{i}. {t}')
lines.extend(['', '---', ''])
for fname, title in zip(chapters, titles):
with open(os.path.join(base, fname), 'r', encoding='utf-8') as f:
content = f.read()
lines.append(f'# {title}')
lines.append('')
clines = content.strip().split('\n')
if clines[0].startswith('# '):
clines = clines[1:]
lines.append('\n'.join(clines))
lines.append('\n---\n')
with open(os.path.join(base, '00-full-tutorial.md'), 'w', encoding='utf-8') as f:
f.write('\n'.join(lines))
"
# 2. md-to-pdf 转换
md-to-pdf "<output-dir>/00-full-tutorial.md" --basedir "<output-dir>"
```
**md-to-pdf 注意事项**:
- 默认使用 Chromium 渲染,中文支持良好
- 首次运行会下载 Chromium(约 280MB),等待即可
- 如需自定义样式,MD 文件同级放置 `00-full-tutorial.css`
---
## 实战案例(完整端到端)
以 Greg Isenberg 的 "Building AI Agents" (58分钟) 为例:
```bash
# Phase 0: Auth
python E:\projectHome\use-notebooklm\scripts\cdp_login.py --port 9223
# Phase 1: Setup
notebooklm create --json "AI Agents Tutorial Greg Isenberg"
# → id: 13f9dd68-5fe7-44c3-b2ae-74289a1e3532
notebooklm source add "https://www.youtube.com/watch?v=eA9Zf2-qYYM" -n 13f9dd68-...
# Phase 2: Extract (8 rounds)
# Round 1 - Index
notebooklm ask "把这个视频内容拆成一个详细的章节目录..." -n 13f9dd68-...
# → 8 chapters identified
# Rounds 2-7 - Deep dives
notebooklm ask "Extract Chapter 1 on AI Agents fundamentals..." -n 13f9dd68-...
# → saved as ch01-ai-agents-fundamentals.md
# ... repeat for all 8 chapters ...
# Phase 4: Merge + PDF
# → 合并为 00-full-tutorial.md → md-to-pdf → 693KB PDF
```
**产出**: 8 章结构化 Markdown + 1 个 693KB PDF,全程 ~30 分钟。
---
## 故障排查
| 症状 | 原因 | 解决 |
|------|------|------|
| `Authentication expired` | NotebookLM cookies 过期 (通常 24h) | `cdp_login.py --port 9223` |
| `Chrome CDP not reachable` | Chrome 未启动或端口冲突 | Kill Chrome → 重新 `--remote-debugging-port=9223` |
| `ask` 返回乱码(`????`) | NotebookLM 中文编码不稳定 | 改用英文提问,最后由 LLM 翻译 |
| `ask` 提问到错误的 notebook | CLI 自动 resumes 到之前的上下文 | **每个 ask 都显式加 `-n <notebook-id>`** |
| `md-to-pdf` 首次运行慢 | 正在下载 Chromium | 等待,仅首次需要 |
| 章节内容太简短 | 提问不够具体 | 用 Round 模板,明确列出 3-5 个要点 |
| 合并后 PDF 中文显示异常 | 缺少中文字体 | Windows 自带微软雅黑,一般无此问题 |
---
## 与子 Skill 的关系
本 skill 编排以下工具,自身不实现底层逻辑:
| 组件 | 职责 |
|------|------|
| `notebooklm` CLI | NotebookLM 操作(create, source add, ask) |
| `cdp_login.py` (use-notebooklm) | NotebookLM 认证刷新 |
| `md-to-pdf` (npm) | Markdown → PDF 渲染 |
| 编排层 LLM | 翻译、术语管理、质量把控 |
---
## 文件结构
```
<output-dir>/
├── tutorial/
│ ├── 00-full-tutorial.md # 合并版 Markdown
│ ├── 00-full-tutorial.pdf # 最终 PDF
│ ├── ch01-xxx.md # 分章节文件
│ ├── ch02-xxx.md
│ └── ...
└── video.mp4 # (可选) 原始视频
```
---
**版本**: v1.0
**最后更新**: 2026-05-12
**维护者**: Claude Code
GitHub에서 보기