Video Summarizer(视频摘录+Notion存档)
by @ajayhao
将 B 站/YouTube/小红书/抖音视频转换为结构化 Notion 总结文档,自动上传截图,一键推送 Notion
clawhub install video-summarizer📖 About This Skill
name: video-summarizer description: "将 B 站/YouTube/小红书/抖音视频转换为结构化 Notion 总结文档,自动上传截图,一键推送 Notion" metadata: { "openclaw": { "emoji": "🎬", "requires": { "bins": ["ffmpeg (>=6.1)", "yt-dlp (>=2026.03.17)"], "env": ["DASHSCOPE_API_KEY", "ALIYUN_OSS_AK", "ALIYUN_OSS_SK", "ALIYUN_OSS_BUCKET_ID", "ALIYUN_OSS_ENDPOINT"] }, "install": [ { "id": "brew", "kind": "brew", "formula": "ffmpeg yt-dlp", "bins": ["ffmpeg", "yt-dlp"], "label": "Install ffmpeg and yt-dlp (brew)", }, { "id": "apt", "kind": "apt", "packages": "ffmpeg yt-dlp", "bins": ["ffmpeg", "yt-dlp"], "label": "Install ffmpeg and yt-dlp (apt)", }, { "id": "pip", "kind": "pip", "packages": "requests==2.31.0 oss2==2.18.4 python-dotenv==1.0.1 biliup==0.4.86", "label": "Install Python dependencies", }, ], }, }
Video Summarizer — OpenClaw Skill
将 B 站/YouTube/小红书/抖音视频转换为结构化 Notion 总结文档,自动上传截图,一键推送 Notion。
版本: 1.0.12 发布: 2026-05-06 许可: MIT 作者: Ajay Hao
> ⚠️ 安全提示 > - 本技能会将视频内容发送至第三方 AI 服务进行分析 > - 建议使用专用 API Key(非生产环境) > - OSS Bucket 请配置最小权限(仅写入/读取) > - B 站 Cookies 仅在你控制的设备上使用
📖 技能描述
核心能力
技术特性
🔐 安全与隐私说明
敏感数据处理
| 文件/路径 | 用途 | 敏感性 | 用户控制 |
|-----------|------|--------|----------|
| ~/.cookies/bilibili_cookies.txt | B 站官方字幕获取 | 高(Session Token) | 用户主动扫码生成,可随时删除 |
| ~/.openclaw/.env | API Keys 存储 | 高 | 用户自行配置,skill 不修改 |
| /tmp/video-summarizer-*/ | 临时输出 | 低 | 处理完成后可手动清理 |
外部服务端点
| 服务 | 域名 | 用途 | 传输数据 |
|------|------|------|----------|
| DashScope | dashscope.aliyuncs.com | AI 分析 | 字幕文本、元数据 |
| 阿里云 OSS | oss-cn-shanghai.aliyuncs.com | 图床上传 | 截图、封面图 |
| Groq | api.groq.com | 备用转录(可选,需代理) | 音频片段 |
| Bilibili | bilibili.com | 视频下载/字幕 | 无(仅下载) |
| YouTube | youtube.com | 视频下载/字幕 | 无(仅下载) |
| 抖音 | douyin.com / iesdouyin.com | 视频下载 | 无(仅下载) |
说明:
douyin_downloader.py 已移除硅基流动依赖,使用与主流程一致的 Groq API + 本地降级方案最小权限建议
⚠️ 数据流向提醒
~/.cookies/bilibili_cookies.txt,权限已限制为 600,仅限本机访问cookies.json 会自动清理,不残留 skill 目录内🎯 平台支持详情
Bilibili(完整支持)
字幕: ✅ 官方字幕 + 自动字幕 语音转录: ✅ 支持(Plan B) Cookies: 推荐(获取官方字幕) 下载工具: yt-dlp (>=2026.03.17)
#### 操作步骤
# 1. 扫码登录(首次使用,获取官方字幕)
cd ~/.openclaw/skills/video-summarizer/scripts
./bili-login.sh2. 处理视频
./video-summarize.sh "https://www.bilibili.com/video/BV1xxxx"3. 查看结果
cat /tmp/video-summarizer-*/summary.md
说明:
~/.cookies/bilibili_cookies.txtYouTube(完整支持)
字幕: ✅ 自动字幕(多语言) 语音转录: ✅ 支持(Plan B) Cookies: ❌ 不需要 下载工具: yt-dlp (>=2026.03.17)
#### 操作步骤
# 直接处理(无需登录)
./video-summarize.sh "https://www.youtube.com/watch?v=dQw4w9WgXcQ"指定输出目录
./video-summarize.sh "https://youtu.be/dQw4w9WgXcQ" /tmp/output
说明:
小红书(基本支持)
字幕: ❌ 无字幕 语音转录: ✅ 唯一方式(Plan B) Cookies: ❌ 不需要 下载工具: yt-dlp (>=2026.03.17)
#### 操作步骤
# 直接处理(自动使用 Plan B 语音转录)
./video-summarize.sh "https://www.xiaohongshu.com/explore/xxxx"或短链
./video-summarize.sh "https://xhslink.com/o/xxxx"
说明:
抖音(完整支持)
字幕: ❌ 无字幕 语音转录: ✅ 唯一方式(Plan B) Cookies: ❌ 不需要(专用下载器) 下载工具: douyin_downloader.py
#### 操作步骤
# 直接处理(专用下载器,无需 Cookies)
./video-summarize.sh "https://www.douyin.com/video/7234567890"支持短链
./video-summarize.sh "https://v.douyin.com/abc123/"
说明:
douyin_downloader.py(仅用于获取元数据和下载视频)transcribe-audio.py(Groq API + 本地降级)douyin_downloader.py 的 extract 模式已移除硅基流动依赖,改用 Groq API + 本地降级⚙️ 配置详解
环境变量(~/.openclaw/.env)
# ========== 必需配置 ==========阿里云 OSS 图床
ALIYUN_OSS_AK=your_access_key_id
ALIYUN_OSS_SK=your_access_key_secret
ALIYUN_OSS_BUCKET_ID=your_bucket_name
ALIYUN_OSS_ENDPOINT=oss-cn-shanghai.aliyuncs.comAI 分析(DashScope API)
DASHSCOPE_API_KEY=========== 可选配置 ==========
Notion 自动推送(可选)
NOTION_API_KEY=
NOTION_VIDEO_SUMMARY_DATABASE_ID= # 单个数据库 ID语音转录加速(Groq API,可选)
国内需代理访问,如未配置自动降级到本地 Faster-Whisper
不配置此项不影响使用
注意:douyin_downloader.py 也使用此变量(已移除硅基流动依赖)
GROQ_API_KEY=本地 Whisper 模型(有 GPU 时自动检测)
WHISPER_MODEL=base # tiny/base/small/medium/large
OSS Bucket 要求
Notion 数据库配置
#### 数据库属性(Properties)
| 属性名 | 类型 | 说明 | 来源 |
|--------|------|------|------|
| Title | title | 视频标题(≤200 字符) | Markdown # 标题 |
| Source | rich_text | 平台来源(Bilibili/YouTube/小红书/抖音) | metadata.platform / URL 推断 |
| Author | rich_text | UP 主/作者名称 | Markdown UP 主: / metadata.uploader |
| Url | url | 视频原始链接 | metadata.webpage_url / Markdown 链接: |
| Tags | multi_select | 标签(最多 5 个) | 三层策略提取 |
| PubDate | date | 发布日期 | metadata.upload_date |
| Length | rich_text | 视频时长(MM:SS 格式) | metadata.duration_string |
| Cover | files | 封面图片(可选,外部 URL) | metadata.thumbnail |
| ts | date | 创建时间戳(ISO 8601,东八区 +08:00) | 当前时间 |
#### 配置步骤
1. 创建数据库(Table 视图)
2. 添加上述 9 个属性(字段名必须完全匹配)
3. 获取 Database ID:
- 打开数据库 → 复制 URL 中 ?v= 后的 ID
- 示例:https://notion.so/your-workspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
- Database ID = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
4. 配置环境变量:
NOTION_API_KEY=
NOTION_VIDEO_SUMMARY_DATABASE_ID= # 单个数据库
#### 数据库视图示例
┌─────────┬──────────┬─────────┬──────┬──────┬─────────┬────────┬───────┬─────────────┐
│ Title │ Source │ Author │ Url │ Tags │ PubDate │ Length │ Cover │ ts │
│ title │ text │ text │ url │ multi│ date │ text │ files │ date │
└─────────┴──────────┴─────────┴──────┴──────┴─────────┴────────┴───────┴─────────────┘
🏗️ 系统架构
处理流程
用户输入 (视频 URL)
↓
Step 1: 平台识别 + 元数据
↓
┌──────┴──────┐
↓ ↓
Step 2: 字幕 Step 3: 视频下载 ← 并行执行
↓ ↓
└──────┬──────┘
↓
Step 4: 文本提取 (VTT → TXT / Plan B 转录)
↓
Step 5: AI 分析 (DashScope API - qwen3.5-plus,可通过 DASHSCOPE_MODEL 环境变量覆盖)
↓
Step 6: 截图生成 (ffmpeg, 基于 AI 时间戳)
↓
Step 7: OSS 上传 (截图 + 封面)
↓
Step 8: Markdown 渲染
↓
Step 9: Notion 推送 (可选)
技术栈
| 层级 | 技术 |
|------|------|
| 编排层 | Bash (video-summarize.sh) |
| 分析层 | Python + DashScope API (qwen3.5-plus,可通过 DASHSCOPE_MODEL 环境变量覆盖) |
| 转录层 | Groq API (可选) / Faster-Whisper (本地) |
| 工具层 | yt-dlp (>=2026.03.17), ffmpeg (>=6.1), oss2, requests |
数据文件
| 文件 | 来源 | 用途 |
|------|------|------|
| metadata.json | yt-dlp / douyin_downloader | 视频元数据 |
| transcript.txt | VTT 提取 / Plan B 转录 | 纯文本字幕 |
| ai_result.json | analyze-subtitles-ai.py | AI 分析结果 |
| screenshot_urls.txt | upload-to-oss.py | 截图 OSS 链接 |
| summary.md | analyze-subtitles-ai.py | 最终总结 |
📋 脚本清单
核心脚本(4 个)
| 脚本 | 功能 |
|------|------|
| video-summarize.sh | 主流程编排(Plan A/B 自动选择) |
| analyze-subtitles-ai.py | AI 分析 + Markdown 渲染 |
| upload-to-oss.py | OSS 图床上传(截图 + 封面) |
| push-to-notion.py | Notion 推送(优先使用环境变量 NOTION_VIDEO_SUMMARY_DATABASE_ID,其次 CLI 参数) |
平台工具(2 个)
| 脚本 | 功能 |
|------|------|
| bili-login.sh | B 站扫码登录(获取 Cookies) |
| douyin_downloader.py | 抖音专用下载器(无需 Cookies,info/download 操作无需 API;extract 模式使用 Groq API + 本地降级转录音频) |
辅助工具(4 个)
| 脚本 | 功能 |
|------|------|
| download-audio.sh | Plan B: 音频下载 |
| transcribe-audio.py | Plan B: 语音转录(GPU 自适应) |
| check-config.sh | 配置检查 |
| convert-bili-cookie.py | Cookies 格式转换 |
🎯 Plan A vs Plan B
对比表
| 项目 | Plan A | Plan B | |------|--------|--------| | 字幕来源 | 平台官方字幕 | 语音转录 | | 准确率 | 90%+ | 80-90% | | 速度 | 快 (1-2 分钟) | 较慢 (3-5 分钟) | | 依赖 | Cookies(B 站) | GPU 或 API Key |
各平台使用情况
| 平台 | Plan A | Plan B | 默认 | |------|--------|--------|------| | Bilibili | ✅ 官方 + 自动 | ✅ 备用 | Plan A | | YouTube | ✅ 自动字幕 | ✅ 备用 | Plan A | | 小红书 | ❌ 无 | ✅ 唯一 | Plan B | | 抖音 | ❌ 无 | ✅ 唯一 | Plan B |
Plan B 三层降级方案
1. Groq API (whisper-large-v3) → 云端高速(可选,需配置 GROQ_API_KEY 且网络可达)
└─ 失败/未配置 → 降级到本地2. Faster-Whisper (本地) → GPU/CPU 自适应
├─ GPU ≥8GB → large-v2 模型
├─ GPU ≥4GB → medium 模型
├─ GPU ≥2GB → small 模型
├─ GPU ≥1GB → base 模型 (GPU)
└─ 无 GPU → base 模型 (CPU)
└─ 失败 → 降级到方案 3
3. Whisper.cpp / OpenAI Whisper (本地保底)
└─ 完全离线,作为最终兜底
说明:
douyin_downloader.py 也使用 Groq API + 本地降级方案(已移除硅基流动依赖),extract 模式用于音频转录📁 输出文件结构
output/
├── summary.md # 📝 最终总结(主要成果)
├── ai_result.json # 🧠 AI 分析原始结果(结构化 JSON)
├── screenshot_urls.txt # 🔗 截图 OSS 链接
├── metadata.json # 📊 视频元数据
├── transcript.txt # 📄 纯文本字幕
├── audio.txt # 🎤 语音转录原始文本(Plan B 时使用)
├── cover_url.txt # ☁️ 封面 OSS 上传结果
├── screenshot_times.txt # ⏱️ 截图时间戳记录
├── screenshots/ # 📸 截图原图(本地备份)
├── cover.jpg # 🖼️ 封面图(本地备份)
└── *.log # 📋 日志文件(verbose 模式)
OSS 路径规范
截图路径: /screenshots/<平台>/<视频 ID>_<时间戳>/<截图文件>
screenshots/bilibili/BV1eTPEzNEqf_20260405_053203/screenshot_01.jpg
screenshots/douyin/7234567890_20260405_175010/chapter_01.jpg
screenshots/xhs/69c1493b000000002003b3ce_20260405_152852/screenshot_01.jpg
screenshots/youtube/dQw4w9WgXcQ_20260405_120000/screenshot_01.jpg
封面路径: thumbnails/<平台>/<视频 ID>/cover.jpg
thumbnails/bilibili/BV1eTPEzNEqf/cover.jpg
thumbnails/douyin/7234567890/cover.jpg
🏷️ 标签策略
四层提取策略
1. 标题 hashtag → #([\w\u4e00-\u9fa5]+)
示例:"#AI 教程 #大模型原理" → ["AI 教程", "大模型原理"]2. 元数据 tags → yt-dlp 提取的原始标签
示例:["原理", "AI", "教程", "claude", "大模型"]
3. AI 关键词 → AI 分析提取的核心概念
示例:["Transformer", "注意力机制", "深度学习"]
4. 默认值 → 视频总结/知识分享/学习
当前三层都为空时使用
标签规则
🔧 故障排查
Cookies 过期(B 站)
# 重新扫码登录
./bili-login.sh
配置检查
# 运行检查脚本
./check-config.sh
查看详细日志
# 使用 verbose 模式
./video-summarize.sh "URL" --verbose查看错误日志
cat /tmp/output/error.log
常见问题
| 问题 | 原因 | 解决方案 |
|------|------|----------|
| 截图 404 | OSS 路径不匹配 | python3 upload-to-oss.py auto /tmp/output |
| 标签默认值 | 标签提取失败 | 检查标题 hashtag 格式 #标签 |
| 转录失败 | 无 GPU/API 配额 | 检查 GROQ_API_KEY,或确保 faster-whisper 已安装 |
| Notion 推送失败 | API Key 过期 | 更新 NOTION_API_KEY(可选功能,仅 --push 需要) |
| 并行任务失败 | 依赖缺失 | 检查 ffmpeg / yt-dlp 安装(版本要求:ffmpeg >= 6.1, yt-dlp >= 2026.03.17) |
| 抖音下载失败 | 链接格式错误 | 使用完整 URL 或 v.douyin.com 短链 |
| 抖音文案提取失败 | 无 API Key | douyin_downloader.py 会自动降级到本地 Faster-Whisper,无需单独配置 |
📊 性能基准
处理时间(10 分钟视频)
| 平台 | Plan A | Plan B(本地) | Plan B(Groq) | |------|--------|----------------|----------------| | Bilibili | ~90 秒 | ~150 秒 | ~120 秒 | | YouTube | ~90 秒 | ~150 秒 | ~120 秒 | | 小红书 | - | ~150 秒 | ~120 秒 | | 抖音 | - | ~150 秒 | ~120 秒 |
优化效果: 并行优化后节省约 30 秒(32%↓)
📝 输出格式(summary.md)
1. 标题 + Tags + Author 2. 📝 Note — AI 概述(150-250 字) 3. 📺 视频信息 — 链接/时长/播放数据 4. 📚 关键概念 — 术语表格(3-5 个,按时间排序) 5. 🎯 核心要点 — emoji+ 描述 + 时间戳(5-8 个) 6. 🎬 视频章节 — 标题 + 时间轴 + 截图 7. ⚠️ 注意事项 — 特别提醒(2-4 个) 8. 💡 总结 — AI 归纳(200-300 字)
🔜 后续优化
计划中
📞 更多文档
维护人: Ajay Hao 项目地址: https://github.com/AjayHao/video-summarizer OpenClaw Skill: 已发布到 clawdhub
📋 Tips & Best Practices
| 问题 | 原因 | 解决方案 |
|------|------|----------|
| 截图 404 | OSS 路径不匹配 | python3 upload-to-oss.py auto /tmp/output |
| 标签默认值 | 标签提取失败 | 检查标题 hashtag 格式 #标签 |
| 转录失败 | 无 GPU/API 配额 | 检查 GROQ_API_KEY,或确保 faster-whisper 已安装 |
| Notion 推送失败 | API Key 过期 | 更新 NOTION_API_KEY(可选功能,仅 --push 需要) |
| 并行任务失败 | 依赖缺失 | 检查 ffmpeg / yt-dlp 安装(版本要求:ffmpeg >= 6.1, yt-dlp >= 2026.03.17) |
| 抖音下载失败 | 链接格式错误 | 使用完整 URL 或 v.douyin.com 短链 |
| 抖音文案提取失败 | 无 API Key | douyin_downloader.py 会自动降级到本地 Faster-Whisper,无需单独配置 |