AIポッドキャスト生成スキル は何をしますか?
inference.shパイプラインを使用して、複数人が話すトークヘッド形式のポッドキャスト動画を作成します。プロセスは「ポートレート生成 → TTS音声 → アバター動画 → マージ」です。実在の人間(Photaを使用)、3Dマスコット、イラストキャラクター、およびこれらを混在させたキャストをサポートします。
ユーザーがポッドキャスト、トークヘッド動画、デモリール、プロモーション用の対話、または複数の話者が登場する動画コンテンツを作成したい場合に使用します。
パイプライン概要
キャラクター (画像) → TTS (ターンごとの音声) → アバター (ターンごとの動画) → マージ (最終動画)
プロセス
ステップ 1: キャラクター作成
キャラクタータイプに応じて適切なツールを選択します。
| キャラクタタイプ | ツール | 備考 |
|---|---|---|
| 実在の人間 (新規) | pruna/p-image | 16:9、prompt_upsampling: true。高速でトレーニング不要ですが、複数回の生成で同一性は保証されません。 |
| 実在の人間 (同一性維持) | phota/generate ([[profile_id]]を使用) | すべてのショットで同一の外見を維持します。事前にPhotaプロファイルのトレーニングが必要です(下記参照)。 |
| ブランドマスコット/ロゴキャラクター | google/gemini-3-pro-image-preview | ロゴとキャラクターシートを参照画像として渡します。 |
| イラスト/スタイライズド | google/gemini-3-pro-image-preview | スタイル参照として入力画像を渡します。 |
Photaアイデンティティのトレーニング(人間には推奨、ただし必須ではありません):
複数のアングルやショットにわたって一貫した同一性を持つ実在の人間キャラクターが必要な場合は、まずPhotaプロファイルをトレーニングします。
infsh app run phota/train --input '{
"images": ["url1.jpg", "url2.jpg", ...],
"wait": true
}' --save profile.json
- 被写体の顔画像が30~50枚必要です。
wait: trueを指定すると、トレーニングは数分で完了します。phota/generateでプロンプトに[[profile_id]]として使用するprofile_idを返します。- プロファイルは永久に再利用可能です。一度トレーニングすれば、無制限にショットを生成できます。
ショット間の一貫性が不要な場合(例:単一話者の動画、単一アングルのみ)は、pruna/p-imageの方がシンプルで低コストです。
キャラクターシート → ポッドキャストフレーム の順序:
- 各キャラクターのキャラクターシート(無地の白背景、複数アングル)を生成します。
- 次に、そのシートを参照として使用し、キャラクターをポッドキャストスタジオの設定に配置します。
ブランドキャラクター(服にロゴがある場合):
- プレーンなバージョンの衣装を着たキャラクターを生成します。
- ロゴを2番目の参照画像として
phota/editを使用し、ロゴを追加します。 - 新しいアングルを生成する際は、常にキャラクターの参照画像と一緒にロゴ画像も渡します。
ステップ 2: アングルを変える
視覚的なバリエーションのために、キャラクターごとに少なくとも2つのアングルを生成します。
| アングル | 使用タイミング |
|---|---|
| 正面/ミディアム | 導入ショット、オープニング、クロージング |
| クローズアップ | リアクション、感情的な瞬間、インパクトのあるセリフ |
クローズアップの場合は、「タイトなフレーミング、バストアップ、被写界深度を浅く」とプロンプトします。「横向き」とすると、単にキャラクターがそっぽを向いてしまいます。
同一性維持ルール:
- Photaプロファイルを持つ実在の人間の場合:新しいアングルには
phota/generateまたはphota/editを使用します。Geminiは顔の同一性を保持せず、別人を生成します。 - Photaプロファイルを持たない実在の人間の場合:
pruna/p-imageで必要なアングルを一度に生成するか、多数のショットが必要な場合はPhotaプロファイルのトレーニングを検討します。 - マスコット/イラストの場合:Gemini 3 Proで問題ありません。作成済みのフレームを参照として渡します。
フレーミングルール: 個々の話者にはタイトなフレーミングを使用します。複数席のあるワイドショットは、一人だけが画面に映っているときに空席が目立ちます。
ステップ 3: フレームの品質確認(QA)
次の工程に進む前に、すべてのフレームを目視で検査します。
- 背景に余分な人がいないか
- マイクが複数本映っていないか(ショットごとに1本であるべき)
- ロゴが間違っていたり歪んでいたりしないか
- キャラクターの同一性がアングル間で一貫しているか
- 奇妙なアーティファクト(余分な手足、オブジェクトの結合など)がないか
動画生成前に問題を修正します。動画の再レンダリングはパイプラインの中で最もコストがかかるステップです。
ステップ 4: スクリプトを作成する
自然な会話のルール:
- 実際の会話のように書きましょう。順番に広告コピーを読み上げるような書き方は避けます。
- リアクション(「ちょっと待って」「それはすごい」)、遮り、フォローアップの質問を含めます。
- ターンの長さに変化をつけます。短いリアクション(1文)と長めの説明(2~3文)を混ぜます。
- ホストは、明らかな話題を提示するのではなく、本当の質問をします。
- ターゲットとなる合計時間を念頭に置きます。自然な話速の1.05倍で、約2.5語/秒です。
時間の目安:
| 目標 | 単語数 |
|---|---|
| 15秒 | 約38語 |
| 30秒 | 約75語 |
| 60秒 | 約150語 |
ステップ 5: TTS音声を生成する
各ターンにinworld/text-to-speech-2を使用します。
infsh 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ターンは並行して実行できます(低コスト、高速で約2~8秒)。
ステップ 6: 動画クリップを生成する
各ターンにpruna/p-video-avatarを使用します。
infsh 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: スピーカーA — 正面
T2: スピーカーB — 正面
T3: スピーカーC — 正面 (またはクローズアップ)
T4: スピーカーA — クローズアップ
T5: スピーカーB — クローズアップ
T6: スピーカーA — 正面
ステップ 7: マージ(結合)
infsh/media-merger を使用して、すべてのクリップを最終的な動画に結合します。
# 入力JSONを作成
{
"media_files": [
{"file": "<clip1_url>"},
{"file": "<clip2_url>"},
...
],
"fps": 24,
"output_format": "mp4"
}
infsh 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-preview | 画像生成/編集、マスコット、スタイル変換 |
inworld/text-to-speech-2 | テキスト読み上げ、100以上の言語、音声制御 |
pruna/p-video-avatar | ポートレート+音声 → トークヘッド動画 |
infsh/media-merger | 動画クリップを1つの動画に連結 |
個々のタスクのコストを確認するには、belt task cost <task-id>を使用します。