Communitygithub.com

tauseefau/podcast-video

トピックを、二人のホストによるナレーション付きポッドキャストビデオに変換します。VoiceStudioのローカル音声とHyperFramesを使用し、ユーザーへのインタビューを経て、1080pのMP4ファイルとしてレンダリングします。ユーザーがポッドキャストビデオ、AI音声による会話ビデオ、またはポッドキャスト形式のYouTube解説動画を作成したい場合に使用します。

podcast-video とは?

このスキルは、AIエージェントがユーザーと対話しながら、二人のホストによるポッドキャスト形式のビデオを自動生成するためのものです。ユーザーは最初に徹底的な「インタビュー」を受け、ビデオの内容、トーン、ホスト、長さなどの重要な決定を事前に行います。その後、スキルはローカルのVoiceStudioサーバーを使用して音声を生成し、HyperFramesを使用してビデオを構築します。各トピックには独自の背景写真、タイトルカード、アイコン、スピーカーラベルが割り当てられ、トピックの切り替わり時にはフルスクリーンのワイプエフェクトやサウンドエフェクトが適用されます。最終的には、1920x1080のMP4ファイルとしてレンダリングされ、サブスクライブボタンやクレジットが含まれます。このスキルは、Claude Code、Cursor、Codexなどのデベロッパーツール向けに設計されており、高品質なポッドキャストビデオを効率的に作成するためのワークフローを提供します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tauseefau/podcast-video-skill/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ポッドキャストビデオ

1920x1080のビデオを作成し、二人のホストがトピックについて話します。各トピックには独自の背景写真、タイトルカード、アイコン、スピーカーラベルが割り当てられ、アニメーションの声バーが表示されます。トピックが変わるとフルスクリーンのワイプと「ウーッ」という効果音が入り、アイコンは「ポップ」と表示されます。最後のシーンにはサブスクライブボタンとクレジットが含まれます。ユーザー自身のクローン音声で始めることもできます。

構成を変更する前に、/hyperframes を読んでください。以下のスクリプトはこのスキルの scripts/ フォルダにあります。ビデオプロジェクトフォルダから実行してください。

0. 最初にインタビューする

これが完了するまで、調査、作成、生成を行わないでください。レンダリングされたビデオは修正に時間がかかるため、事前に決定を確定させてください。この方法は、Matt Pocockのグリルスキルに基づいています。

決定事項はツリー構造になっています。ある決定が確定するまで質問できないものもあります。ラウンドで進めてください:

  1. 現在、前提条件を満たせるすべての質問をし、まだ回答を得ていない回答に依存する質問はしないでください。その質問は後のラウンドに回します。
  2. 各質問に番号を付け、推奨する回答を、「はい」と答えれば受け入れられるように表現してください。
  3. 回答を待ち、それによって何が可能になったかを判断し、次のラウンドの質問をします。回答によって、予定していた質問が無意味になる場合もあります。その場合は削除してください。

各質問は次のようにフォーマットしてください:

❓ **Q1** - **<タイトル>**: <質問>

➡️ <推奨する回答>

事実はあなたの仕事であり、決定はユーザーの仕事です。 自分で調べられることをユーザーに尋ねないでください。例えば、VoiceStudioが実行中かどうか、どの音声プロファイルが存在するか(GET /profiles)、フォルダに何が入っているか、調査結果はどうかなどです。彼らの代わりに決定を下さないでください。プレーンテキストで質問し、ユーザーが自分の言葉で回答できるようにしてください。

カバーすべき決定事項(おおよそこの順序):

ラウンド決定事項
1トピックと具体的な視点。誰が見るのか、視聴者は何を既に知っているのか。視聴者はその後何をすべきか。目標の長さ。
2二人のホスト:彼らは誰で、どのような関係か(例:専門家と顧客)。トーン。番組名。ユーザー自身の声で始めるかどうか。
3ユーザーの声で始める場合:どのプロファイルか、正確な文言。デザインされたホストのアクセントと声の特徴。
4調査後:どの調査結果を使用するか、除外してほしい主張。トピックのリスト(順序付き)。
5見た目と音:写真の種類、各トピックのアイコン、ワイプ、効果音、ポップ音への変更。ビデオはどこで公開されるか。

リクエストで既に回答されていることはスキップしてください。「そのまま進めて」や「あなたが決めて」と言われたら、質問をやめ、推奨する回答を採用し、リストアップしてください。質問数に制限はありませんが、意味もなく質問しないでください。すべての質問はビデオに変化をもたらすものでなければなりません。

最後に、計画を数行で要約してください:トピック、視聴者、長さ、ホスト、冒頭、トピックリスト、コールトゥアクション。ステップ1を開始する前に、ユーザーの確認を待ってください。 後で調査結果が視点を覆すなど、決定を再検討する必要が生じた場合は、一度停止してユーザーに確認してください。

1. セットアップを確認する

  • curl -s "$VOICESTUDIO_URL/profiles" が応答するはずです。デフォルトURL: http://localhost:3000。サーバーにAPIキーがある場合、VOICESTUDIO_API_KEY が設定されている必要があります。APIキーをプロジェクトファイルに書き込まないでください。
  • ffmpeg と node がPATHに含まれていること、およびHyperFramesスキルがインストールされていることを確認してください。

何か不足している場合は、停止し、ユーザーをこのスキルのREADMEに誘導してください。

2. プロジェクトを作成する

npx hyperframes init <dir> を実行し、templates/script.example.json を <dir>/script.json にコピーします。

3. 調査し、script.json を作成する

まずトピックを調査します。すべての統計には実際の出典が必要です。そのシーンの source フィールドに記述し、数値をでっち上げないでください。自然な話し言葉で書き、毎分約150語を目安にしてください。

フィールド意味
show番組名。すべてのシーンに表示されます
chips最後のシーンのクレジットラベル
voicesスピーカーごとに1エントリ。name、role、color、および profile_id または instruct と seed のいずれか
scenes表示順に並べます。kicker、title、icon、オプションで sub と source。最後のシーンはアウトロです
lines発言の順序:who、scene、text。各シーンの発言は連続している必要があります

icon は、トピックに適したLucideアイコン名です(例:phone-call)。

ユーザー自身のクローン音声で始めるには、VoiceStudioの profile_id(GET /profiles から取得)を持つ音声を追加し、その音声専用の最初のシーンを与え、発言の最後に「始めましょう!」などの引き継ぎフレーズを付けます。所有者の許可なく音声をクローンしないでください。

音声を生成する前に、スクリプトをユーザーに表示してください。

4. 音声を生成する

python3 <skill>/scripts/make_voice.py

これにより、assets/audio/ と assets/lines.json が作成されます。音声はキャッシュされるため、スクリプトを編集した後は変更された部分のみが生成されます。ユーザーが音声を再クローンする場合、assets/audio/ からその音声を削除して再生成させる必要があります。最初にプロファイルの ref_audio_path が変更されたことを確認してください。保存されなかったクローンは古い音声をそのままにしてしまいます。レンダリングする前に、ユーザーに音声を聴いてもらってください。

5. 画像、アイコン、効果音を追加する

画像: 各シーンには assets/img/<シーンID>.jpg が必要です。ランドスケープで、少なくとも幅1920ピクセル、さらに前のシーンとは異なる写真を使用し、すべてのトピック変更が視覚的にわかるようにしてください。ユーザーが公開可能な画像のみを使用してください(例:Wikimedia CommonsのCCライセンス写真)。各画像を assets/img/credits.json に次のように記録します:{"<シーンID>": {"artist": "...", "license": "...", "page": "..."}}。最後のシーンにアーティスト名を表示します。

アイコン:

npm pack [email protected] --silent && tar xzf lucide-static-0.460.0.tgz
mkdir -p assets/icons && cp package/LICENSE assets/icons/LICENSE
cp package/icons/<アイコン名>.svg assets/icons/   # 各シーンアイコンに対して1回
rm -rf package lucide-static-0.460.0.tgz

効果音: 以下を実行し、それぞれが出力するファイルをコピーします:

npx hyperframes media-use resolve --type sfx --intent "short whoosh transition" --project .
npx hyperframes media-use resolve --type sfx --intent "quick pop badge" --project .
mkdir -p assets/sfx
cp <whoosh path> assets/sfx/whoosh.mp3
cp <pop path> assets/sfx/pop.mp3

CC BYライセンスのサウンドは、chips を通じて最後のシーンでクレジットしてください。

6. ビルドとチェック

python3 <skill>/scripts/build.py を実行し、次に npx hyperframes check を実行します。すべてのエラーを修正します。次に npx hyperframes snapshot --at <秒数> を実行し、レンダリング前にシーン変更時のフレームを確認します。ワイプは、build.py が出力するシーン開始時間にフルスクリーンで表示されます。

7. レンダリング

npx hyperframes render を実行します。MP4ファイルは renders/ に出力されます。ビデオ1分あたり数分かかると想定してください。

ファイルを確認し、次に測定結果をユーザーに伝えます:npx hyperframes audio <ビデオ> --json は、音声が存在するかどうか、ラウドネスが適切な範囲内かどうかを示します。音は測定できても聞くことはできないため、ユーザーに聴いてもらうよう依頼してください。

関連スキル