关于 podcast-pipeline
podcast-pipeline 是内容再利用 skill,可将播客转录稿转成适配不同平台的内容和发布日历。它支持 RSS 节目与本地转录稿,并在流程中加入评分和去重。
主要功能
- 01读取 RSS 节目或转录稿文件
- 02提取故事、引言等内容要素
- 03生成适配各平台的内容草稿
- 04为内容评分并执行去重
- 05生成每周发布日历
适用场景
- 01将新播客节目改编为多平台内容
- 02批量处理多个 RSS 节目
- 03根据转录稿规划发布日历
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ericosiu/ ai-marketing-skills --skill podcast-pipeline安装后在 Claude Code 中输入/podcast-pipeline确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.examplepodcast_pipeline.pyREADME.mdrequirements.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>)
- 获取 RSS Feed XML
- 提取最新一期节目的音频 URL(也可使用
--episodes N批量处理) - 下载音频文件
- 使用 OpenAI Whisper API 转录(包含时间戳)
- 保存文字稿及节目元数据(标题、日期、描述、时长)
选项 B:原始文字稿(--transcript <file>)
- 读取文字稿文件(纯文本、SRT 或 VTT)
- 如有时间戳,则进行解析
- 从文件名中提取节目元数据,或询问用户
选项 C:批量模式(--batch <rss_url> --episodes N)
- 获取 RSS Feed
- 提取最近的 N 期节目
- 对每期节目运行完整流水线
- 对批次中的所有节目进行去重
清理文字稿
- 删除填充词(嗯、呃、像、你知道)以便用于书面内容
- 保留带时间戳的原文,以供视频片段建议使用
- 按主题变化将内容拆分为逻辑片段
第 2 步:编辑分析 — 深度分析
将完整文字稿输入大模型,并使用以下提取框架:
提取以下内容要素:
-
叙事脉络 — 包含铺垫 → 冲突 → 解决的完整故事片段。 标注起止时间戳。
-
精彩语录 — 简洁有力、适合分享的陈述。可以独立成篇的短句。 必须通过“有人会把这句话截图吗?”的检验。
-
争议观点 — 违背传统认知的观点。 能让人回复“强烈反对”或“终于有人说出来了”的内容。
-
数据点 — 具体数字、百分比、金额、时间范围。 能增强可信度的具体证据。
-
故事 — 个人轶事、案例研究、客户案例。 必须包含人物、问题和结果。
-
框架 — 分步流程、思维模型、决策矩阵。 任何人们会收藏或加入书签的结构化内容。
-
预测 — 关于趋势、市场和技术的前瞻性论断。 对事物发展方向的大胆观点。
每个内容要素的输出格式:
- 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 步:去重引擎
最终定稿前,请检查所有生成的内容:
- 本批次 — 不应有两篇内容讨论相同的角度
- 近期历史记录 — 与最近 N 天的输出进行比较(默认:30 天)
- 相似度阈值 — 标记语义重叠度超过 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.txt | Python 依赖项 |
README.md | 安装与使用指南 |