mcpField
P
podcast-pipeline

podcast-pipeline

github.com/ericosiuマーケティング・グロース3.7k173 回インストール5 週間前に更新
リポジトリ

podcast-pipeline について

podcast-pipelineは、ポッドキャストの文字起こしを各プラットフォーム向けコンテンツと公開カレンダーに変換するスキルです。RSSのエピソードとローカルの文字起こしに対応し、採点と重複排除も行います。

主な機能

  1. 01RSSエピソードや文字起こしの取り込み
  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 をご覧ください。


Podcast-to-Everything パイプライン

ポッドキャストのエピソードを、あらゆるプラットフォーム向けの完全なコンテンツカレンダーに変換します。 1 本のエピソードから、15〜20 個のコンテンツが生成されます — スコアリング、重複排除、スケジュール設定済みです。


ステップ 1: 取り込み — トランスクリプトを取得する

入力ソースを判定し、クリーンなトランスクリプトを取得します。

オプション A: RSS フィード(--rss <url>)
  1. RSS フィードの 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 フィードを取得する
  2. 直近 N 件のエピソードを抽出する
  3. それぞれを完全なパイプラインで処理する
  4. バッチ内のすべてのエピソードにわたって重複を排除する
トランスクリプトのクリーンアップ
  • 書き言葉向けのコンテンツでは、フィラーワード(um、uh、like、you know)を削除する
  • 動画クリップの提案のために、タイムスタンプ付きの原本を保持する
  • トピックの切り替わりごとに論理的なセグメントへ分割する

ステップ 2: 編集ブレイン — 深い分析

完全なトランスクリプトを、次の抽出フレームワークとともに LLM に投入します:

以下のコンテンツアトムを抽出します:
  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: コンテンツ生成 — 1 本のエピソードから多数のピースへ

各エピソードについて、抽出したアトムから以下をすべて生成します:

3a. ショートフォーム動画クリップ(1 エピソードあたり 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 スレッド(1 エピソードあたり 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 エピソードあたり 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 エピソードあたり 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. 引用カード(1 エピソードあたり 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 エピソードあたり 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 エピソードあたり 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: コンテンツスコアリング — バイラルポテンシャル

生成されたすべてのピースを 3 つの次元でスコアリングします(それぞれ 0〜100):

次元測定対象シグナル
新規性これは新しい、または意外か?逆張りの見解、予想外のデータ、初めて言及されたもの
論争性人々はこれについて議論するか?強い意見、規範への挑戦、立場の明示
有用性誰かがこれをすぐに使えるか?フレームワーク、ハウツー、テンプレート、具体的な数値

バイラルスコア = (新規性 × 0.4) + (論争性 × 0.3) + (有用性 × 0.3)

スコアのしきい値:
  • 80以上 → 優先的に公開します。エンゲージメントがピークとなる時間帯にスケジュールします。
  • 60~79 → 良質なコンテンツです。カレンダーを埋めるために使います。
  • 40~59 → 穴埋め用です。カレンダーに空きがある場合のみ使います。
  • 40未満 → 削除します。公開枠を使う価値はありません。

ステップ 5:重複排除エンジン

最終確定の前に、生成したすべてのコンテンツを次の項目と照合します。

  1. 今回のバッチ — 同じ切り口を扱うコンテンツが重複しないようにします
  2. 最近の履歴 — 直近 N 日間の出力と比較します(デフォルト:30 日)
  3. 類似度のしきい値 — 意味的な重複が 70%を超える組み合わせにフラグを付けます
重複排除のルール:
  • 2 つのコンテンツの重複が 70%を超える場合:スコアの高い方を残し、もう一方を削除します
  • コンテンツが最近公開された内容と重複する場合:⚠️ を付け、差別化する切り口を提案します
  • 公開したすべてのコンテンツのハッシュを output/content_history.json に記録します

ステップ 6:カレンダーの生成(--calendar)

スコア付けと重複排除が完了したコンテンツを、週次の公開カレンダーにまとめます。

スケジュールのルール:
  • Twitter/X: 1 日 1~2 件、ピーク時間帯(東部時間の午前 8~10 時、午後 12~1 時、午後 5~7 時)
  • LinkedIn: 1 日あたり最大 1 件、火曜日から木曜日の午前中
  • YouTube Shorts/TikTok: 1 日 1 件、夕方
  • ニュースレター: 毎週同じ曜日
  • ブログ: 週 1~2 件
  • 引用カード: コンテンツが少ない日に挿入します
カレンダーの出力形式:
{
  "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セットアップと使用方法のガイド

コメント