← 返回首页ai798LAB Public

vibe-coding-课程-干货集训

02 自动总结长视频生成口播稿

2026年1月13日1. 打开vs code或其他IDE

实操流程

下载项目开发文档

新建项目

  1. 打开vs code或其他IDE
  2. 点击「New File...」 1. 完成创建并打开

用Claude Code开发

  1. 把开发文档放入这个项目中
  2. 打开Claude Code插件页面
  3. 在对话页面输入下列文案,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 文件