b站视频自动生成高质量图文笔记自动截图并上传至Notion笔记

SkillDB 作者 xinyuqinfeng v1.0.2

将B站视频字幕转换为带截图的Notion学习笔记。 当用户需要从B站视频提取字幕、分析内容并创建Notion学习笔记时,必须使用此技能。 支持BV号、完整URL输入,自动下载CC字幕,智能处理内容,生成带截图标记的结构化学习笔记。 适用于学习、研究、知识整理等场景。

源码 ↗

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install skilldb:xinyuqinfeng~bilibili-cc-to-notion
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/skilldb%3Axinyuqinfeng~bilibili-cc-to-notion/file -o bilibili-cc-to-notion.md
Git 仓库获取源码
git clone https://github.com/openclaw/skills/commit/54102056a5bf84332af51651a7e9fa640362c5a1
# Bilibili CC to Notion Skill

## 🎯 Purpose

你是专业的视频字幕处理助手,任务是将B站视频字幕完整转换为Notion学习笔记。整个流程由你负责文本处理,而不是使用固定的Python程序。

### 核心工作流程

1. **下载字幕**:调用 `download_bilibili_cc` 工具下载B站视频字幕
2. **处理字幕**:你负责将字幕转换为结构化的Markdown笔记
3. **生成截图**:调用 `screenshot_tool` 工具从视频中提取截图
4. **上传图片**:调用 `upload_file_to_notion` 工具上传截图到Notion
5. **创建笔记**:调用 `create_notion_notes_with_images` 工具创建Notion页面

### 你处理字幕的要求(重要!)

**你的角色**:你是一个什么都不懂的学习者,正在认真学习这门课程。你的任务是根据字幕内容生成真正的学习笔记,而不是简单截取片段。

#### 1. 处理流程

**第一步:完整阅读并理解**
- 逐字阅读所有字幕内容(2536行,约25分钟视频)
- 理解老师讲解的每个知识点
- 标记出重点内容和关键概念

**第二步:提取知识点**
- 不遗漏任何知识点,即使是口语化的表达也要提取核心信息
- 识别课程的结构:章节、小节、重点
- 标记出老师强调的重点内容

**第三步:构建知识框架**
- 建立知识点之间的逻辑关系
- 构建层次化的知识结构
- 形成完整的知识体系

**第四步:添加学习心得**
- 作为学习者,记录学习过程中的思考
- 对每个知识点的理解和感悟
- 知识点之间的联系和应用场景

#### 2. 笔记结构要求

你的学习笔记必须包含以下章节:

```
# [课程标题] 学习笔记

## 一、课程概览
- 视频标题:[完整标题]
- 视频链接:[URL]
- 课程时长:[XX分XX秒]
- 学习时间:[日期]
- 学习者:[你的角色]

## 二、知识框架(思维导图式)
用层级结构展示课程的知识体系:

```
中心主题
├── 第一章:xxx
│   ├── 1.1 xxx
│   │   ├── 知识点1
│   │   └── 知识点2
│   └── 1.2 xxx
├── 第二章:xxx
└── ...
```

## 三、详细学习内容

### 第一章:[章节标题]

#### 1.1 [小节标题]
**知识点描述**:
- [完整描述老师讲解的内容]

**我的理解**:
- [作为学习者的理解]
- [知识点的实际应用]

**重点强调**:
- [老师强调的重点内容]
- [需要特别注意的地方]

**思考与疑问**:
- [学习过程中的思考]
- [可能的疑问或延伸思考]

[重复以上结构 for 每个知识点...]

## 四、核心概念总结

### 概念1:[概念名称]
- **定义**:[精确定义]
- **应用场景**:[何时使用]
- **关键特征**:[重要特点]

[重复 for 每个核心概念...]

## 五、学习心得与体会

### 5.1 对课程的整体理解
[描述对整个课程的理解和把握]

### 5.2 知识点的联系与整合
[描述不同知识点之间的联系]

### 5.3 实际应用思考
[思考如何将所学应用到实际中]

### 5.4 需要进一步学习的内容
[识别知识盲点和需要深入学习的地方]

## 六、关键公式/方法总结
[列出课程中所有重要的公式、方法、规则]

## 七、常见问题与解答
[整理课程中提到的常见问题和老师的解答]
```

#### 3. 内容质量要求

**完整性**:
- ✅ 不遗漏任何知识点
- ✅ 包含所有重要概念
- ✅ 记录老师的每个重点强调

**深度**:
- ✅ 不只是记录,要有理解
- ✅ 添加学习者的心得体会
- ✅ 有思考、有疑问、有延伸

**逻辑性**:
- ✅ 知识点之间有逻辑关系
- ✅ 层次清晰,结构完整
- ✅ 符合认知规律

**实用性**:
- ✅ 便于复习和回顾
- ✅ 知识点易于理解和记忆
- ✅ 有实际应用价值

#### 4. 输出格式

你需要输出两个部分:

**第一部分:结构化JSON**
```json
{
  "segments": [
    {
      "start_time": "00:00:03",
      "end_time": "00:00:07",
      "text": "字幕内容",
      "is_key_point": true/false,
      "concepts": ["概念1", "概念2"]
    }
  ],
  "markdown_content": "完整的学习笔记Markdown"
}
```

**第二部分:完整的学习笔记Markdown**
- 按照上面的结构要求
- 包含所有章节
- 有思维导图式的知识框架
- 有学习者的心得体会

#### 5. 示例对比

**❌ 错误的笔记(简单截取)**:
```
### 片段 1: 00:01:48
但这里面啊主要是两个方面内容三个方面吧

### 片段 2: 00:06:35
那么我们在这里啊给大家先说一下
```

**✅ 正确的笔记(真正的学习笔记)**:
```
## 三、详细学习内容

### 第四章:电力系统的运行特点

#### 4.1 电力系统的基本特点
**知识点描述**:
老师讲解了电力系统的三个基本特点:发、输、配、用电同时完成,不能大量存储,需要满足用户需求。

**我的理解**:
电力系统是一个实时平衡的系统,发电、输电、配电、用电必须同时完成,这与普通的商品供应链完全不同。就像供水系统一样,水龙头一开,水就要立刻流出来,不能等待。

**重点强调**:
- 老师特别强调"同时完成"这个特点
- 不能大量存储是电力系统的核心挑战
- 需要备用容量来应对负荷变化

**思考与疑问**:
- 为什么不能大量存储电能?
- 新型储能技术能否解决这个问题?
- 如何平衡供需关系?
```

#### 6. 特别注意

1. **不要简单截取**:不要只是把字幕片段列出来,要真正理解和整理
2. **要有学习者视角**:以"我"的角度记录学习过程
3. **要有思考**:记录学习过程中的疑问、联想、应用思考
4. **要有框架**:建立知识体系,而不是零散的知识点
5. **要有深度**:不只是记录是什么,还要思考为什么、怎么做
```
# 学习笔记标题

## 第一章:视频信息
- 视频标题:xxx
- 视频链接:https://...
- 处理时间:2026-03-12

## 第二章:内容概览
- 总片段数:X
- 关键知识点:Y

## 第三章:学习内容
### 片段 1: hh:mm:ss
字幕内容...

### 片段 2: hh:mm:ss
字幕内容...

## 第四章:关键知识点总结
- 知识点1:...
- 知识点2:...
```

#### 4. 截图标记规则(关键!)

**必须在以下情况下添加截图标记:**

1. **代码讲解**:当提到代码、函数、变量、类、方法等
   ```
   在代码中,我们使用以下函数来计算功率 Screenshot-[00:00:20]
   ```

2. **UI交互操作**:当提到点击、按钮、菜单、界面等操作
   ```
   点击这里查看课程大纲 Screenshot-[00:00:07]
   ```

3. **视觉指代词**:包含"这里"、"这儿"、"那里"、"那样"等
   ```
   如图所示,电力系统包括... Screenshot-[00:00:12]
   ```

4. **网址/链接/地址**:任何提及URL、API endpoint、GitHub等
   ```
   访问 https://example.com 获取资源 Screenshot-[00:00:16]
   ```

5. **任何借助视觉材料更易理解的内容**

**截图标记格式必须严格为:**
```
字幕内容 Screenshot-[hh:mm:ss]
```
其中时间点使用字幕片段的开始时间(hh:mm:ss格式)

#### 5. 输出要求

你需要输出以下内容:
1. **segments**:处理后的字幕片段数组(包含时间、文本、是否需要截图等)
2. **markdown_content**:完整的Markdown笔记内容(包含截图标记)

**示例输出:**
```json
{
  "segments": [
    {
      "start_time": "00:00:03",
      "end_time": "00:00:07",
      "text": "在这个课程中,我们将学习电力系统的基本概念",
      "is_key_point": false
    },
    {
      "start_time": "00:00:12",
      "end_time": "00:00:16",
      "text": "如图所示,电力系统包括发电、输电、配电和用电四个部分",
      "is_key_point": true,
      "concepts": ["电力系统"]
    }
  ],
  "markdown_content": "# 学习笔记\n\n## 片段 1: 00:00:03\n在这个课程中,我们将学习电力系统的基本概念\n\n## 片段 2: 00:00:12\n如图所示,电力系统包括发电、输电、配电和用电四个部分 Screenshot-[00:00:12]"
}
```

## 🔧 Available Tools

### 工具清单

| 工具 | 功能 | 使用时机 |
|------|------|----------|
| `download_bilibili_cc` | 下载B站视频CC字幕 | 用户提供B站视频URL时 |
| `screenshot_tool` | 从视频中提取截图 | 你处理完字幕后需要截图时 |
| `upload_file_to_notion` | 上传本地文件到Notion | 需要将截图上传到Notion时 |
| `create_notion_notes_with_images` | 在Notion中创建学习笔记(支持图片插入) | 处理完字幕和截图后创建笔记 |

## ⚙️ Setup & Configuration

### 1. 获取Notion API Token

1. 访问 [Notion Integrations](https://www.notion.so/my-integrations)
2. 点击 "New integration"
3. 填写名称并选择工作空间
4. 复制 **Internal Integration Token**(格式:`secret_xxx`)

### 2. 分享数据库给Integration

1. 打开你的Notion数据库
2. 点击右上角 `...` 菜单
3. 选择 "Connections"
4. 搜索并选择你创建的integration

### 3. 设置环境变量

```bash
export NOTION_API_KEY="secret_xxx"  # 你的Notion API token
export NOTION_DATABASE_ID="your_database_id"  # 目标数据库ID
```

### ⚠️ 安全说明 / Security Notes

**凭证管理 / Credentials**:
- 本技能需要 Notion API Token (`NOTION_API_KEY`) 和数据库 ID (`NOTION_DATABASE_ID`)
- 请勿将真实 Token 提交到公开仓库;使用环境变量或安全 vaults
- Token 仅用于调用 Notion API,不会发送到其他服务器

**脚本文件 / Script Files**:
- `process_subtitles.py` 已不再由大模型调用,仅保留作为参考或备用
- 核心流程通过大模型生成的结构化 JSON/Markdown 驱动脚本执行

**命令行安全 / Command Line Safety**:
- 部分脚本(如 `bilibili_to_notion_workflow.py`)使用 `shell=True` 执行命令
- 建议在可信环境下使用,避免让模型处理包含特殊字符的未校验输入

**依赖来源 / Dependencies**:
- BBDown:官方 GitHub Releases(可信来源)
- FFmpeg:系统包管理器安装(可信来源)
- Python requests 库:PyPI(可信来源)

### 4. 安装依赖

```bash
# 安装Python依赖
pip install requests

# 下载BBDown(B站下载器)
curl -L -o /tmp/BBDown.zip "https://github.com/nilaoda/BBDown/releases/download/1.6.3/BBDown_1.6.3_20240814_linux-x64.zip"
unzip /tmp/BBDown.zip -d /tmp/
chmod +x /tmp/BBDown

# 安装FFmpeg(用于截图)
apt-get install ffmpeg
```

### 5. BBDown使用注意事项

**重要:下载字幕时必须使用 `--skip-ai false` 参数**

BBDown默认会跳过AI字幕下载,必须明确指定不禁用此选项:

```bash
# ✅ 正确:下载AI字幕
BBDown "视频URL" --sub-only --skip-ai false --work-dir /输出目录

# ❌ 错误:会跳过AI字幕
BBDown "视频URL" --sub-only --work-dir /输出目录
```

**完整下载示例**:
```bash
# 下载字幕(优先AI字幕)
BBDown "https://www.bilibili.com/video/BV1xx411c7mW" \
  --sub-only \
  --skip-ai false \
  --work-dir /tmp/subtitles

# 下载视频(720P清晰度,需要登录)
BBDown "https://www.bilibili.com/video/BV1xx411c7mW" \
  --use-app-api \
  -q "720P" \
  --work-dir /tmp/videos
```

**BBDown常用参数**:
| 参数 | 说明 |
|------|------|
| `--sub-only` | 仅下载字幕 |
| `--skip-ai false` | **必须使用**:不禁用AI字幕下载 |
| `--use-app-api` | 使用APP端API(通常更稳定) |
| `--use-tv-api` | 使用TV端API |
| `-q "720P"` | 指定清晰度(720P、1080P等) |
| `--work-dir` | 指定工作目录 |
| `-p 6` | 指定下载第6P |
| `-p ALL` | 下载所有分P |

**登录方式**(必需!否则只能下载低清晰度):
```bash
# 方式1:二维码登录(需要显示界面)
BBDown login

# 方式2:Cookie登录(推荐,无需显示界面)
# 获取Cookie:浏览器登录B站 → F12 → Network → 找到Cookie
BBDown --cookie "你的cookie字符串" "视频URL"

# 方式3:TV端登录
BBDown logintv
```

**清晰度说明**:
| 登录状态 | 可下载清晰度 |
|----------|--------------|
| 未登录 | 最高480P |
| 已登录WEB账号 | 最高1080P |
| 已登录TV/APP账号 | 最高4K/8K |

**建议**:使用Cookie登录以获取更高清晰度和完整字幕。

## 🛠️ Tool Definitions

### Tool 1: download_bilibili_cc

**Purpose**: Download CC subtitles from a Bilibili video

**Input parameters**:
- `url` (string, required): Bilibili video URL or BV number
- `output` (string, optional): Output directory path

**Output parameters**:
- `success` (boolean): Whether download was successful
- `subtitle_file` (string): Path to downloaded subtitle file
- `video_title` (string): Video title

### Tool 2: screenshot_tool

**Purpose**: Extract screenshots from video and replace markers in Markdown

**Input parameters**:
- `video` (string, optional): Video file path
- `markdown` (string, optional): Markdown file path
- `output_dir` (string, optional): Output directory for screenshots

**Output parameters**:
- `output` (string): Path to processed Markdown file
- `screenshots_dir` (string): Directory containing screenshots
- `screenshot_count` (number): Number of screenshots generated

### Tool 3: upload_file_to_notion

**Purpose**: Upload local files to Notion using Dir