mcpField
P
podcast-pipeline

podcast-pipeline

github.com/ericosiu营销与增长3.7k173 次安装5 周前更新
代码仓库

关于 podcast-pipeline

podcast-pipeline 是内容再利用 skill,可将播客转录稿转成适配不同平台的内容和发布日历。它支持 RSS 节目与本地转录稿,并在流程中加入评分和去重。

主要功能

  1. 01读取 RSS 节目或转录稿文件
  2. 02提取故事、引言等内容要素
  3. 03生成适配各平台的内容草稿
  4. 04为内容评分并执行去重
  5. 05生成每周发布日历

适用场景

  1. 01将新播客节目改编为多平台内容
  2. 02批量处理多个 RSS 节目
  3. 03根据转录稿规划发布日历

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ericosiu/ai-marketing-skills --skill podcast-pipeline

安装后在 Claude Code 中输入/podcast-pipeline确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.env.example
podcast_pipeline.py
README.md
requirements.txt

详细介绍

前言(在技能启动时运行)

# Version check (silent if up to date)
python3 telemetry/version_check.py 2>/dev/null || true

# Telemetry opt-in (first run only, then remembers your choice)
python3 telemetry/telemetry_init.py 2>/dev/null || true

**隐私:**此技能会在本地将使用情况记录到 ~/.ai-marketing-skills/analytics/。远程遥测仅在选择加入后启用。不会收集任何代码、文件路径或仓库内容。请参阅 telemetry/README.md。


播客到全平台内容流水线

将播客节目转化为覆盖各个平台的完整内容日历。 输入 1 期节目,输出 15-20 条内容——经过评分、去重并安排发布。


第 1 步:导入 — 获取文字稿

确定输入来源并获取干净的文字稿。

选项 A:RSS Feed(--rss <url>)
  1. 获取 RSS Feed XML
  2. 提取最新一期节目的音频 URL(也可使用 --episodes N 批量处理)
  3. 下载音频文件
  4. 使用 OpenAI Whisper API 转录(包含时间戳)
  5. 保存文字稿及节目元数据(标题、日期、描述、时长)
选项 B:原始文字稿(--transcript <file>)
  1. 读取文字稿文件(纯文本、SRT 或 VTT)
  2. 如有时间戳,则进行解析
  3. 从文件名中提取节目元数据,或询问用户
选项 C:批量模式(--batch <rss_url> --episodes N)
  1. 获取 RSS Feed
  2. 提取最近的 N 期节目
  3. 对每期节目运行完整流水线
  4. 对批次中的所有节目进行去重
清理文字稿
  • 删除填充词(嗯、呃、像、你知道)以便用于书面内容
  • 保留带时间戳的原文,以供视频片段建议使用
  • 按主题变化将内容拆分为逻辑片段

第 2 步:编辑分析 — 深度分析

将完整文字稿输入大模型,并使用以下提取框架:

提取以下内容要素:
  1. 叙事脉络 — 包含铺垫 → 冲突 → 解决的完整故事片段。 标注起止时间戳。

  2. 精彩语录 — 简洁有力、适合分享的陈述。可以独立成篇的短句。 必须通过“有人会把这句话截图吗?”的检验。

  3. 争议观点 — 违背传统认知的观点。 能让人回复“强烈反对”或“终于有人说出来了”的内容。

  4. 数据点 — 具体数字、百分比、金额、时间范围。 能增强可信度的具体证据。

  5. 故事 — 个人轶事、案例研究、客户案例。 必须包含人物、问题和结果。

  6. 框架 — 分步流程、思维模型、决策矩阵。 任何人们会收藏或加入书签的结构化内容。

  7. 预测 — 关于趋势、市场和技术的前瞻性论断。 对事物发展方向的大胆观点。

每个内容要素的输出格式:
- Type: [narrative_arc | quote | controversial_take | data_point | story | framework | prediction]
- Content: [extracted text]
- Timestamp: [start - end, if available]
- Context: [what was being discussed]
- Viral Score: [0-100, see Step 4]
- Suggested platforms: [where this atom works best]

第 3 步:生成内容 — 一期节目,多种内容

根据提取的内容要素,为每期节目生成以下所有内容:

3a. 短视频片段(每期 3-5 条)
- Hook: [First 3 seconds — pattern interrupt or bold claim]
- Clip segment: [Timestamp range from transcript]
- Caption overlay: [Text for the screen]
- Platform: [YouTube Shorts / TikTok / Instagram Reels]
- Why it works: [What makes this clippable]

优先级:争议观点 > 有精彩结局的故事 > 出人意料的数据点

3b. Twitter/X 串文(每期 2-3 条)
- Thread hook (tweet 1): [Curiosity gap or bold opener]
- Thread body (5-10 tweets): [Each tweet is one complete thought]
- Thread closer: [CTA — follow, reply, retweet trigger]
- Source atoms: [Which content atoms feed this thread]

规则:每条推文不超过 280 个字符。每条推文都必须能独立成立。用数据点作为佐证。

3c. LinkedIn 文章草稿(每期 1 篇)
- Headline: [Specific, benefit-driven]
- Hook paragraph: [Before the "see more" fold — must earn the click]
- Body: [3-5 sections with headers, 800-1200 words]
- CTA: [Engagement driver — question, not link]
- Hashtags: [3-5 relevant, not spammy]

风格:专业但不官腔。采用第一人称。以故事为主线。

3d. 新闻简报章节(每期 1 篇)
- Section headline: [Scannable, specific]
- TL;DR: [One sentence, the core insight]
- Body: [3-5 bullet points, each with a takeaway]
- Pull quote: [The most shareable line from the episode]
- Link: [Back to full episode]
3e. 引言卡片(每期 3-5 张)
- Quote text: [Max 20 words — must work as text overlay]
- Attribution: [Speaker name]
- Background suggestion: [Color/mood that matches the tone]
- Platform sizing: [1080x1080 for IG, 1200x675 for Twitter, 1080x1920 for Stories]
3f. 博客文章大纲(每期 1 份)
- Title: [SEO-optimized, includes primary keyword]
- Primary keyword: [Search volume + difficulty estimate]
- Secondary keywords: [3-5 related terms]
- Meta description: [155 chars max]
- H2 sections: [5-7, each maps to a content atom]
- Internal linking opportunities: [Topics that connect to existing content]
- Estimated word count: [1500-2500]
3g. YouTube Shorts / TikTok 脚本(每期 1 份)
- HOOK (0-3s): [Pattern interrupt — question, bold claim, or visual]
- SETUP (3-15s): [Context — why should they care]
- PAYOFF (15-45s): [The insight, data, or story resolution]
- CTA (45-60s): [Follow, comment prompt, or part 2 tease]
- On-screen text: [Key phrases to overlay]
- B-roll suggestions: [Visual ideas if not talking-head]

第 4 步:内容评分 — 爆红潜力

从三个维度为每条生成的内容评分(每项 0-100):

维度衡量内容信号
新颖度内容是否新颖或令人意外?逆向观点、意外数据、首次提出
争议性人们会因此争论吗?鲜明观点、挑战常规、明确站队
实用性有人能立即用上吗?框架、操作指南、模板、具体数字

爆红评分 =(新颖度 × 0.4)+(争议性 × 0.3)+(实用性 × 0.3)

评分阈值:
  • 80+ → 优先发布。在互动高峰时段安排发布。
  • 60-79 → 内容扎实。填满日历。
  • 40-59 → 备选内容。仅在日历有空档时使用。
  • 低于 40 → 剔除。不值得占用发布时段。

第 5 步:去重引擎

最终定稿前,请检查所有生成的内容:

  1. 本批次 — 不应有两篇内容讨论相同的角度
  2. 近期历史记录 — 与最近 N 天的输出进行比较(默认:30 天)
  3. 相似度阈值 — 标记语义重叠度超过 70% 的任意一对内容
去重规则:
  • 如果两篇内容的重叠度超过 70%:保留评分较高的一篇,剔除另一篇
  • 如果某篇内容与近期发布的内容重叠:用 ⚠️ 标记,并建议一个差异化角度
  • 在 output/content_history.json 中跟踪所有已发布内容的哈希值

第 6 步:生成日历(--calendar)

将评分后且去重的内容整理成每周发布日历。

排期规则:
  • Twitter/X: 每天 1-2 条,安排在互动高峰时段(ET 时间上午 8-10 点、中午 12-1 点、下午 5-7 点)
  • LinkedIn: 每天最多 1 条,安排在周二至周四上午
  • YouTube Shorts/TikTok: 每天 1 条,安排在晚上
  • Newsletter: 每周发布一次,每周同一天
  • Blog: 每周发布 1-2 篇
  • Quote cards: 在内容较少的日子穿插发布
日历输出格式:
{
  "week_of": "2024-01-15",
  "episode_source": "Episode Title - Guest Name",
  "content_pieces": [
    {
      "date": "2024-01-15",
      "time": "09:00 ET",
      "platform": "twitter",
      "type": "thread",
      "content": "...",
      "viral_score": 85,
      "status": "draft"
    }
  ],
  "total_pieces": 18,
  "avg_viral_score": 72,
  "coverage": {
    "twitter": 6,
    "linkedin": 3,
    "youtube_shorts": 3,
    "newsletter": 1,
    "blog": 1,
    "quote_cards": 4
  }
}

第 7 步:输出

所有输出都写入 output/ 目录:

output/
├── episodes/
│   ├── YYYY-MM-DD-episode-slug/
│   │   ├── transcript.txt
│   │   ├── atoms.json          # Extracted content atoms
│   │   ├── content_pieces.json # All generated content
│   │   └── calendar.json       # Scheduled calendar
│   └── ...
├── calendar/
│   └── week-YYYY-WNN.json     # Aggregated weekly calendar
├── content_history.json        # Dedup tracking
└── pipeline_log.json           # Run history and stats

CLI 参考

# Process latest episode from RSS feed
python podcast_pipeline.py --rss "https://feeds.example.com/podcast.xml"

# Process a local transcript
python podcast_pipeline.py --transcript episode-42.txt

# Batch process last 5 episodes
python podcast_pipeline.py --batch "https://feeds.example.com/podcast.xml" --episodes 5

# Generate weekly calendar from existing outputs
python podcast_pipeline.py --calendar

# Process with custom dedup window
python podcast_pipeline.py --rss "https://feeds.example.com/podcast.xml" --dedup-days 60

# Process and only keep 80+ viral score content
python podcast_pipeline.py --rss "https://feeds.example.com/podcast.xml" --min-score 80

环境变量

变量必需说明
OPENAI_API_KEY是(用于 Whisper)用于音频转录的 OpenAI API 密钥
ANTHROPIC_API_KEY是(用于生成)用于内容生成的 Anthropic API 密钥
OPENAI_LLM_KEY可选如果改用 GPT 进行生成,则使用单独的 OpenAI 密钥

参考文件

文件用途
podcast_pipeline.py主流程脚本
requirements.txtPython 依赖项
README.md安装与使用指南

评论

支持 Markdown