用途
该技能用于转写并总结视频内容,通过运行 python -m summarizer 命令行工具来完成任务。它处理 YouTube(字幕或音频)、本地文件、Google Drive 和 Dropbox 来源。转写文本被分块,通过兼容 OpenAI 的 LLM 提供商并行处理,并合并为最终摘要。
重要提示:始终使用 CLI 命令,不要尝试直接抓取、爬取或下载视频 URL(例如使用 webfetch 或 curl)。CLI 内部处理所有下载、转写和总结工作。
快速开始(三步)
第 1 步——运行 CLI:
python -m summarizer --source "VIDEO_URL"
该工具使用 summarizer.yaml 中的默认提供商(已配置好)。基本用法无需额外参数。
第 2 步——读取输出文件: CLI 成功后会打印输出文件名,文件始终保存在相对于项目工作目录的 summaries/ 子目录中。例如:
[+] Saved watch_20260207_234533.md
要读取的完整路径为:summaries/watch_20260207_234533.md
第 3 步——向用户展示结果。
文件位置
所有路径均相对于项目工作目录(即 summarizer.yaml 和 setup.py 所在位置)。
- 配置:./summarizer.yaml
- API 密钥:./.env
- 提示模板:./summarizer/prompts.json
- 输出摘要:./summaries/<filename>.md
- CLI 入口:python -m summarizer
不要在用户家目录或技能目录中查找 .env 或配置文件,它们在项目根目录。
CLI 参考
python -m summarizer [OPTIONS]
必需参数:
- --source:一个或多个视频 URL 或文件路径
提供商选项:
- --provider:summarizer.yaml 中命名的提供商,默认为 YAML 中的 default_provider
- --base-url:API 端点 URL(覆盖提供商),默认来自 YAML
- --model:模型标识符(覆盖提供商),默认来自 YAML
- --api-key:API 密钥(覆盖 .env 自动匹配),默认从 .env 自动获取
来源选项:
- --type:YouTube Video、Video URL、Local File、Google Drive Video Link、Dropbox Video Link,默认 YouTube Video
- --force-download:跳过 YouTube 字幕,改为下载音频,默认 False
- --transcription:Cloud Whisper (Groq API) 或 Local Whisper,默认 Cloud Whisper
- --whisper-model:tiny、base、small、medium、large,默认 tiny
- --language:auto 会选择第一个可用的 YouTube 字幕轨道,并让 Whisper 检测语言;显式代码则严格使用,默认 auto
处理选项:
- --prompt-type:摘要风格(见下文)
- --chunk-size:每段文本的字符数
- --parallel-calls:并发 API 请求数,默认 30
- --max-tokens:每块最大输出 token 数,默认 4096
输出选项:
- --output-dir:保存摘要的目录,默认 summaries
- --output-format:markdown、json 或 html,默认 markdown
- --no-save:只打印到标准输出,不保存文件,默认 False
- --verbose, -v:详细进度输出,默认 False
警告:不要在 Windows 上使用 --no-save。存在已知编码缺陷,摘要中的 Unicode 字符会导致标准输出崩溃。始终让工具保存到文件,然后读取文件。
配置选项:
- --config:配置文件路径(默认自动检测)
- --no-config:忽略配置文件,仅使用 CLI 参数
- --init-config:生成示例 summarizer.yaml 并退出
摘要风格
配合 --prompt-type 使用。定义在 summarizer/prompts.json 中。
- Questions and answers:从内容中提取问答
- Summarization:带标题的标准总结
- Distill Wisdom:提取想法、引用和参考
- DNA Extractor:核心真相提炼,最多 200 字
- Fact Checker:用 TRUE/FALSE/MISLEADING 标签验证主张
- Tutorial:从内容中提取分步说明
- Research:结合更广泛背景进行深度分析
- Reflections:超出所述内容进行哲学延伸
- Mermaid Diagram:以 Mermaid.js 语法生成可视化概念图
- Essay Writing in Paul Graham Style:以 Paul Graham 风格写 250 字文章
- Only grammar correction with highlights:语法清理并用粗体高亮
示例
总结 YouTube 视频(最简形式):
python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID"
指定提供商:
python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID" --provider gemini
用 Distill Wisdom 提取关键见解:
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--provider openrouter \
--prompt-type "Distill Wisdom"
用 Perplexity 核查视频主张:
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--base-url "https://api.perplexity.ai" \
--model "sonar-pro" \
--prompt-type "Fact Checker"
从讲座生成 Mermaid 图表:
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--provider gemini \
--prompt-type "Mermaid Diagram"
总结本地文件:
python -m summarizer \
--type "Local File" \
--source "./lecture.mp4" \
--provider groq
批量处理多个视频:
python -m summarizer \
--source "URL1" "URL2" "URL3" \
--provider gemini \
--prompt-type "Summarization"
不带配置文件使用(所有参数显式指定):
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--base-url "https://openrouter.ai/api/v1" \
--model "google/gemini-2.0-flash-exp:free" \
--api-key "sk-or-v1-YOUR_KEY" \
--prompt-type "Tutorial" \
--no-config
读取输出
运行 CLI 后,始终从 summaries/ 读取输出文件:
# CLI 会打印类似内容:
# [+] Saved watch_20260207_234533.md
#
# 文件位于:
summaries/watch_20260207_234533.md
对完整路径使用 Read 工具:summaries/<filename>(相对于项目根目录)。
多步工作流
如需全面分析,可在同一视频上串联多种风格:
- 先用 Summarization 获得快速概览
- 用 Distill Wisdom 提取关键见解
- 运行 Fact Checker(最好配合 Perplexity)验证主张
- 生成 Mermaid Diagram 作为可视化参考
错误处理
- 如果找不到 API 密钥,工具会在 .env 中查找与提供商 URL 关键词匹配的密钥
- 如果 YouTube 字幕不可用,工具会回退到下载音频 + Whisper 转写
- --language auto 不会强制英语。它使用第一个可用的 YouTube 字幕轨道,并让 Whisper 检测语言
- 使用 --verbose 查看详细进度并调试问题
- Cloud Whisper 需要 Groq API 密钥(有免费额度)
配置文件
均位于项目工作目录:
- summarizer.yaml:提供商定义(base_url、model、chunk-size)和默认值
- .env:API 密钥,按 URL 关键词自动匹配(例如 generativelanguage = YOUR_KEY)
- summarizer/prompts.json:使用 {text} 作为转写占位符的提示模板
测试
python -m pytest tests/ -v