Communitygithub.com

YouTube 摘要

将 YouTube 视频(公开、不公开列出、或用户已登录账号可观看的私有/会员视频)或本地视频/音频录制转换为详细的逐节摘要文档(PDF),并可提取音频轨道为 mp3/m4a/wav 格式。

YouTube 摘要 是什么?

该技能是一个强大的 AI 代理工具,能够将 YouTube 视频或本地媒体文件转化为结构化的、详细的 PDF 摘要文档。它支持公开、不公开列出、以及用户已登录账号可访问的私有或会员视频,也支持本地的 .mp4、.m4a、.mp3 和 .webm 文件。技能的核心流程是:首先获取视频的转录文本(优先使用字幕,若无字幕则下载音频并使用 Whisper 进行本地转录),然后由 AI 代理阅读完整的转录文本,并撰写一份带有时间线、事实表格和关键要点的结构化 Markdown 摘要,最后将其渲染为 PDF 文件。此技能在处理无字幕的直播、讲座、网络研讨会和长时录音时特别有用,并且能通过提取音频文件来满足用户对音频的需求。它适用于 Claude Code 等支持本地脚本执行的 AI 代理平台,并强调操作的安全性与 cookie 的正确使用。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add simply-Rahul8/youtube-summary

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

YouTube 摘要 是做什么的?

流程:获取转录 -> 阅读全部内容 -> 编写结构化 Markdown 摘要 -> 渲染 PDF。 scripts/fetch_transcript.py 处理第一步,scripts/md_to_pdf.py 处理最后一步。你负责在中间编写摘要。

1. 访问:仅限于用户已经可以观看的内容

  • 公开和不公开列出的视频无需登录。始终首先尝试无 cookie 的下载方式。
  • 私有或会员专享视频会使脚本退出并显示 NEEDS_SIGNIN。你只能通过从用户的浏览器(该浏览器中 用户的账号已被授予访问权限)读取 cookie 来继续。
    • 询问用户使用哪个浏览器(以及配置文件,如果他们使用多个),然后传递 --browser。Cookies 代表了他们的凭证。
    • 告知用户,yt-dlp 的文档警告,自动化使用已登录账号可能导致其被限速或封禁。对于他们自己的上传内容,使用 YouTube Studio 下载或 Google 导出是零风险的替代方案,脚本也接受由此产生的本地文件。
  • 切勿尝试绕过隐私设置、地区限制、DRM 或付费墙,也绝不使用他人的账号。如果用户的账号无法观看该视频,请说明情况并停止。
  • 即使在使用了 --browser 的情况下,如果显示“此视频为私有视频”,通常意味着有访问权限的账号不是浏览器默认登录的账号。建议使用 --browser chrome:"Profile 2",或者在一个新的浏览器配置文件中使用该账号登录。

2. 获取转录(分离模式:长视频需要较长时间)

使用持久的工作文件夹,而非会话临时目录(会话临时目录可能在任务进行中被清空):~/youtube-summaries/<video-id-or-file-stem>/。 以分离模式启动任务,使其在会话结束后仍能继续运行:

OUT=~/youtube-summaries/<id>; mkdir -p "$OUT"
nohup python3 -I ~/.claude/skills/youtube-summary/scripts/fetch_transcript.py "<url-or-file>" \
  --out "$OUT" [--browser chrome] [--lang en|auto] [--force-audio] [--audio mp3|m4a|wav] \
  > "$OUT/run.log" 2>&1 &!

然后使用后台 Bash until 循环进行等待,而非轮询,例如: until grep -qE '^(DONE|FAILED|NEEDS_SIGNIN)' "$OUT/status"; do sleep 15; done; cat "$OUT/status"。

脚本的作用:

  • 探测元数据,然后使用手动字幕,若没有则回退到自动字幕;
  • 若无字幕,则下载音频并在 Apple Silicon 上使用 mlx-whisper large-v3-turbo(其他平台使用 openai-whisper)进行转录。如果没有安装 ffmpeg,它会使用 imageio-ffmpeg 获取;
  • 去除 Whisper 的静默幻听(例如“谢谢你。”)以及自动字幕中的重复内容;
  • 将 transcript.txt 写为每 2 分钟一段的 [h:mm] 段落格式,并生成 meta.json。

耗时:在配备 8GB 内存的 M 系列 Mac 上,转录时长约为音频时长的 4-5 分钟,外加下载时间。告知用户预期的等待时间,如果他们询问进度,则报告下载百分比或 run.log 中的最后时间戳。

当自动字幕质量较差时(如音乐、口音重、语言错误),请使用 --force-audio。对于非英语视频,请使用 --lang auto。

音频提取: 当用户想要音频本身时,请传递 --audio mp3(或 m4a/wav)参数,例如用户说“给我 mp3”、“提取音频”、需要播客版本或离线收听。文件将以 <title>.<format> 格式保存在 $OUT 中,其路径会记录在 meta.json 的 audio_file 字段中。如果字幕可用,仍会将其用于转录,因此请求音频不会强制进行缓慢的转录。如果用户只想要音频而不要摘要,则在此步骤后停止并报告文件路径。

3. 阅读全部内容,然后进行总结

阅读完整的 transcript.txt;用户通常想要每一个细节。当文本超过约 6 万字时,按顺序分块阅读,并在每个块中做笔记,然后再开始撰写摘要。

用自己的话编写 $OUT/summary.md:这是一份摘要,不是转录文本。可以使用简短引用,但不要大段逐字照搬。默认结构(根据视频内容调整章节):

# <Video title>

| | |
|---|---|
| 视频 | <title> |
| 频道 | <channel> |
| 链接 | <url> |
| 时长 | <duration> |
| 演讲者 | <only names actually stated in the video> |
| 转录来源 | <manual captions / auto captions / local Whisper transcription> |

## 1. 概览
- 5-8 个要点:视频涵盖的内容和主要结论

## 时间线
| 时间 | 主题 |
|---|---|
| 0:00 | ... |

## 2. <按视频顺序,每个章节/主题作为一个部分>
### <子主题>
- 每一个具体事实、数字、名称、定义、示例、步骤、警告和建议
- 演示和操作指南需编号;比较使用表格

## 关键事实/要点
| 项目 | 值 |

## 关于本摘要的说明
> 转录是如何生成的;你纠正的听错术语;演讲者说错的内容(附上更正);任何听不清或不确定的地方。

为什么这样设计:时间线帮助读者跳转到视频的特定位置;表格收集了人们日后会搜索的事实;说明部分则让你对转录错误保持坦诚。语音转文字会曲解产品名称和术语,请根据上下文修正并列出修正内容。核实演讲者说错的事实,而不是简单重复。

保持正文有据可查:Notes 部分以上的所有内容都应来自转录文本或 meta.json。读者将文档视为视频内容的记录,因此你碰巧知道的与视频相关的信息(如演讲者的真实身份、拍摄地点、历史背景)不应出现在正文中,即使你非常确定。如果此类背景信息确实有帮助,请将其放在 Notes 中并标注为“视频外信息”。切勿使用视频中未提到的姓名或代词。如果视频描述与内容无关(重复或垃圾描述很常见),请忽略它并在 Notes 中说明。

根据视频长度调整文档篇幅。仅在长文档开始新的主要部分时使用 <!-- pagebreak -->(例如,数小时直播流的每个章节),切勿在封面表格后使用。一个 2 分钟的片段应只占一到两页。

4. 渲染并检查 PDF

uv run ~/.claude/skills/youtube-summary/scripts/md_to_pdf.py "$OUT/summary.md" "$OUT/<Title>.pdf"

将第 1 页和一页内容密集的页面渲染为 PNG,并在报告前查看它们: uvx --with pypdfium2 --with pillow python -c "..."。 然后给用户提供:

  • PDF 的绝对路径和页数;
  • 3-5 行的概述;
  • 任何注意事项:自动生成的字幕、听不清的部分。

音频文件可能很大。提及这一点,让用户决定是否删除它。

故障排除

  • 针对公开视频出现 Sign in to confirm you're not a bot / HTTP 403 错误:等待并重试。如果持续出现,则是 IP 或速率限制问题。不要循环重试。
  • yt-dlp JS 运行时警告:当 Deno 不可用时,脚本会传递 --js-runtimes node。需要 Node 22+。
  • 没有转录文字,或转录内容充满无意义内容:检查语言(--lang auto),或使用 --force-audio 重新运行。

相关技能