Communitygithub.com

MrIago/whiteboard-explainer-video

ホワイトボードの説明動画(Excalidraw調の手描き風)を作成します。ナレーションに合わせて図が描かれ、カメラがひとつのボード上を移動し、最後に全体を見せる引きのショットで締めくくります。OpenRouterまたはElevenLabsで台本・音声生成、単語単位の同期、RemotionでMP4 16:9にレンダリング。説明動画やホワイトボードが欲しいと言われたら、スキル名が指定されていなくても常に使用します。

whiteboard-explainer-video とは?

このスキルは、手描きホワイトボード説明動画を自動生成するためのものです。Excalidraw風の描線がナレーションと完全に同期して描かれ、カメラがひとつの大きなボード上を移動しながら説明が進み、最後に全体像を見せる引きのショットでまとめます。OpenRouterまたはElevenLabsを使用してナレーション音声を生成し、RemotionでMP4 16:9形式にレンダリングします。主な用途は、システム、製品、プロセス、書籍、アイデアなどの説明動画で、ユーザーが「説明動画」「ホワイトボード」「解説」と依頼した場合に自動的に呼び出されるように設計されています。制作手順は、プロジェクト作成、台本の区切り書き、音声サンプルの選択と生成、セクションの連結、世界地図のような領域割り当て、各領域の描画と単語へのアンカー、カメラワークと最終レンダリングという10ステップで構成されます。品質管理として、静止フレームや黒画面の検出、ラウドネス測定(-14~-16 LUFS)などが自動化されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add MrIago/whiteboard-explainer-video

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

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

ドキュメント

ホワイトボード説明動画

ナレーターが話すのに合わせて描かれるホワイトボード。見終わった人は頭の中に全体像が浮かびます。

スタイルを成立させるために不可欠な要素:

  • すべての図は、音声がその部分を話すその瞬間に描かれます。準備完了の状態で表示されるものはありません。
  • ボードはひとつだけ:カメラは移動しますが、説明済みの内容はその場に残り続けます。
  • 最後の引きのショットでボード全体が見え、それが動画の要約になります。これは、描き始める前に全体のマップを計画しておかないと機能しません。
  • 実際のアプリや実物がある場合は、描かれたウィンドウの中にスクリーンキャプチャを入れることで、描画の主張を証明します。

SD はこのスキルのフォルダを指します。コマンド例:node "$SD/scripts/..."。

始める前に

  1. node "$SD/scripts/config.mjs"。キーがない場合は、ユーザーにいずれかひとつを選んでもらい、値をチャットに表示せずに保存してください。
    • OpenRouter(openrouter.ai/keys):音声と文字起こしが可能。設定:node "$SD/scripts/config.mjs" OPENROUTER_API_KEY=...
    • ElevenLabs(elevenlabs.io/app/settings/api-keys):設定:node "$SD/scripts/config.mjs" ELEVENLABS_API_KEY=...
  2. Node 20+ と ffmpeg が必要です。不足している場合は、ユーザーのOSに合わせたインストール方法を説明してください。
  3. 構築を始める前に、以下を明確にしておきます:テーマ、対象者、尺、言語、そして動画で何を明確に伝えるか。依頼が明確になったら、質問せずに進めてください。

制作の手順

#ステップ出力
1node "$SD/scripts/new-project.mjs" <フォルダ名>Remotionプロジェクト
2短い区切りごとに台本を作成。各区切りはひとつの話題に絞り、番号は付けないscript/script.md
3動画が1分以上の場合:3つのサンプル(narrate.mjs <フォルダ名> --samples "最初のフレーズ")を生成し、ユーザーに選んでもらう。script/voice.json に保存。短いテストではデフォルトを使用音声
4node "$SD/scripts/narrate.mjs" <フォルダ名>public/audio/、src/data/narration.json
5各区切りを src/sections.ts で連結タイムライン
6ワールドマップ:各区切りにひとつの領域を割り当て、動画のパートごとにグループ化定数 R_*
7一度にひとつの領域:描画、単語へのアンカー設定、スチルでの確認src/scenes/*.tsx
8カメラワークとクロージングsrc/Video.tsx
9npx remotion studio src/index.ts でユーザーが確認できるように(ユーザーがレビューを希望する場合)OK
10一部レンダリング→確認、全体レンダリング→確認、ラウドネス調整out/video.mp4

シーン src/scenes/Example.tsx は単なるテンプレートです:削除して、テーマに合わせたボードを描き直してください。動画ごとに独自の描画を持ちます。

ステップ6の前に references/method.md を読んでください。動画にスクリーンキャプチャが含まれる場合は、references/screens.md も読んでください。

台本

**s01**
区切りの話すテキスト。ひとつの段落のみ。
  • 読み上げるためのフレーズであり、文字テキストではありません。簡潔な句読点を使用:ダッシュや三点リーダーは不自然な沈黙を生みます。
  • 読み方が重要な数字は漢数字または英単語で表記します。
  • 各区切りは必ず描画可能な内容にしてください。描けない場合は書き直します。
  • 動画を長く使えるようにするため、日付は入れないでください。すべての数字には出典が必要です。

確認:あなたは動画を見ないので、フレームを読みなさい

npx remotion still src/index.ts Whiteboard /tmp/f.png --frame=N --scale=0.5
node "$SD/scripts/render.mjs" <フォルダ名> --frames=0-299
node "$SD/scripts/qa.mjs" sheet <フォルダ名>/out/video.mp4 24    # コマ送り:繰り返し部分や重なりを探す
node "$SD/scripts/qa.mjs" scan  <フォルダ名>/out/video.mp4       # 静止フレーム、黒画面、ちらつきフレームを検出
node "$SD/scripts/qa.mjs" loud  <フォルダ名>/out/video.mp4       # 目標 -14 ~ -16 LUFS、ピーク -1 dBTP まで

scan は視覚的な停滞を測定します:5%以上静止していると、動画がスライドのように見えます。テスト段階でも、フレーズあたりの図の数を増やし、細部にカメラのキーフレームを入れて修正してください。カメラの息づかいだけでは静止としてカウントされます。

画像を開いて確認してください。コマ送りを見ず、音声も測定せずに「良くなった」と言わないでください。

useCurrentFrame のみを使用したエフェクトにしてください:CSSの transition や animation はレンダリングに反映されません。

関連スキル