vibe-coding-课程-干货集训
02 自动总结长视频生成口播稿
实操流程
下载项目开发文档
新建项目
- 打开vs code或其他IDE
- 点击「New File...」


1. 完成创建并打开
用Claude Code开发
- 把开发文档放入这个项目中

- 打开Claude Code插件页面
- 在对话页面输入下列文案,Claude Code就会自动开始开发。中间有需要人工配置的环境,Claude Code都会给出详细的操作步骤 ``` @PROJECT_SPEC.md 按照这个开发文档,拆解开发计划,并逐步完成开发。有需要我配置的节点,要告诉我详细的操作步骤
### Skill文档
#### 分析提炼
```Markdown
**# 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 文件