← Back to skills
extension
Category: Productivity & OfficeAPI key requirement unconfirmed

YouTube 采集

采集 YouTube 视频对标素材:取官方字幕(或自动字幕)转成逐字稿、核对播放数据、下载封面图,按标准素材槽位落成 02_内容信息.md + 04_文案结构化梳理.md + 05_视频脚本.md,封面存 01_原始素材/01-封面图/,写入对标内容采集/YouTube/。当用户说"采集这个 YouTube 视频""YouTube 入库""把这条 YouTube 链接存进对标素材"时使用。

personAuthor: sunny31221hubOpenAPI

YouTube 采集

安装方法

  1. 先问使用者用的是什么 AI 工具,选项按这个顺序列:1. WorkBuddy 2. Claude Code 3. Codex 4. 其他(用户直接说工具名),回答记作 X
  2. 只安装给 X,不安装或链接其他任何工具:
    • X 是 WorkBuddy:把本技能下载后放进 ~/.workbuddy/skills/(WorkBuddy 的技能目录;skills CLI 不支持 WorkBuddy,由你直接放置)

    • X 是其他工具:

      npx -y --registry=https://registry.npmmirror.com skills add https://modelscope.cn/skills/sunny31221/youtube-collect-buheliwa -a X -y
      

      (不带 -a 会安装给本机所有检测到的工具,禁止;--registry 为 npmmirror 镜像,保证国内不翻墙也能拉到 CLI)

    • X 不在上述范围时,按该工具自身的技能机制安装,装完确认 X 能识别本技能即可

  3. 装完后询问是否现在使用本技能

依赖什么

  • yt-dlp:取字幕、视频信息、封面图的命令行工具
  • Python 3:yt-dlp 的运行环境

装不上 / 跑不通怎么办:

| 情况 | 处理 | |---|---| | 没有 yt-dlp | 按下方「去哪装」装一次 | | 报错 Sign in to confirm you're not a bot | 命令加 --cookies-from-browser chrome(见流程第 0 步) | | yt-dlp 装了但取不到字幕 | 该视频可能关闭了字幕。跳过字幕步骤,在 02_内容信息.md 里写明「无字幕」,仅采集标题与数据 | | 版本太旧报错 | 升级 yt-dlp(YouTube 接口变动频繁,旧版常失效) |

去哪装(推荐降级链:国际源失败 → 国内镜像):

# macOS
brew install yt-dlp                                   # 国际源
pip3 install -U yt-dlp                                # 备选(官方 PyPI)

# 国内镜像(上面两条都慢或失败时)
pip3 install -U yt-dlp -i https://pypi.tuna.tsinghua.edu.cn/simple      # 清华
pip3 install -U yt-dlp -i https://mirrors.aliyun.com/pypi/simple/       # 阿里云

# Windows
winget install yt-dlp
pip install -U yt-dlp -i https://pypi.tuna.tsinghua.edu.cn/simple

装完验证:

yt-dlp --version

触发场景

  • "采集这个 YouTube 视频" + 链接
  • "YouTube 入库" / "把这条 YouTube 链接存进对标素材"
  • 采集编排器识别到 youtube.com / youtu.be 链接后分流到本技能

输出位置

AI第二大脑/规律研究/对标内容采集/YouTube/
└── NNN_标题_频道_视频ID/
    ├── 01_原始素材/
    │   └── 01-封面图/
    │       └── cover.jpg
    ├── 02_内容信息.md
    ├── 04_文案结构化梳理.md
    └── 05_视频脚本.md
  • 编号:取目标目录已有最大编号 +1(三位补零),不假设从 001 开始
  • 文件夹名:编号_标题_频道_视频ID,标题与频道名里的 / 换成全角「/」
  • 去重:同一视频 ID 已存在时跳过,不重复建文件夹

少花调用次数

有些链路按请求次数计费(第三方兼容接口的每日额度多是这样),不按 token。一次模型回复里发多个工具调用,只算 1 次请求;串行一次发一个,就一次一个数。同一个任务排得好坏,能差三倍次数。

  1. 能串的串成一条命令:python3 a.py && python3 b.py,中间结果用 $(...) 接住。互不依赖的命令别分成两次 Bash。
  2. 无依赖的一轮发完:抓取、下载、读文件这些互不依赖的动作,放在同一条回复里一起发。
  3. 脚本能批量就别逐条调:先看脚本的 --help,支持一次处理多条或整个目录的,就一次跑完。
  4. 输出要过滤:脚本输出配 head / grep 再看。全量输出进上下文既拖速度,也容易把关键信息淹掉。
  5. 图片只存档,不进模型:下载下来的封面和正文图直接落位,不要用 Read 之类的读图能力打开看。图片进 API 会以 base64 文本计费,一张原图约十万 token,此后每轮请求都带着重发。确实要看图时,先跑 scripts/shrink.py 压小,一次最多两张。

流程

0. 带上浏览器 cookies

YouTube 现在会把无 cookies 的请求挡成机器人(报错 Sign in to confirm you're not a bot)。所有 yt-dlp 命令都加:

--cookies-from-browser chrome

换成 edge / firefox / safari 也行,用你本机登录过 YouTube 的那个浏览器。取不到 cookies 时先让使用者在那个浏览器里打开一次 YouTube 并登录。

1. 读视频信息

yt-dlp --cookies-from-browser chrome --skip-download --no-warnings --print "%(id)s|%(title)s|%(channel)s|%(view_count)s|%(duration_string)s|%(upload_date)s" "<链接>"

2. 取字幕

先看这个视频有哪些字幕:

yt-dlp --cookies-from-browser chrome --list-subs --skip-download "<链接>"

按优先级选:中文人工字幕 → 中文自动字幕 → 英文人工字幕 → 英文自动字幕。

# 中文字幕(zh-Hans / zh-CN / zh 按上一步列出的实际语言代码填)
yt-dlp --cookies-from-browser chrome --skip-download --write-auto-subs --write-subs \
  --sub-langs "zh-Hans,zh-CN,zh" --sub-format "vtt" \
  -o "<素材文件夹>/05_视频脚本.%(ext)s" "<链接>"

# 中文都没有时退回英文
yt-dlp --cookies-from-browser chrome --skip-download --write-auto-subs --write-subs \
  --sub-langs "en.*" --sub-format "vtt" \
  -o "<素材文件夹>/05_视频脚本.%(ext)s" "<链接>"

VTT 里带时间轴、&nbsp; 和自动字幕的滚动重复行。转逐字稿时去掉这些:删掉 --> 时间轴行、去掉 HTML 标签、把 &nbsp; 换成空格、丢掉与前一行完全相同的行。剩下的文字照抄,不改写、不顺句、不补标点——它是素材原文。

字幕是繁体(语言代码 zh-Hant,或内容为繁体)时,落 05 前转成简体(opencc 的 t2s,或让 AI 转):只转字形,不改用词。2026-09-15 实测:YouTube 中文自动字幕常只有 zh-Hant 一档,抓取时优先带上它。

字幕是自动生成时可能有误转词,在 05_视频脚本.md 里注明「自动字幕,可能含误转词」。

3. 建素材文件夹

先跑脚本把文件夹建出来(编号、去重、目录结构由脚本决定,不让 AI 数):

python3 "<本技能目录>/scripts/create_note_folder.py" \
  --platform YouTube --type 视频 \
  --id <视频ID> --title "<标题>" --author "<频道名>" \
  --published <YYYY-MM-DD> --url "<链接>"

返回 JSON 里的 folder 就是素材文件夹路径,后面所有文件都写进它。

4. 下载封面

yt-dlp --cookies-from-browser chrome --skip-download --write-thumbnail --convert-thumbnails jpg \
  -o "<素材文件夹>/01_原始素材/01-封面图/cover.%(ext)s" "<链接>"

4. 取评论(可选,要就要全)

yt-dlp --cookies-from-browser chrome --write-comments --skip-download \
  --extractor-args "youtube:comment_sort=top;max_comments=100,all,120" \
  -o "<临时目录>/comments" "<链接>"

产物是 comments.info.json,comments 字段里每条含 author(含 @ 前缀)/text/like_count。写进 02 的「评论」章节:按点赞取前 20 条(作者 / 内容 / 点赞数),略去上传者自评(author_is_uploader 为 true 的多是置顶广告或自荐)。抓不到评论(视频关闭评论等)就写明原因。

5. 写 02_内容信息.md

照 assets/内容信息模板.md 写。固定结构(简版,完整版看模板):

# <标题>

| 字段 | 内容 |
|------|------|
| 编号 | <三位编号> |
| 视频ID | <id> |
| 来源 | YouTube |
| 频道 | <频道名> |
| 播放量 | <数字>(<采集日期> 实测) |
| 点赞数 | <数字> |
| 评论数 | <数字> |
| 频道粉丝数 | <数字> |
| 时长 | <时长> |
| 发布时间 | <YYYY-MM-DD> |
| 原文链接 | <链接> |
| 入库时间 | <YYYY-MM-DD> |

---

## 视频简介

<简介原文;没有就写「无」>

## 标签

<yt-dlp 元信息里的 tags,逗号分隔;没有就写「无」>

## 评论

<按点赞取高赞前 20 条:作者 / 内容 / 点赞数;略去上传者自评;抓不到就写明原因>

## 章节

<视频自带章节,一行一条;没有就写「无」>

播放量必须来自本次实测,不沿用别处看到的数字。点赞数 / 评论数 / 频道粉丝数取自 yt-dlp 元信息里的 like_count / comment_count / channel_follower_count;取不到就写「未获取」。

6. 写 05_视频脚本.md

照 assets/视频脚本模板.md 写(统一标准,与小红书 / 视频号同一套)。固定结构:

# 视频脚本(<编号> · <标题>)

> 转录说明:<官方字幕 / 自动字幕(语言)> 转写,<日期>;自动字幕可能含误转词;繁体已转简(只转字形)。
> 原文照抄为主,修正处已在文末「修正说明」逐条列出。

---

## 一、<分段小标题:开场钩子 / 背景介绍 / 第一步… / 观点收尾>

<该段脚本原文照抄——最大化还原,不提炼、不压缩、不概括>

---

## 修正说明

| 原转写 | 修正为 | 说明 |
|---|---|---|

要点:05 是原文存档——分段小标题 + 原文照抄,中心思想/核心论点那类梳理归 04 管,不要写进 05。

7. 写结构化梳理

05_视频脚本.md 是原始素材,还要再出一份便于下游提炼规律的梳理件 04_文案结构化梳理.md(模板见 assets/文案结构化梳理模板.md):

# 文案结构化梳理

> 来源:<编号> <标题>([[05_视频脚本.md]])
> 梳理日期:<YYYY-MM-DD>
> 说明:本文件做结构化梳理:中心思想、核心论点、逐段梳理。总结保留原文的具体论据、数据与比喻——**写到「不读原文也能知道这段说了什么、能吸收这段的知识」**;完整原文见 05 号文件,本文件只做概括与归类,不改写、不新增原文没有的东西。

---

## 一、中心思想

<一段话说清这条视频主张什么:讲了什么、结论是什么、对谁说的。不评价、不引申>

一句话概括:**<原文里最有代表性的一句总结;原文没有就自己凝练一句,不加引号>**

## 二、核心论点(N 条)

1. **<论点>**:<展开,保留原文的数据、例子、比喻>
2. **<论点>**:<…>

## 三、逐段梳理

### <原文小标题(原文没有就按自然结构拟一个)>

**一句话总结**:<保留该段的核心主张 + 具体论据、数据、比喻、例子,写到不读原文也能知道这段说了什么;不整段照抄>

#### <原文小节里的子问题(有就保留,没有可省略这一层)>

**一句话总结**:<…>

### <下一段小标题>

**一句话总结**:<…>

## 四、结构规律提炼

<3-5 条,讲这条视频的骨架怎么搭的:几段式、每段承担什么、开头与结尾各做什么>

要点:梳理件里的每一句都要能追回 05 的原文;不新增视频里没有的数据或例子。

8. 完成后报告

报告:标题、频道、播放量、字幕来源(官方 / 自动 / 无)、落盘路径。有跳过或失败的项目一并说明。

采集完实际长这样

2026-09-12 实测两条,两种情形都遇到过:

有字幕的(Kevin Stratvert《Claude Skills Explained》,11:00,自动英文字幕):

对标内容采集/YouTube/
└── 002_Claude Skills Explained教程_Kevin Stratvert_wO8EboopboU/
    ├── 01_原始素材/01-封面图/cover.jpg
    ├── 02_内容信息.md      元信息表 + 视频简介 + 章节
    ├── 04_文案结构化梳理.md 中心思想 + 核心论点 + 逐段梳理 + 结构规律
    └── 05_视频脚本.md      核心观点 + 全文整理 + 文末逐字稿存档(214 行 / 约 1 万字)

逐字稿的头部:

# 视频脚本(结构化整理):Claude Skills Explained - Step-by-Step Tutorial for Beginners

> 来源:YouTube Kevin Stratvert(播放 364,436);转录:自动字幕,可能含误转词

---

## 一、核心观点

...

## 三、提取的文字(转录原文存档,逐句原样)

Move over ChatGPT, Claude just released Agent
Skills. That means you can add custom abilities
to Claude, Claude Desktop, and Claude Code.

没有字幕的(Nate Herk《I Deleted All My Claude Skills》,11:56,人工字幕和自动字幕都没有):

只落 01_原始素材/01-封面图/cover.jpg + 02_内容信息.md,05_视频脚本.md 不建。02_内容信息.md 里写明:

## 视频简介

<简介原文>

## 章节

无(该视频未提供字幕,无法转录逐字稿)

不要用简介冒充逐字稿,也不要用 AI 摘要顶替转写 —— 没有就是没有,写明比编出来有用。

约定(每条带来由与适用范围)

  1. 逐字稿照抄:字幕原文不改写、不润色、不补标点 适用与边界:字幕原文照抄,不因为「读着别扭」就改字。不适用:创作者自己写的正文——那是写作规范管的事,不是采集这一环。

  2. 数据实测:播放量来自本次 yt-dlp 输出,不估、不沿用 适用与边界:管播放量、时长这类本次能实测到的数。不适用:平台没提供的数(如完播率)——拿不到就写「未获取」,不估。

  3. 无字幕就说无字幕:不用 AI 摘要冒充转写,不用简介冒充逐字稿 适用与边界:没有例外——字幕拿不到就如实写,不许用 AI 摘要或视频简介顶替逐字稿。

  4. 去重靠视频 ID:同一视频不重复入库 适用与边界:管同一条视频重复丢进清单时。不适用:同一频道不同视频、同一视频的搬运版——视频 ID 不同,按新素材处理。

不做什么

  • 不识别链接属于哪个平台——那是编排器的事
  • 不建目录、不提规律、不沉淀卡片
  • 不跑归档 CSV——「已入库 ✓」标记由本技能写,归档由编排器批量采完后统一跑
  • 无字幕就不编内容——写明「无字幕」,不拿 AI 摘要顶替逐字稿

Resources