YouTube Learning — 视频逐字稿提取 & 双语整理
从 YouTube 视频提取字幕,清洗格式,生成结构化的英文逐字稿和中英对照文档,并记录查询时的 YouTube 播放量。
完整工作流(6 步)
Step 1: 提取字幕
python3 {baseDir}/scripts/get_transcript.py "https://www.youtube.com/watch?v=VIDEO_ID"
脚本已内置 --cookies-from-browser chrome、--js-runtimes node、--remote-components ejs:github,无需额外配置。
字幕语言选择:
- 英文原文:--sub-lang "en-orig"(推荐,更准确)
- 英文自动生成:--sub-lang "en"
- 中文简体:--sub-lang "zh-Hans"
- 先用 yt-dlp --list-subs <URL> 查看可用字幕
默认输出为 en-orig(英文原始字幕),保存到当前工作目录。
Step 2: 清洗格式
python3 {baseDir}/scripts/format_transcript.py <input.vtt_or_txt> -o <output.txt>
自动完成:移除 VTT 时间戳和元数据 → 合并断行 → 去重 → 移除填充词 → 解码 HTML 实体。
Step 3: 获取视频元信息与当前播放量
运行元信息脚本:
python3 {baseDir}/scripts/get_video_metadata.py \
"https://www.youtube.com/watch?v=VIDEO_ID" \
--output <metadata.json>
必须读取并使用以下字段:
- 标题、发布者、发布日期、视频时长和原视频链接;
- 描述中的演讲人、社交链接、活动信息、话题标签和章节时间戳;
view_count和view_count_formatted;view_count_checked_at和view_count_timezone。
播放量是查询时快照,必须与查询时间和时区一起写入产出。使用千位分隔符,例如:12,345 次(查询于 2026-07-13 14:00:00,Asia/Shanghai)。更新旧文档时重新查询,不要沿用旧数字。如果 YouTube 未返回 view_count,写明“无法取得(查询于……)”,不要估算或编造。
需要补充页面信息时,再使用 WebFetch 获取视频页面:
使用 WebFetch 获取视频页面的标题、描述、演讲人信息:
WebFetch: https://www.youtube.com/watch?v=VIDEO_ID
prompt: "提取视频标题、发布者、发布日期、描述信息"
从描述中补充:演讲人姓名、社交链接、话题标签、章节时间戳。不要用页面上的模糊展示值覆盖脚本返回的精确播放量。
Step 4: 生成双语对照文档
按以下模板生成 markdown 文件:
# [视频标题中文翻译] ([原标题])
---
## 演讲信息
| 项目 | 内容 |
|------|------|
| **标题** | ... |
| **演讲人** | 姓名,所属机构,角色 |
| **场合** | 大会/活动名称 |
| **时间** | YYYY年MM月 |
| **链接** | ... |
| **当前播放量** | 12,345 次(查询于 YYYY-MM-DD HH:MM:SS,Asia/Shanghai) |
## 概要
[3-5 句话概括视频核心内容]
## 章节导航
- [章节一:XXX](#ch1)
- [章节二:XXX](#ch2)
- ...
## 核心要点总结
| 核心要点 | 内容 |
|------|------|
| **1** | ... |
| **2** | ... |
| **3** | ... |
---
## 章节一:XXX
---
> [English paragraph]
[中文翻译段落]
---
> [English paragraph]
[中文翻译段落]
---
...
格式规则:
- 每个自然段英文 + 中文翻译为一组
- 英文用 > 引用块包裹
- 中英文之间用 --- 分隔
- 章节之间用二级标题 + 锚点链接导航
- 核心要点总结表必须紧跟在章节导航之后,放在中英正文之前,不得移到文末
- “演讲信息”必须包含当前播放量及查询时间;英文逐字稿的元信息头也要写入同一播放量快照
Step 5: AI 翻译
这一步由 AI 完成:读取清洗后的英文文本,逐段翻译为中文,保持术语一致性。
翻译要点:
- 保持演讲者的语气和风格(口语化、自然的表达)
- 技术名词首次出现时保留英文原文,eg. "能力悬垂 (capability overhang)"
- 段落转换保持自然,不逐字硬译
Step 6: 规范命名
文件命名格式:
<SpeakerName>_<Topic_Keywords>_<YYYY-MM>_<Language>.md
示例:
- Thariq_Shihipar_Fable_Field_Guide_2026-07_双语对照.md
- Thariq_Shihipar_Fable_Field_Guide_2026-07_EN.txt
规则:下划线分隔、无空格、时间精确到月、语言标注清晰。
依赖
yt-dlp— 字幕下载node— JS 运行时(yt-dlp 需要)- Chrome 浏览器 — cookies 认证(yt-dlp 需要)
- Python 3 — 运行脚本
快速命令参考
# 1. 获取元信息和当前播放量
python3 {baseDir}/scripts/get_video_metadata.py "URL" --output metadata.json
# 2. 列出可用字幕
yt-dlp --cookies-from-browser chrome --js-runtimes node --remote-components ejs:github --list-subs "URL"
# 3. 下载英文字幕
python3 {baseDir}/scripts/get_transcript.py "URL" > raw.txt
# 4. 清洗格式
python3 {baseDir}/scripts/format_transcript.py raw.txt -o clean.txt
# 5. 然后由 AI 完成翻译、排版、命名,并写入播放量快照
注意事项
- 视频必须有字幕(CC 或自动生成),否则无法提取
--cookies-from-browser chrome需要本机已登录 YouTube 的 Chrome 浏览器- 如无 Chrome,可改用其他浏览器(firefox/safari/edge)或手动导出 cookies 文件
- 如果视频没有
en-orig字幕,fallback 到en或zh-Hans - 播放量随时间变化;任何包含播放量的文档都必须同时保留查询时间和时区