ストーリーボード
ストーリーボードは、1本の動画の撮影計画兼編集計画です。ユーザーが上から下まで読み、各撮影シーンを撮り、各ショットを編集(またはClaude)に渡す際に、画面に何が映り、テキストは何で、サウンドは何かが明確になっている必要があります。
シンプルに保つこと。 ショットと撮影シーンだけ。アーク図、ショット間のトランジション、ブランドキット、チェックリストは不要です。ユーザーがさらに必要と感じた場合は、その時点で尋ねます。
初回実行:ガイド付きセットアップ
~/.claude/storyboard-profile/profile.md がまだ存在しない場合(スキルインストール直後)、またはユーザーがセットアップやスタイルの再学習を依頼した場合に実行します。一度に一つずつ手順を進め、各ステップの目的を一文で説明し、実行し、「質問」と指示されたところで待機します。メッセージはすべて短く保ってください。ほとんどのユーザーはクリエイターであり、開発者ではありません。
-
歓迎。 短いメッセージ1つ:スキルの機能(スクリプトを入力すると、各行にフレームが出力され、Claudeがグラフィックを構築する)と、セットアップに約5分かかることを伝えます。次に、最初に必要なのは彼らの動画を見ることだと伝えます。
-
ツールの確認。 Python 3、Google Chrome(または Chromium / Edge)、
ffmpegがインストールされているか確認します。yt-dlpはリンク用のボーナスです。不足しているものがあれば、そのシステム用のインストールコマンドを1つ示し(例:Mac ではbrew install ffmpeg、Windows ではwinget install ffmpeg)、実行を提案します。Chrome と ffmpeg が動作するまで次に進みません。 -
ユーザーについて尋ねる。 1メッセージで、各項目を1行で回答:ハンドル名とプラットフォーム、コンテンツの内容、動画の通常の長さ、動画の締めくくり方(コメントキーワード、フォロー、リンク in bio など)。
-
動画を依頼する。 ここが重要なステップなので、理由を説明します:ストーリーボードはテンプレートではなく、彼らの動画のように見えるべきだからです。スタイルを最もよく表している公開動画を3~5本依頼し、可能であれば画面収録やグラフィックを含むものを1本含めるよう伝えます。ファイルをチャットにドラッグ&ドロップ(パスが貼り付けられる)するか、リンクを貼ってもらいます。
yt-dlpがインストールされていればリンクをダウンロードし、ダウンロードできないリンクの場合はファイルを直接依頼します。すべてのファイルを~/.claude/storyboard-profile/source/に保存します。 -
動画を分析する。 各動画について:
- フレーム抽出:
ffmpeg -i v1.mp4 -vf "fps=1,scale=360:-2" -q:v 4 source/v1_%03d.jpgを実行し、フレームを確認します。 - カット検出:
ffmpeg -i v1.mp4 -vf "select='gt(scene,0.1)',showinfo" -f null - 2>&1 | grep -o "pts_time:[0-9.]*"でカット時間を取得し、平均ショット長を計算します。トーキングヘッドのジャンプカットは画像の変化が小さく検出されにくいため、1fpsのフレーム数と比較して確認します。 - 音声認識:
whisper(または他の文字起こしツール)がインストールされていれば文字起こしします。そうでなければ、フレームに焼き付けられたキャプションを読み取るか、ユーザーにスクリプトを貼り付けてもらいます。
実際に観察された内容を記録し、推測は避けます:ショットタイプの構成(顔、画面、Bロールの割合)、平均ショット長、フレーミング(ミドル or クローズ、被写体の位置、背景)、最初の2秒のフック、画面上のテキスト(フォントの太さ、大文字小文字、色、ハイライトスタイル、配置)、キャプションスタイル、主要な色、繰り返し使用されるグラフィックやオーバーレイ、音声の習慣、CTAの着地方法。
- フレーム抽出:
-
顔写真の静止画を選ぶ。 キャプションが焼き付けられていない、カメラに向かって話しているクリーンなフレームを選び、9:16にクロップし(
ffmpeg -ss <t> -i v1.mp4 -frames:v 1 -vf "crop=ih*9/16:ih,scale=540:960" face.jpg)、~/.claude/storyboard-profile/face.jpgとして保存します。以降、すべての顔ショットでこれを使用します。 -
プロファイルを書く。
~/.claude/storyboard-profile/profile.mdを保存し、セクションを作成します:Creator(ステップ3)、Shots(タイプ構成、平均長、フレーミング)、Hook、On-screen text、Captions、Colors、Sound、CTA、Recurring graphics。次に~/.claude/storyboard-profile/theme.cssを書き、キットの変数を彼らのルックにオーバーライドします::root { --ink: #111; --accent: #ff5a1f; --on-accent: #fff; --bg: #f4f1ea; --grid: rgba(0,0,0,.05); --font: "Montserrat", sans-serif; }インストールされているフォントを使用します。彼らのフォントがない場合は、最も近いものを選びます。
-
表示して確認する。 サンプルフレーム(彼らの見出しスタイルを顔写真の上に重ねたもの)を1つ作成し、レンダリングし、プロファイルの3行の要約とともに表示し、おかしい点を尋ねます。ユーザーが「自分のコンテンツっぽい」と言うまで修正します。
-
引き渡し。 セットアップが完了したことと、次のステップを伝えます:「スクリプトを貼り付けて、ストーリーボードを作成して、と言ってください。」スタイルが変わったらいつでもセットアップを再実行できます。
ユーザーがセットアップをスキップしたい場合は、キットのデフォルトルックでストーリーボードを作成し、最後にセットアップを再度提案します。
フォーマット
各ショットは以下のフィールドを持ちます:
| フィールド | 内容 |
|---|---|
type | face(カメラに向かって話す)、split(上部に画面、下部に丸い枠の顔)、screen(画面収録)、graphic(編集で作成)、b-roll(実写映像) |
vo | このショットで話される正確なスクリプトの単語 |
on_screen_text | フレームに焼き付けられるテキスト(通常は空白) |
edit_note | 1~2行:画面に表示されるもの、動き、フレーミング |
sfx | サウンド(通常は空白) |
thesis | 正確に1つのショットで true |
status | real(フレームがそのまま映像)、stand-in(意図を示す)、to-capture(まだ未撮影) |
タイミングはVOから 1秒あたり3.4語 で計算されます。手動で設定してはいけません。
撮影シーンは、撮影場所ごとにショットをグループ化します:label、detail(準備するもの)、shots(ショット番号)。
手順
-
プロファイルを読み、スクリプトを取得する。
~/.claude/storyboard-profile/profile.mdを読み、それに従います:彼らのショット長、ショットタイプの構成、テキストスタイル、CTA。デフォルトと矛盾する場合はプロファイルが優先されます。プロファイルがない場合は、まずセットアップを提案します。スクリプトが会話やファイルにない場合はスクリプトを要求し、ターゲット長(明示されなければプロファイルの通常の長さ)をメモします。スクリプトは編集しません。行が正しく読めない場合は、その旨を伝え、ユーザーに修正を任せます。 -
スクリプトをショットに分割する(一字一句)。 結合した場合、
voフィールドはスクリプトと完全に一致しなければなりません。言い換え、トリミング、行の追加は行わない。- 映像が変わる箇所で区切る。 文の終わりで区切らない。カンマは適切な区切り位置です。
- 1ショットあたり2~6秒を目指す(7~20語)。 約8秒を超える場合は分割する。ただし、1つの連続した映像がそのラインを本当に伝えている場合は除く。
- ショット1には話者の顔が含まれていること(
faceまたはsplitショット)。 最初の1秒で顔があると視聴者が引きつけられます。 - 正確に1つの
thesisショットをマークする: 動画のテーマを示すライン。 - 最後のショット: 話者の顔が行動喚起(CTA)を言っていること。コメントキーワードがある場合は、話し言葉でキャプションに含め、大きなオンスクリーンピルとしては表示しない。
- タイプを変化させる。 3連続で
faceショットを続けない。faceは主張、余談、CTAに使用し、screenは表示するものに使用する。
-
フィールドを控えめに埋める。
on_screen_text:ショット1の見出し、リスト番号(01 SCRIPT)、最大1つのオチ。その他は空白。残りはキャプションが担う。edit_note:画面に表示されるもの、動き、フレーミング(ミドル or クローズ)。プライバシーに関する注意もここに:メールをぼかす、ユーザー名を含むファイルパスをトリミングする。sfx:動画全体で2~3回、何かが着地する場所のみ(オープンのピン、公開時のヒット)。
-
撮影場所ごとにショットを撮影シーンにグループ化する(ショット順ではない)。
- Face(顔): すべての
faceショットと、すべてのsplitの顔部分に対して1つの撮影シーン。 - Screens(画面): アプリやツールセッションごとに1つの撮影シーン。同じ実際のプロジェクトを一貫して使用する。
- Away from the desk(デスク以外): Bロールショットに必要な場合のみ。
detail: 準備するもの(どのプロジェクトを開くか、何を実行しておくか、最初に画面から何を消すか)。
- Face(顔): すべての
-
storyboard.jsonを書く。 ユーザーのワーキングディレクトリ内のstoryboard/<video-slug>/フォルダに作成します(適切な場所があれば尋ねる):{ "title": "AI edits my videos", "target_seconds": 50, "shots": [ {"type": "face", "vo": "My last couple of videos were all edited by Claude.", "on_screen_text": "CLAUDE EDITS MY VIDEOS", "edit_note": "Mid shot, headline holds 4s.", "sfx": "", "thesis": false, "status": "to-capture"} ], "sittings": [ {"label": "Face", "detail": "Same shirt and light for every face line.", "shots": [1]} ] } -
すべてのショットのフレームを作成する(次のセクション)、
frames/f01.html、frames/f02.htmlとして。番号はショットの位置です。 -
レンダリング:
python3 <this skill's folder>/kit/render.py storyboard/<video-slug>これにより、ヘッドレスChromeを使用して
frames/out/fNN.png(540x960)、frames/out/contact-sheet.jpg、およびboard.html(各フレームとそのVO、テキスト、編集ノート、サウンド、タイミング、撮影シーンを並べて表示)がレンダリングされます。実行時間と顔 vs 画面の秒数も出力します。 -
コンタクトシートを確認し、 修正して再レンダリング:顔の上のテキスト、重なり、セーフゾーン内のテキスト、プライベート情報など。
-
簡単に報告: ショット数、ランタイム vs ターゲット長、顔 vs 画面の秒数、まだキャプチャが必要なもの。
board.htmlをユーザーに開いて提示します。
フレーム
最も現実的なソースを優先順位に従って使用します:
-
実際の素材。 ショットに表示される実際のサイトやアプリのスクリーンショット(ヘッドレスChromeまたはPlaywright、デスクトップは1440幅、モバイルは390)、またはユーザー自身の映像からの静止画(
ffmpeg -ss <time> -i clip.mp4 -frames:v 1 still.jpg)。画像はframes/フォルダに配置し、ファイル名で参照します。 -
組み立てたフレーム。 kit/frame-kit.css のクラスを使用して、HTML body フラグメントとしてフレームを記述します。フラグメント内の
{{face}}は、frames/face.jpgが存在すればそれに、存在しなければセットアップの顔静止画に、どちらもなければニュートラルなシルエットに置き換えられます。セットアップのtheme.cssがすべてのフレームを自動的に彼らの色とフォントに再スタイルします。クラス 使用目的 .fフレームラッパー。常に外側の要素 .hl上部の見出し。キーワードに <em>.lblwith.n+.t番号付きリストラベル( 01 SCRIPT).face全画面顔( <img src="{{face}}">).faceboxsplitショット内の顔ボックス.termClaude Code ターミナル( .pプロンプト、.toolツール呼び出し、.ok、.dim).chat+.bub+.vidエージェントチャットメッセージ。オプションで動画付き .shotスクリーンショットカード( <div class="shot"><img src="..."></div>).tblデータテーブル( .hヘッダー、.r行、.r.new新しい行).big1つの大きなオチ .roomBロールプレースホルダー(キャプション付き) 縦位置はインライン
style="top:..px"で設定します。フラグメント例:<div class="f"> <div class="lbl"><span class="n">01</span><span class="t">SCRIPT</span></div> <div class="term" style="top:200px"> <div class="bar"><i></i><i></i><i></i></div> <div class="p">write me a 45 second script about ...</div> <div class="ok"> ✓ script.md</div> </div> <div class="facebox"><img src="{{face}}"></div> </div> -
実際のデータでモックアップする。 ログインが必要でアクセスできない画面の場合。ユーザーに代わってサインインしてはいけません。実際の数値から画面を構築し、スタンドインとしてマークします。
フレームルール:
- セーフゾーン: テキストを下部20%、右側12%(いいね!とコメントレール)の外に保ち、上部8%はクリアに保ちます。キットの位置はこれらを既に尊重しています。
- 見出しスタイル: プロファイルのオンスクリーンテキストの注意事項に従います(大文字小文字、太さ、単語のハイライト方法)。デフォルトは太字の大文字で、キーワード1つを
<em>で囲みます。全画面顔の上では、キットはタイプを白にし、ソフトシャドウを付けます。 - プライバシー: どのフレームにも、ユーザー名を含むファイルパス、メール、APIキー、
.envの内容を含めない。テーブルには偽のIDを使用します。
動画制作への活用
ストーリーボードが承認されたら、それがプロンプトになります。グラフィックを1ショットずつ構築します:「ストーリーボードのショット4を9:16のモーショングラフィックとして作成:フレーム、オンスクリーンテキスト、編集ノートに一致させること。」最初のバージョンは決して正しくありません。それを編集に配置し、フレームと比較し、一致するまでやり直します。