Communitygithub.com

デモビデオ / Demo Video

プロジェクトのライブサイトやアプリのナレーション付きデモまたはプロモーションビデオを作成します。スクリプト化されたブラウザ録画、Gemini音声、キャプション、BGM、ffmpeg編集、共有可能なリンクを生成します。ユーザーがシステムの動作を動画で見たいとリクエストしたときに使用します。

Demo Video とは?

このスキルは、ブラウザ録画、AI音声合成、キャプション、BGMを含むフルHD(1080p)MP4動画を生成するエンドツーエンドのパイプラインを提供します。典型的な成果物は1~3分、10~20MBで、エージェント作業時間は約1~2時間です。すべての作業はコンテナ内で実行され、agent-browser、ffmpeg、プロジェクトのAIプロキシを使用します。動画は`video/`ディレクトリ内に生成され、`build/`と`out/`はgit管理から除外されます。スキルはセットアップ、スクリプト作成(narrator.json + scenes.mjs)、音声合成(Geminiモデルを使用)、ブラウザ録画(take_start/mark/take_stop)、カード生成(HTMLカードの録画)、効果音、編集(compose.mjsによるシーン編集)、品質保証(listen.mjsとフレーム抽出)、公開(ストレージへのアップロード)の各ステップで構成され、各ステップは再開可能です。特に音声はプロキシにTTSモデルがないため、Gemini Liveモデル(gemini-3.8-live)を使用して各行をそのまま読み上げ、3回の試行から最良のものを選択します。編集では、待機時間の高速化、小さなテキストへのズームイン、チャプターチップ、キャプション位置の調整、成功時のチャイム効果音などが可能です。BGMはライセンスリスクのない合成音(またはユーザー提供のトラック)で、音声に合わせて自動的にダッキングされます。公開時には正しいコンテンツタイプでストレージにアップロードし、CDN経由の公開リンクまたはサムネイル画像を生成します。

対応✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/open-kbs/skills-demo-video/tree/HEAD/skills/demo-video

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

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

ドキュメント

デモビデオ

プロジェクトのライブサイトまたはアプリを実演するフルHD MP4を生成します。実際の画面録画、ユーザーの言語によるナレーション、埋め込みキャプション、BGM、そして共有リンクを含みます。すべてコンテナ内でagent-browser、ffmpeg、プロジェクトのAIプロキシを使用して実行されます(料金はプロジェクトのクレジットに請求されます)。典型的な成果物:1~3分、10~20 MB、エージェント作業時間約1~2時間。すべての作業は video/ ディレクトリ内で行われます(build/ と out/ はgit管理から除外)。

使用するタイミング

  • 「システムの動作を示す動画を作って」、プロモーション、広告、クライアントデモ
  • オファー、リリースノート、ランディングページのためのウォークスルー
  • ユーザー自身が録画する場合には使わないでください。その場合は docs/demo/script.md に撮影スクリプト(シーン、アクション、言うべきテキスト)を書いてください。

パイプライン(各ステップは再開可能:再実行は完了した出力をスキップ)

ステップコマンド出力
0. セットアップbash .claude/skills/demo-video/setup.shffmpeg、キャプションフォント、video/ フォルダ
1. スクリプトvideo/vo/narrator.json と video/scenes.mjs を作成(examples/ から開始)計画
2. ナレーションnode .claude/skills/demo-video/tts.mjs video/vo/narrator.json video/build/vos01.wav… + s01.txt(実際に話された内容)
3. 録画source .claude/skills/demo-video/rec-lib.sh の後、take_start、mark、take_stopvideo/build/rec/<take>.mp4 + .marks
4. カードcard_take <name> "file://$PWD/video/cards/<name>.html?…" <秒数>video/build/rec/card-<name>.mp4
5. 効果音node .claude/skills/demo-video/sfx.mjsvideo/build/sfx/chime.wav、click.wav
6. 編集node .claude/skills/demo-video/compose.mjs video/scenes.mjsvideo/out/<name>.mp4(BGMなしの場合は自動生成)
7. QAnode .claude/skills/demo-video/listen.mjs video/out/<name>.mp4 "<質問>" とフレーム抽出修正後、ステップ6を再実行
8. 公開node .claude/skills/demo-video/publish.mjs video/out/<name>.mp4 --cover 16プロジェクトストレージ内のキー + サムネイルJPG

(npx skills add でインストールした場合は .agents/skills/demo-video/ となります。)

良いビデオを作るために

スクリプトを先に。 ナレーターの台詞は10~15行、1行に1つのアイデア、8~15語、ユーザーの言語で。事実のみ:プロジェクト自身のデータで確認できない数字、顧客、受賞歴を主張しないこと。ブランド名や頭字語は pronounce に記述して正しく読ませます。各行は1つのシーンに対応します。

音声。 プロキシにはTTSモデルはありません。tts.mjs はLiveモデル(gemini-3.8-live)を使用して各行をそのまま読み上げ、3回の試行から最良のものを選択します(モデル自身の文字起こしとスクリプトを比較し、80%以上の単語一致)。各行につき1つのWAVファイルを書き出します。音声:Kore、Charon、Puck、Fenrir、Aoede。ナレーターには1つの音声、カスタマー役には別の音声を使用します。実行後に s*.txt を読み、異なる行があればそのWAVを削除して再実行します。

録画。 クリーンな状態から開始:新しいブラウザコンテキスト、空のカート、保存されたフォームの下書きなし(agent-browser eval 'sessionStorage.clear()'、同様にアプリが使用する localStorage キーもクリア)、パスワードが画面上で入力されないように録画前にログイン。typeslow で入力、編集でカットするクリックの前に mark <ラベル> を呼び出し、AIの応答は wait_gone "<検索テキスト>" で待機、表示している要素を画面外にスクロールしないこと。ラベルテキストではなく要素参照(snapshot からの @e12)でクリック。take_start はビューポートを1600×900に設定(デフォルトは1280×720で1080pには小さすぎる)。1シーンにつき1テイク。製品に音声エージェントがある場合、実際のAPIを通して実際の対話を録画し(examples/voice-exchange.mjs)、カードとして再生し、偽装しないでください。

カード。 examples/cards/ にはイントロ(アニメーション数字、ロゴ、ピル)、音声通話カード、アウトロがあります。video/cards/ にコピーし、色、ロゴ、テキストをブランドに合わせて変更。URLでタイミングを渡し(?t1=<s>)、アニメーションが音声に合うようにします。

編集(scenes.mjs)。 各シーンはテイクの断片 [テイク, 開始, 終了, 速度, ズーム?] と音声 ['vo:s01', 開始時間] で構成されます。待機時間は2~5倍に高速化、小さなテキストのパネルには zoom で拡大、新しいセクションごとに chapter チップを表示、下部キャプションが表示中のUIを隠す場合は cap: 'left' を使用、成功時(カートに追加、注文完了)には sfx チャイム。編集はシーンごとにキャッシュされ、変更されたシーンのみ再レンダリングされます。

音声。 BGMは compose.mjs により合成されます(ライセンスリスクなし)。音声に合わせて自動的にダッキングされます。scenes.mjs で music: 'path/to/track.mp3' を設定するとユーザー自身のトラックを使用できます。出力は −16 LUFS にノーマライズされます。

納品前にQA。 listen.mjs でミックスをGeminiに送信:発音、誤って読まれた単語、音楽と音声のバランス、グリッチ、長い沈黙について質問します。その後、各シーンから1フレームをフル解像度で取得し(ffmpeg -ss <t> -i out.mp4 -frames:v 1 f.png)、キャプションがUIと重なっていないか、テキストが切れていないか、画面の状態が正しいかを確認します。修正後、ステップ6を再実行します。

納品。 テスト注文/データを削除し、agent-browser close --all を実行、video/ のツールとスクリプトをコミット(build/、out/ は除く)。リンク、ローカルパス、動画で示している内容の短いリスト、そして撮影中に修正した製品のバグ(エンドツーエンドのフローを録画すると実際のバグが見つかることが多いので、修正してください。これらは実際のユーザーに影響します)を提供します。

公開

publish.mjs は、正しいコンテンツタイプでプロジェクトのストレージにアップロードし(通常のストレージアップロードは動画をダウンロードとして提供)、公開URLを出力します。openkbs.json に "storage": { "cloudfront": "media" } がある場合、openkbs deploy がそのパスを設定した後、ファイルは <site>/media/<key> に配置されます。CDNにストレージがない場合は、ファイルを site/ に置いてデプロイするか、openkbs storage download で共有します。--cover <秒数> はJPGフレームもサムネイルとしてアップロードします。

要件

  • Studioコンテナ:ffmpeg(セットアップでインストール)、agent-browser、~/.openkbs/projectJWT 内のプロキシJWT。Studio外では OPENKBS_API_KEY を設定。
  • キャプション用フォントは setup.sh により video/build/fonts にダウンロードされます(Golos Text、Fira Sans Extra Condensed:ラテン文字+キリル文字、OFLライセンス)。

関連スキル