关于 boring-youtube-mining
面向内容创作者的 YouTube 研究技能,可从指定频道提取近期视频并整理字幕,再从回应角度和内容空白生成具体创意。可选用 World Code 筛选创意,并保存结果。
主要功能
- 01使用 yt-dlp 获取频道近期视频
- 02下载并缓存英语字幕
- 03生成回应型与空白型创意
- 04在可用时映射到 World Code
- 05保存带日期的创意文件
适用场景
- 01从指定频道寻找帖子或视频主题
- 02围绕某个视频形成回应角度
- 03发现视频未解答的受众问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mrpaulscrivens/ boring-zoo --skill boring-youtube-mining安装后在 Claude Code 中输入/boring-youtube-mining确认已加载。
详细介绍
YouTube 挖掘 — World Code 版
从预先选定的 YouTube 频道提取近期视频,下载视频字幕,并生成用户切实可用的内容创意。一轮完成,无需来回沟通。
开始前 — 检查依赖项
静默运行:
which yt-dlp
如果未安装 yt-dlp,请停止并告知用户:
必须安装
yt-dlp才能继续。根据你的平台安装:
- macOS:
brew install yt-dlp- Windows:
winget install yt-dlp- Linux:
pip install yt-dlp或使用你的包管理器- 通用:
pip install yt-dlp然后再次运行
/boring-youtube-mining。
没有 yt-dlp 不要继续。请平稳停止。
开始前 — 加载 World Code(可选)
尝试静默读取这些文件:
world-code/voice.md— 语气规则(不应用于输出——这是研究内容,不是发布内容)world-code/conversation.md— Bridge 结构(障碍、挣扎、小恶魔、宝藏)
如果 conversation.md 存在: 使用 Bridge 筛选并确定创意的优先级。每个创意都要对应一个障碍、挣扎或小恶魔。与它们都没有关联的创意应降低优先级(仍需列出,只需标注为“无 Bridge 关联”)。
如果 conversation.md 不存在: 仅根据字幕分析生成创意。不要因为文件缺失而反复提醒。
步骤 1:加载频道列表
读取 settings/youtube-channels.md。
如果文件不存在,请创建该文件并添加示例内容,然后告知用户:
我创建了
settings/youtube-channels.md,其中包含一些示例频道。在 Obsidian 中编辑该文件,添加你想挖掘的频道,然后再次运行/boring-youtube-mining。
settings/youtube-channels.md 的初始内容:
# YouTube Channels
Add channels you want to mine for content ideas. Use the @ handle format.
Add a short description so Claude knows the context.
- @AlexHormozi - Business, offers, scaling
- @ChrisDo - Branding, pricing, positioning
创建文件后停止。先让用户完成配置。
步骤 2:获取近期视频
对列表中的每个频道运行:
yt-dlp --flat-playlist --playlist-items 1:5 --print "%(id)s | %(title)s | %(duration_string)s" "https://www.youtube.com/@{handle}/videos" 2>/dev/null
按顺序处理频道(不要并行处理),以避免触发速率限制。
将结果以编号列表形式呈现:
## Recent Videos
### @AlexHormozi
1. [dQw4w9WgXcQ] How to Price Your Offer (12:34)
2. [abc123def] The $100M Framework Nobody Uses (18:22)
...
### @ChrisDo
3. [xyz789ghi] Why Your Brand Is Invisible (9:45)
...
询问用户:
应该分析哪些视频?请输入编号(例如“1, 3, 5”)或“all”。
如果频道句柄无法解析,请报告并继续处理其余频道:
无法获取 @BadHandle 的视频 — 请检查
settings/youtube-channels.md中的句柄。
步骤 3:下载字幕
对每个选中的视频,先检查是否存在缓存字幕:
ls "content/youtube-transcripts/{video_id}.md" 2>/dev/null
如果已缓存: 跳过下载,直接读取缓存。告知用户:
“{title}”的字幕已缓存 — 跳过下载。
如果未缓存: 下载自动生成的英文字幕:
yt-dlp --write-auto-sub --sub-lang en --sub-format vtt --skip-download -o "content/youtube-transcripts/%(id)s" "https://www.youtube.com/watch?v={video_id}" 2>/dev/null
然后清理 VTT 文件并保存为 Markdown。必要时创建目录:
mkdir -p "content/youtube-transcripts"
清理 VTT 字幕
原始 VTT 文件包含时间戳和重复行。请清理:
- 删除所有时间戳行(匹配
XX:XX:XX.XXX --> XX:XX:XX.XXX的行) - 删除
WEBVTT标头以及Kind:/Language:元数据行 - 删除连续重复的行(VTT 会在字幕提示边界处重复行)
- 删除
<c>、</c>、align:start position:0%等位置/对齐标签 - 合并成段落(将句子分组,并在自然停顿处换行)
将文件保存为 content/youtube-transcripts/{video_id}.md,并添加 frontmatter:
---
video_id: {video_id}
title: {video title}
channel: {channel handle}
date_fetched: {YYYY-MM-DD}
url: https://www.youtube.com/watch?v={video_id}
---
# {video title}
**Channel:** {channel handle}
**URL:** https://www.youtube.com/watch?v={video_id}
## Transcript
{cleaned transcript text}
转换后删除原始 VTT 文件。
边缘情况
-
没有可用的英文自动生成字幕: 跳过该视频并显示消息:
“{title}”没有可用的英文字幕 — 跳过。
-
字幕非常长(估计超过 10,000 个词): 在生成创意前分段总结。将字幕拆分为约 3,000 词的小节,总结每节的要点,然后使用这些总结生成创意。在输出中注明字幕已经过总结。
步骤 4:生成创意
对每份字幕,从两个角度生成创意:
视角 1:直接回应
用户会如何回应这段视频的观点?生成 2-3 个创意:
- 认同并拓展 — 对方提出了你也认同的观点。你有什么独特的切入角度?
- 不认同并反驳 — 对方说的某些内容与你的看法不同。你的观点是什么?
- 延伸发挥 — 对方提到了某个话题,却没有深入展开。你会如何继续探讨?
视角 2:内容缺口创意
有哪些内容缺失?生成 1-2 个创意:
- 对方提到但没有深入探讨的话题
- 受众会感兴趣、但视频没有涉及的相关话题
- 视频提出但没有回答的问题
每个创意需包含:
| 字段 | 说明 |
|---|---|
| 创意标题 | 简洁具体——不要写“关于定价的想法”,而要写“为什么按小时收费会扼杀个人企业” |
| 切入角度 | 直接回应(认同/反对/拓展)或内容缺口 |
| 来源 | 视频标题 + 时间戳范围(若可识别) |
| 你的观点(1-2 句话) | 你要提出的核心论点 |
| 桥接映射 | 关联到哪个障碍/挣扎/小妖怪(如果存在 conversation.md) |
| 内容类型 | 帖子、串文、邮件、文章、视频脚本、轮播图 |
| 草稿钩子 | 一句能让人停止刷屏的开场白 |
重质不重量
- 每个视频产出 3-5 个创意。 不是 10 个,也不是 20 个。只要最好的 3-5 个。
- 每个创意都必须通过“我真的会做这个吗?”的检验
- 如果创意很泛泛(“内容很重要”),就舍弃
- 没有明确切入角度的创意只是一种话题,不是真正的创意。话题没有用。
优先桥接筛选(存在 conversation.md 时)
生成所有创意后,按以下顺序排序:
- 强桥接关联 — 直接对应某个障碍、挣扎或小妖怪
- 弱桥接关联 — 与用户的领域相关,但没有直接对应关系
- 无桥接关联 — 有趣,但与用户的 World Code 脱节
第 3 类仍需列出,但要加以标记。是否值得继续,由用户决定。
步骤 5:保存输出
将输出文件保存到 content-ideas/youtube-mining-{YYYY-MM-DD}.md:
---
type: youtube-mining
date: {YYYY-MM-DD}
channels_mined: [{list of channels}]
videos_analyzed: {count}
ideas_generated: {count}
---
# YouTube Mining — {YYYY-MM-DD}
## Sources
| Video | Channel | Ideas |
|-------|---------|-------|
| {title} | {channel} | {count} |
...
## Ideas
### From: "{video title}" (@channel)
#### 1. {Idea Title}
- **Angle:** {Direct Response — Agree/Disagree/Expand | Gap}
- **Source:** {video title}, ~{timestamp context if available}
- **Your take:** {1-2 sentences}
- **Bridge:** {wall/struggle/goblin or "No direct connection"}
- **Content type:** {post/thread/email/essay/video/carousel}
- **Draft hook:** "{opening line}"
---
{repeat for each idea}
## Bridge Summary
### Strong Connections
- {idea} → {wall/struggle}
...
### No Connection
- {idea} — interesting but not tied to your current World Code
...
## Next Steps
- Pick an idea and run `/boring-copywriting` to draft it
- Run `/boring-social-content` to turn an idea into platform-specific posts
- Run `/boring-remix` to generate multiple angles on your favorite idea
步骤 6:结束
保存后,告知用户:
已将 {X} 个创意保存到
content-ideas/youtube-mining-{date}.md。其中 {count} 个创意与 Bridge 有强关联,{count} 个没有。
选一个创意,我可以用
/boring-copywriting起草内容,用/boring-social-content将它改写成社交媒体帖子,或用/boring-remix对它进行改编。
就这样。不必回顾流程,也不必讲解内容策略。
核心原则
- 一轮完成,完整输出。 获取 → 转录文本 → 创意 → 保存。不要停下来问“要继续吗?”
- 输出研究成果,而非已发布内容。 不应用个人风格,不做润色。保留原始的策略性创意。
- 缓存不可妥协。 绝不重复下载转录文本。务必先检查缓存。
- 有条件时优先桥接。 与 World Code 的关联,能让这些内容真正有用,而不只是有趣。
- 按顺序处理频道。 不要并行请求,让 YouTube 不堪重负。
- 每个视频产出 3-5 个优质创意。 克制是一种能力。谁都能生成 50 个平庸的创意。
- 草稿钩子很重要。 没有钩子的创意只是一种话题,而话题不值钱。
- 不解释流程。 用户不需要逐步了解“现在我正在下载转录文本”。直接执行并展示结果即可。
相关技能
- boring-copywriting — 根据挖掘出的创意起草完整内容
- boring-social-content — 将创意改写成适合不同平台的帖子
- boring-remix — 为单个创意生成多个切入角度
- boring-content-strategy — 利用挖掘出的洞见进行更全面的内容规划