Vibe Coding 课程-干货集训
自动总结长视频并生成口播稿
实操流程
下载项目开发文档
youtube-insight-dashboard-spec-complete.md下载新建项目
- 打开vs code或其他IDE
- 点击「New File...」
- 完成创建并打开



- 点击「New File...」
用Claude Code开发
- 把开发文档放入这个项目中

- 打开Claude Code插件页面
- 在对话页面输入下列文案,Claude Code就会自动开始开发。中间有需要人工配置的环境,Claude Code都会给出详细的操作步骤
@PROJECT_SPEC.md 按照这个开发文档,拆解开发计划,并逐步完成开发。有需要我配置的节点,要告诉我详细的操作步骤
- 在对话页面输入下列文案,Claude Code就会自动开始开发。中间有需要人工配置的环境,Claude Code都会给出详细的操作步骤
Skill文档
分析提炼
# Analyze Content Skill
同步分析关注频道的新YouTube视频,提炼结构化的核心观点。
## 抓取规则
1. **只抓新视频**:跳过已分析过的视频(`data/analyses/` 目录下已有对应 JSON 文件)
2. **限制数量**:每个频道最多只取 **最近2个** 未抓取的视频
3. **按时间排序**:RSS Feed 返回的视频已按发布时间倒序,直接取前2个未分析的即可
## 执行步骤
### Step 1: 读取频道配置
读取 `youtube-insight-dashboard/config/channels.json` 获取用户关注的频道列表。
### Step 2: 获取已分析视频列表
读取 `youtube-insight-dashboard/data/analyses/` 目录下所有 `.json` 文件名,提取 videoId 列表作为"已分析集合"。
### Step 3: 逐频道抓取新视频
对每个频道:
1. 通过 YouTube RSS Feed 获取最近视频:
```
https://www.youtube.com/feeds/videos.xml?channel_id={channelId}
```
2. 解析 XML,提取视频列表(按发布时间倒序)
3. 过滤:跳过"已分析集合"中的视频
4. **限制**:只取过滤后的 **前2个视频**(即最近2个未分析视频)
### Step 4: 分析新视频
对每个待分析视频:
#### 4.1 获取视频信息
通过oEmbed API获取:
- 视频标题
- 缩略图
- 频道名称
#### 4.2 获取字幕
调用 Supadata API:
```
GET https://api.supadata.ai/v1/youtube/transcript?video_id={videoId}
Headers: x-api-key: {从.env读取SUPADATA_API_KEY}
```
#### 4.3 分析内容
分析字幕,输出7个模块:
##### 模块1: 内容速览 (overview)
- oneSentenceSummary: 一句话总结核心价值
- coreInsightsSummary: 3-5个核心观点一句话总结
- targetAudience: 适合谁看
- creationValue: { score: 1-5, reason: 评分理由 }
##### 模块2: 嘉宾背景 (guest)
- name: 嘉宾姓名
- title: 身份头衔
- uniqueness: 为什么值得听
- potentialBias: [可能的偏见]
- readingAdvice: 阅读建议
##### 模块3: 核心观点 (insights)
数组,每个观点包含:
- id: insight-1, insight-2...
- title: 观点标题
- timeRange: { start: "MM:SS", end: "MM:SS" } // 该观点在视频中的时间范围
- coreArgument: 核心论点
- evidences: [{ type: data|case|quote|analogy|logic, content: 内容 }]
- goldenQuote: { original: 原文, translation: 翻译, timestamp: "MM:SS" } // timestamp为金句出现的时间点
- plainExplanation: 大白话解释,初中生能懂
- conceptExplanations: [{ term: 术语, explanation: 解释 }]
##### 模块4: 概念词典 (glossary)
数组:
- term: 中文术语
- originalTerm: 英文原文
- context: 语境
- explanation: 大白话解释
##### 模块5: 观点关系 (insightRelations)
- causalChains: [{ from, relation, to }] 因果链
- parallels: [{ insights: [], description }] 并列
- dependencies: [{ insight, dependsOn }] 依赖
- narrativeSummary: 观点如何串联
##### 模块6: 金句收集 (goldenQuotes)
数组:
- quote: 金句内容
- timestamp: "MM:SS" // 金句在视频中出现的时间点
- context: 语境
- useCase: 适用场景
##### 模块7: 质量评估 (qualityAssessment)
- dimensions:
- informationDensity: { score, note }
- uniqueness: { score, note }
- evidenceStrength: { score, note }
- accessibilityScore: { score, note }
- creationValue: { score, note }
- overallRecommendation: 总体建议
- topInsightsToExpand: [{ insightId, reason }]
#### 4.4 保存结果
组装完整JSON(包含meta信息),保存到:
```
youtube-insight-dashboard/data/analyses/{videoId}.json
```
### Step 5: 输出结果
告诉用户:
- 检查了多少个频道
- 每个频道发现多少个新视频(及跳过多少个超出限制的)
- 成功分析了多少个
- 跳过了多少个(已分析/无字幕/超出限制)
## 分析原则
1. 论据优先具体数据和真实案例
2. 大白话让初中生能懂
3. 提取所有专业术语
4. 标注观点因果、并列、依赖关系
5. 保留最有冲击力的金句
6. 评分客观,不一味高分
7. **时间戳定位**:
- 根据字幕的 offset 字段(毫秒)计算时间点
- 核心观点的 timeRange 应覆盖该观点讨论的起止时间
- 金句的 timestamp 应精确到金句开始出现的时间
- 时间格式统一为 "MM:SS"(超过1小时用 "H:MM:SS")
## 完整输出格式
```json
{
"meta": {
"videoId": "",
"videoTitle": "",
"videoUrl": "",
"channelId": "",
"channelName": "",
"channelSlug": "",
"thumbnailUrl": "",
"duration": "",
"publishedAt": "",
"analyzedAt": "",
"outputLevel": "creator"
},
"overview": {},
"guest": {},
"insights": [],
"glossary": [],
"insightRelations": {},
"goldenQuotes": [],
"qualityAssessment": {}
}
```
## 完成后
提示用户启动前端查看
## 生成口播稿
如需为某个视频生成口播稿结构,执行 `/script-content`。
生成口播稿
# Script Content Skill
为已分析的视频生成专业级口播稿:**结构 + 标题 + 完整文案**。
---
## 固定受众画像
### 核心受众
1. **互联网科技从业者** - 产品、研发、运营,追求效率和深度
2. **AI提效/副业探索者** - 普通人,想用AI改变工作或赚钱方式
### 受众特征
- 时间宝贵,厌恶废话
- 追求"可执行"的干货
- 喜欢有深度但不学术化
- 对新事物开放,但警惕割韭菜
- 渴望"别人不知道的信息差"
### 内容调性
- 专业但不装逼
- 直接但不粗暴
- 有料但不啰嗦
- 真诚但不煽情
---
## 执行流程
### Step 1: 获取可选视频列表
读取 `youtube-insight-dashboard/data/analyses/` 目录下所有 JSON 文件:
1. 解析每个文件,提取 `meta.videoTitle`, `meta.channelName`, `meta.analyzedAt`
2. 检查是否已有 `scriptStructure` 字段
3. 将没有口播稿的视频作为候选列表
### Step 2: 询问用户选择
使用 AskUserQuestion 工具,展示候选视频列表:
- 选项格式:「视频标题 (频道名)」
- 如果所有视频都已有口播稿,提示用户并询问是否要重新生成
### Step 3: 深度分析原视频
读取用户选择的视频 JSON 文件,进行**二次提炼**:
#### 3.1 价值密度评估
- 原视频的信息增量有多少?
- 哪些观点是"常识复述"可以略过?
- 哪些是"真正的洞察"必须保留?
#### 3.2 差异化角度挖掘
问自己三个问题:
1. 这个话题别人怎么讲的?我们有什么不同视角?
2. 有没有被忽视的"反常识"点?
3. 能否加入独家案例/数据/经历?
#### 3.3 冲突点识别
- 原视频有没有挑战主流观点?
- 有没有"你以为...其实..."的转折?
- 有没有行业痛点可以戳?
### Step 4: 选择叙事框架
根据内容类型选择最适合的结构:
#### 框架A: 问题-方案型(适合工具/方法论)
```
痛点共鸣 → 常见误区 → 正确方法 → 实操步骤 → 效果预期
```
#### 框架B: 认知颠覆型(适合新观点/趋势)
```
主流认知 → 反常识冲击 → 深层原因 → 新的理解 → 行动启示
```
#### 框架C: 案例拆解型(适合成功/失败案例)
```
结果展示 → 背景铺垫 → 关键转折 → 方法提炼 → 适用边界
```
#### 框架D: 信息差型(适合行业内幕/趋势)
```
信息钩子 → 信息来源 → 深度解读 → 影响分析 → 应对策略
```
### Step 5: 设计情绪曲线
口播不是平铺直叙,需要设计**情绪节奏**:
```
情绪强度
↑
│ ╭─╮ 高潮1 ╭──╮ 高潮2(最高)
│ ╱ ╲ ╱ ╲
│ ╱ ╲ ╱ ╲ ╭─
│ ╱ ╲ ╱ ╲ ╱ 升华
│╱ 钩子 ╲ ╱ ╲╱
└────────────────────────────→ 时间
开场 铺垫 冲突 解决 收尾
```
每个部分标注:
- 情绪目标(好奇/焦虑/恍然/兴奋/踏实)
- 语速建议(快/中/慢)
- 停顿位置(制造张力)
### Step 6: 生成标题选项
生成 3-5 个标题选项,覆盖不同风格:
#### 标题公式库
| 类型 | 公式 | 示例 |
|------|------|------|
| 数字型 | [数字] + [核心价值] | "Claude Code的3个核心设计原则" |
| 悬念型 | [反常识现象] + 为什么 | "为什么最简单的架构反而最强?" |
| 对比型 | [A] vs [B]:[结论] | "RAG vs Grep:Claude Code选择了更笨的方案" |
| 揭秘型 | [权威来源] + 揭秘 + [主题] | "Anthropic工程师揭秘:Claude Code架构设计" |
| 痛点型 | [痛点] + 的解决方案 | "AI Agent总是不稳定?看看Claude Code怎么做的" |
#### 标题红线
- 不超过25个汉字
- 不用"震惊"、"必看"等低质词
- 有信息增量,不是纯标题党
- 和封面形成互补而非重复
### Step 7: 撰写完整口播稿文案
基于结构,撰写**逐字稿**,格式要求:
#### 文案格式规范
```
【段落标题】
一句话作为一行。
不要把多个句子挤在一行。
每行控制在15-25字之间。
需要停顿的地方,单独成行。
[画面提示:xxx]
[字幕强调:xxx]
---
```
#### 文案写作原则
1. **口语化**
- 用"你"不用"您"
- 用短句不用长句
- 用具体词不用抽象词
- 像和朋友聊天,不像念稿
2. **节奏感**
- 重要观点前停顿(单独一行留白)
- 金句后停顿让观众消化
- 长句和短句交替使用
- 适当使用反问句制造互动感
3. **信息密度**
- 每30秒必须有一个信息点
- 删掉所有"废话连接词"(然后、接下来、众所周知)
- 用具体数字替代模糊表达
- 一个段落只讲一个核心点
4. **情绪设计**
- 开场制造好奇/焦虑
- 中间制造"恍然大悟"时刻
- 结尾给予"踏实/激励"感
- 适当使用类比降低理解门槛
### Step 8: 生成完整数据结构
生成 `scriptStructure`:
```json
{
"meta": {
"narrativeFramework": "问题-方案型 | 认知颠覆型 | 案例拆解型 | 信息差型",
"coreHook": "一句话说清楚为什么要看这个视频",
"uniqueAngle": "我们的差异化视角是什么",
"targetDuration": "7-10分钟",
"difficulty": "入门 | 进阶 | 深度"
},
"titles": {
"recommended": "推荐使用的标题",
"options": [
{
"title": "标题文案",
"type": "数字型 | 悬念型 | 对比型 | 揭秘型 | 痛点型",
"strength": "这个标题的优势",
"risk": "潜在风险(如有)"
}
]
},
"opening": {
"type": "问题型 | 数据型 | 场景型 | 反常识型",
"hook": "具体的开场钩子文案",
"avoidCliche": "不要用的老套开场",
"emotionGoal": "好奇/焦虑/共鸣",
"duration": "30-45秒"
},
"structure": [
{
"order": 1,
"section": "段落主题",
"purpose": "这一段要达成什么目的",
"keyPoints": ["核心要点1", "核心要点2"],
"supportingElements": {
"data": "支撑数据(如有)",
"example": "案例/故事(如有)",
"analogy": "类比解释(如有)"
},
"quotesToUse": ["可使用的原视频金句"],
"transition": "到下一段的过渡句",
"emotionCurve": "情绪走向",
"pacing": "快/中/慢",
"duration": "预估时长"
}
],
"closing": {
"elevation": "升华的核心信息",
"callToAction": "希望观众做什么",
"memorableEnd": "留下的最后一句话",
"emotionGoal": "踏实/激励/思考"
},
"fullScript": {
"totalWordCount": "预估总字数",
"estimatedDuration": "预估时长(按150字/分钟)",
"sections": [
{
"sectionTitle": "段落标题",
"lines": [
"第一句话。",
"第二句话。",
"第三句话。",
"",
"停顿后的下一句。"
],
"visualCues": ["画面/字幕提示"],
"duration": "本段时长"
}
]
},
"productionNotes": {
"visualCues": ["需要特别画面配合的节点"],
"textOverlays": ["需要字幕强调的金句"],
"paceChanges": ["节奏变化的位置"]
},
"spreadStrategy": {
"thumbnailConcept": "封面创意建议",
"keywordsToPlant": ["自然植入的关键词"],
"hookForShorts": "如果切片,用什么钩子"
},
"qualityChecklist": {
"infoIncrement": "是否有足够的信息增量?",
"logicChain": "逻辑链条是否完整?",
"emotionRhythm": "情绪节奏是否有起伏?",
"actionable": "观众看完能做什么?",
"memorable": "有没有能记住的金句?"
}
}
```
### Step 9: 保存结果
读取原 JSON 文件,添加 `scriptStructure` 字段,保存回原文件。
---
## 开场钩子模板库
### 问题型
- "你有没有想过,为什么...却总是..."
- "[数字]%的人都在犯这个错误,你可能也是其中之一"
### 数据型
- "最新数据显示...[反直觉的数据]"
- "我研究了[数量]个案例,发现一个规律..."
### 场景型
- "上周我遇到一个事儿..."
- "想象一下这个场景..."
### 反常识型
- "关于[话题],大多数人都理解错了"
- "今天这个观点可能会得罪一些人,但我还是要说..."
### 信息差型
- "这个信息很多人还不知道..."
- "内部消息,[某某]正在..."
---
## 转折技巧
### 制造冲突
- "但问题是..."
- "真相往往更复杂..."
- "这只是表面现象..."
### 认知升级
- "直到我发现了一个关键点..."
- "换个角度看这件事..."
- "更深层的原因是..."
### 回扣主题
- "这就回到了我们开头的问题..."
- "所以你看,[首尾呼应]"
---
## 升华公式
### 认知层面
- 从具体案例 → 普遍规律
- 从操作方法 → 底层逻辑
- 从单一领域 → 跨域启发
### 情感层面
- 从焦虑 → 踏实(给出明确路径)
- 从困惑 → 清晰(建立认知框架)
- 从旁观 → 行动(激发行动欲望)
### 结尾模板
- "说到底,[一句话总结核心洞察]"
- "与其[常见做法],不如[新的视角]"
- "记住,[可以带走的一句话]"
---
## 质量红线
生成前自检,以下任何一条不通过就要修改:
1. **前30秒法则**:开场有没有给出"为什么要看完"的理由?
2. **信息增量**:去掉常识后,还剩多少干货?
3. **情绪波动**:是否至少有2个情绪高点?
4. **逻辑闭环**:论点-论据-结论是否自洽?
5. **行动触发**:观众看完知道该做什么吗?
6. **记忆点**:有没有一句能被记住的话?
---
## 输出展示
生成完成后,分两部分向用户展示:
### Part 1: 概览(保存到 JSON 前先确认)
```
## 口播稿概览
**叙事框架**:[框架名] - [选择原因]
**差异化角度**:[我们的独特视角]
**预估时长**:[X分钟] / [X字]
### 推荐标题
> [推荐的标题]
### 备选标题
1. [标题1] - [类型]
2. [标题2] - [类型]
3. [标题3] - [类型]
### 结构概览
| 段落 | 主题 | 时长 |
|------|------|------|
| 1 | 开场钩子 | 30秒 |
| 2 | xxx | 2分钟 |
| ... | ... | ... |
### 避坑提醒
- [提醒1]
- [提醒2]
```
### Part 2: 完整口播稿文案
```
---
# [推荐标题]
---
## 【开场】
第一句话。
第二句话。
第三句话。
[画面:xxx]
---
## 【第一部分:xxx】
第一句话。
第二句话。
[字幕强调:xxx]
第三句话。
---
## 【第二部分:xxx】
...
---
## 【结尾】
升华句。
行动号召。
记忆点金句。
---
```
### 输出顺序
1. 先输出 Part 1 概览
2. 询问用户是否满意结构和标题
3. 用户确认后,输出 Part 2 完整文案
4. 保存到 JSON 文件