ai-podcast について
inference.sh を使い、キャラクター画像や音声から複数話者のポッドキャスト動画を作るスキルです。人物の一貫性、台本、音声選択、映像チェックの手順も案内します。
主な機能
- 01キャラクター画像の生成
- 02実在人物の同一性維持
- 03ターンごとの音声合成
- 04トーキングヘッド動画の生成
- 05クリップの順次結合
- 06映像と音声の品質確認
活用シーン
- 01複数話者のポッドキャスト動画制作
- 02ブランドマスコットの会話制作
- 03プロモーション対話動画の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ inference-sh/ skills --skill ai-podcastインストール後、Claude Code で/ai-podcastを入力して読み込まれたか確認します。
詳細
AI ポッドキャストジェネレーター
inference.sh パイプラインを使用して、複数人が登場するトーキングヘッド形式のポッドキャスト動画を作成します。肖像画生成 → TTS 音声 → アバター動画 → 結合の順に処理します。実在の人物(Phota 経由)、3D マスコット、イラストキャラクター、およびそれらを組み合わせた出演者に対応しています。
ユーザーがポッドキャスト、トーキングヘッド動画、デモリール、プロモーション用の会話、または複数の話者が登場する動画コンテンツの作成を希望する場合に使用します。
パイプラインの概要
Characters (images) → TTS (audio per turn) → Avatar (video per turn) → Merge (final video)
手順
ステップ 1:キャラクターの作成
キャラクターの種類に応じて、適切なツールを選択します。
| キャラクターの種類 | ツール | 備考 |
|---|---|---|
| 実在の人物(新規) | pruna/p-image | 16:9、prompt_upsampling: true。手早く生成でき、トレーニングも不要ですが、複数回の生成で同じ人物として一貫性を保つことはできません。 |
| 実在の人物(一貫した ID) | [[profile_id]] を指定した phota/generate | すべてのショットで同一人物として一貫性を保てます。事前に Phota プロファイルのトレーニングが必要です(下記参照)。 |
| ブランドのマスコット/ロゴキャラクター | google/gemini-3-pro-image | ロゴとキャラクターシートを参照画像として渡します |
| イラスト/スタイライズされたキャラクター | google/gemini-3-pro-image | スタイルの参照画像を入力画像として渡します |
Phota の ID のトレーニング(任意ですが、実在の人物の場合は推奨):
複数のアングルやショットにわたって一貫した ID を保つ実在の人物キャラクターが必要な場合は、まず Phota プロファイルをトレーニングします。
belt app run phota/train --input '{
"images": ["url1.jpg", "url2.jpg", ...],
"wait": true
}' --save profile.json
- 被写体の顔画像が 30~50 枚必要です
wait: trueを指定すると、数分でトレーニングが完了しますprofile_idが返されます。以降はphota/generateのプロンプトで[[profile_id]]として使用します- プロファイルは永久に再利用できます。一度トレーニングすれば、ショットを無制限に生成できます
ショット間の一貫性が不要な場合(例:話者 1 人の動画、アングル 1 つのみ)は、pruna/p-image のほうが簡単で低コストです。
まずキャラクターシートを作成し、その後ポッドキャストのフレームを作成します。
- キャラクターごとに、シンプルな白背景で複数のアングルを含むキャラクターシートを生成します
- 次に、そのシートを参照画像として使用し、キャラクターをポッドキャストスタジオの設定に配置します
ブランドキャラクター(衣服にロゴがある場合):
- まず、シンプルなデザインの衣服を着たキャラクターを生成します
- ロゴを 2 枚目の参照画像として使い、
phota/editでロゴを追加します - 新しいアングルを生成するときは、キャラクターの参照画像と一緒に必ずロゴ画像を渡します
ステップ 2:別アングルの生成
映像に変化をつけるため、キャラクターごとに少なくとも 2 つのアングルを生成します。
| アングル | 使用場面 |
|---|---|
| 正面/ミディアム | 導入ショット、オープニング、クロージング |
| クローズアップ | リアクション、感情的な場面、印象的なセリフ |
クローズアップでは、「タイトなフレーミング、胸から上、被写界深度を浅く」と指定します。「横を向く」と指定すると、単に視線をそらした人物になってしまいます。
ID の一貫性を保つためのルール:
- Phota プロファイルを持つ実在の人物の場合:新しいアングルには
phota/generateまたはphota/editを使用します。Gemini は顔の ID を維持できず、別人を生成します - Phota プロファイルを持たない実在の人物の場合:必要なすべてのアングルを
pruna/p-imageで一度に生成するか、多くのショットが必要なら Phota プロファイルのトレーニングを検討します - マスコット/イラストの場合:Gemini 3 Pro で問題ありません。確立済みのフレームを参照画像として渡します
フレーミングのルール: 個々の話者にはタイトなフレーミングを使用します。複数の席が映るワイドショットでは、画面に 1 人しかいないと空席が目立ちます。
ステップ 3:フレームの品質確認
作業を進める前に、すべてのフレームを目視で確認し、次の点をチェックします。
- 背景に余分な人物がいないこと
- マイクが複数映っていないこと(1 ショットにつきマイク 1 本が適切です)
- ロゴに誤りや歪みがないこと
- アングルを変えてもキャラクターの ID が一貫していること
- 不自然なアーティファクト(余分な手足、オブジェクトの融合など)がないこと
動画の再生成はパイプラインで最もコストがかかる工程なので、動画を生成する前に問題を修正します。
ステップ 4:スクリプトを書く
自然な会話にするためのルール:
- 順番に広告文を読み上げているようではなく、実際の会話のように書きます
- 「ちょっと待って」「それはすごいね」といった反応や、会話への割り込み、追加の質問を入れます
- 発言の長さに変化をつけます。短い反応(1文)と長めの説明(2〜3文)を混ぜます
- ホストは、あからさまな話題の振り方ではなく、本当の質問をします
- 目標とする全体の長さを意識します。1.05倍速で自然に話す場合、約2.5語/秒です
長さの目安:
| 目標 | 語数 |
|---|---|
| 15秒 | 約38語 |
| 30秒 | 約75語 |
| 60秒 | 約150語 |
ステップ 5:TTS 音声を生成する
各発言に inworld/text-to-speech-2 を使用します。
belt app run inworld/text-to-speech-2 --input '{
"text": "...",
"voice_id": "...",
"speaking_rate": 1.05,
"audio_encoding": "MP3"
}' --save output.json
音声の選択:
- 候補の音声を決める前に、同じセリフでサンプルを生成します
- ユーザーに試聴してもらい、音声を承認してもらいます
- ポッドキャストに適した音声:Tyler、Nate、Lauren、Kelsey、Naomi、Anjali(EN_US)
- 利用可能なすべての音声を一覧表示するには
inworld/text-to-speech-2:voicesを使用します
話速:
- 自然なポッドキャストのテンポにするには、デフォルトで 1.05 を使用します
- 短く歯切れのよい反応には 1.1 を使用します
- 1.0 未満には絶対にしないでください。遅く、聞き手の関心を損なう話し方になります
- 各登場人物の発言では、話速を一定に保ちます
すべての TTS 発言は並列で実行できます(安価で高速、1件あたり約2〜8秒)。
ステップ 6:動画クリップを生成する
各発言に pruna/p-video-avatar を使用します。
belt app run pruna/p-video-avatar --input '{
"image": "<character_frame_url>",
"audio": "<tts_audio_url>",
"resolution": "720p",
"video_prompt": "..."
}' --save output.json
重要:クリップは並列ではなく、順番に実行してください。 並列で実行すると同じ GPU を使うため、CUDA OOM エラーが発生します。各クリップの所要時間は、音声の長さに応じて15〜90秒です。
アングルの割り当て方針: 見た目に変化をつけるため、各発言で正面ショットとクローズアップショットを交互に使います。6つの発言の場合の例:
T1: Speaker A — front
T2: Speaker B — front
T3: Speaker C — front (or close-up)
T4: Speaker A — close-up
T5: Speaker B — close-up
T6: Speaker A — front
ステップ 7:結合する
infsh/media-merger を使用して、すべてのクリップをつなぎ、最終動画を作成します。
# Build input JSON
{
"media_files": [
{"file": "<clip1_url>"},
{"file": "<clip2_url>"},
...
],
"fps": 24,
"output_format": "mp4"
}
belt app run infsh/media-merger --input merger_input.json --save final.json
結合ツールは無料で、全体の長さに応じて2〜6分かかります。
ルール
-
Gemini は人間の顔の同一性を保持しません — Gemini で実在する人間の別アングルを生成すると、別人になります。同一人物の人間ショットを生成するには、学習済みの profile_id を設定した Phota を使うか、すべてのアングルを1回のバッチで生成します。これは、正面ショットと一致させるはずのクローズアップで、Gemini がまったく別の顔を生成したことで分かりました。
-
p-video-avatar のクリップを並列で実行してはいけません — GPU メモリを取り合い、CUDA OOM エラーが発生します。順番に実行してください。並列実行した3件のうち2件が失敗したことで分かりました。
-
speaking_rate を1.0未満に設定してはいけません — 不自然で、聞き手の関心を損なう話し方になります。デフォルトは1.05にしてください。0.9の話速は「違和感があり、聞いていて興味が失せる」というユーザーのフィードバックから分かりました。
-
動画を生成する前に、必ずフレームを QA してください — 動画生成はパイプラインで最もコストがかかる工程です。画像の段階でマイクが二重になっていたり、ロゴが間違っていたりすることに気付けば、簡単に修正できます。動画生成後に気付いた場合は、クリップ全体を再レンダリングする必要があります。
-
個々の話者ショットでは、必ずタイトなフレーミングを使ってください — ワイドショットや状況説明のショットでは、ほかの話者が座っているはずの席が空席として映ります。空席が見えないように、腰から上、または胸から上をフレームに収めます。
-
ブランドキャラクターを生成するときは、必ずロゴを参照画像として渡してください — ロゴをテキストで説明すると、正しく生成されません。実際のロゴファイルを2枚目の画像入力として渡してください。
-
本番制作の前に、必ず音声の承認を得てください — 同じセリフで5〜8種類の候補音声のサンプルを生成し、本番に進む前にユーザーに選んでもらいます。
-
スクリプトは広告ではなく、会話のように聞こえる必要があります — 順番に広告文を読み上げるような話し方は不自然です。反応、割り込み、発言の長さの変化、率直な質問を入れます。ホストには個性を持たせ、話題を振るだけの役割にしないでください。
アプリリファレンス
| アプリ | 用途 |
|---|---|
pruna/p-image | テキストからポートレートを生成 |
phota/train | 30~50 枚の顔画像から本人プロファイルをトレーニング |
phota/generate | トレーニング済みの本人情報を使い [[profile_id]] で画像を生成 |
phota/edit | 既知の被写体の本人性を保ちながら画像を編集 |
google/gemini-3-pro-image | 画像の生成・編集、マスコット、スタイル転送 |
inworld/text-to-speech-2 | テキスト読み上げ、100 以上の言語、音声調整 |
pruna/p-video-avatar | ポートレート + 音声 → トーキングヘッド動画 |
infsh/media-merger | 動画クリップを 1 本の動画に連結 |
belt task cost <task-id> を使うと、個々のタスクのコストを確認できます。