video-short について
Video Shortは、トーク映像から縦型ショート動画を作るスキルです。編集可能な制作プランとレビュー手順を備え、編集判断をガイドしながら、スクリプトで文字起こし、カット、レンダリング、品質確認を行います。
主な機能
- 01映像の文字起こしとカット
- 02シーンと画面表示を計画
- 03縦型版と共有用動画をレンダリング
- 04ドラフト確認ページを提供
- 05字幕、カット、画質をチェック
活用シーン
- 01長い録画から短編を編集
- 02縦型の製品紹介動画を制作
- 03時間付きコメントでドラフトを確認
- 04スタイルファイルで動画の一貫性を維持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ petergyang/ video-short --skill video-shortインストール後、Claude Code で/video-shortを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
eval.mdreference.mdagents/openai.yamlfonts/OFL.txtscripts/build.pycapture.pycommon.pycut.pygenerate.pypyqa.pyrender.pyreview_page.pyreview.pysetup.shtranscribe.pystyles/default.json詳細
Video Short
入力:話者を正面から撮影した未編集の録画。出力:1080x1920、30 fps の renders/<project>-vN.mp4、共有用の 720p コピー(renders/share/ 内)、およびその作成に使った edit.md。
編集上の判断はすべてあなたが行います。スクリプトは計測、レンダリング、レビュー用ページの配信を担当します。コマンド、edit.md の形式、グラフィック、スタイルキーについては、reference.md をご覧ください。
初回は setup.sh を実行します。不足しているツールが表示された場合は、Video Short の実行に必要であることをユーザーに伝え、表示されたコマンドでのインストールを提案してください。生成画像、動画、音楽に使う Gemini API キー(課金が有効なもの)は任意です。チャットに貼り付けるのではなく、~/.config/video-short/.env に保存するようユーザーに依頼してください。
1. カット
Short ごとに、短いスラッグを名前にしたフォルダーを 1 つ作成します。ユーザーが指定した場所、指定がなければスタイルファイルの projects_dir、それもなければ現在のフォルダーに作成してください。録画には手を加えず、Source: でそのファイルを指定します。
transcribe.py を実行し、work/transcript_raw.md のすべての行を読んでください。文字起こしには「あの」などのつなぎ言葉、どもり、言い直しが残るため、撮り直した箇所もテキストに表示されます。録画が Short より長い場合(チュートリアル全編など)は、まず最も良い 30~60 秒を選びます。カットは、ファイル内の任意の場所から 1 つまたは複数の範囲を選べます。edit.md に ## Cuts を記述します。
- 同じセリフを繰り返している場合は、最後に完結したテイクを残します。言いかけ、不要なつなぎ言葉、無音部分は削除します。
- 単語の途中ではなく、単語と単語の間でカットします。文の途中で言い直している場合は、
.jsonの単語のタイムコードを使います。 - 最初の単語の約 0.1 秒前から始め、最後の単語の約 0.1 秒後に終わります。読点や列挙項目の後には自然な息継ぎを残します。音声を速めてはいけません。
cut.py --look を実行し、残す映像から作成されたグリッド状の静止画を確認して、顔の中心となる Framing: x, y を決めます。横向きの録画は、その位置を中心に縦向きにクロップされます。控えめな ffmpeg のカラーグレーディングを並べて比較するには --grade を追加します。映像の見栄えがすでに良い場合は Grade: none を使います。
cut.py を実行し、次に work/transcript_clean.md を確認します。単語が途中で切れていたり、撮り直しが残っていたりする場合は修正し、もう一度実行してください。シーンの時刻はすべて、このカット後のタイムラインを基準にします。
2. 構成
Short に必要な情報を調べてから、edit.md に ## Scenes を記述します。各ショットにつき 1 行とし、開始・終了は発話中の単語に合わせます。ユーザーが好みのリールを共有した場合は、まずコンタクトシートとカットストリップでテンポ、レイアウト、トランジションを確認します。その動き方は参考にしますが、言葉や素材を流用してはいけません。
- 最初の3秒で引きつけます。 視聴者が最後まで見てくれるかどうかを自問します。話者の映像や最も印象的なビジュアルとともに、つかみの一言から始め、スマートフォンの視聴者の多くはミュートで再生し始めるため、音声なしでも内容が伝わるようにします。Short の終わりまでに答えがわかる問いを、ここで一つ提示します。話者の映像で締めくくり、合う場合はつかみのビジュアルを再び使って、Short を冒頭につなげます。
- レイアウト:
a-roll(話者を全画面表示)、punch(強調のため話者をアップで表示)、split(上にビジュアル、下に話者)、b-roll(ビジュアルを全画面表示)。 - Short の少なくとも半分は話者を映し、全画面の B-roll は1ショットあたり約3.5秒以内に終えます。 視聴者は顔を見ることで話に引き込まれるためです。
- ビジュアルで言葉にないものを見せます。 製品が動作する様子、結果、証拠を見せます。言葉はすでにキャプションに表示されます。実際の画面からキャプチャした本物の製品や UI を見せ、実物がない場合に限ってモックアップを作ります。数値や結果を決して捏造しません。
- カメラに映らないものはすべて動かします。 まず実際の映像を使います。それ以外の場合は、話された項目ごとに行が増えるリストカード、話者が言う統計値まで数値が増える
number:、またはフローやビフォーアフターなど、その他のものを表すgraphic:を使います。静止画を B-roll として使ってはいけません。画像は生成動画クリップの最初のフレームか、スクロールするpage:キャプチャとしてのみ使います。視聴者が離れてしまう、暗い UI パネルや波形は避けます。グラフィックからクリップにつなぐ場合は、クリップの最初のフレームで終わらせて、カットが目立たないようにします。 - 読みやすく、すっきりと。 グラフィックはパネル全体に表示し、スマートフォンでも一目で読める文字を使います。話者の顔にカードやオーバーレイを重ねてはいけません。この Short のキャプションの下に、キャプション付きの別の動画を全画面で表示してはいけません。
- テンポ: スマートフォンの視聴者は動きのない画面からスワイプして離れるため、数秒ごとにショットを切り替えます。スクリプトで調整できますが、出発点としては、最初のカットを約1秒以内に、最初の力強い言葉に合わせて入れ、ほとんどのショットを1~2秒程度にします。デモや重要なセリフを伝えるのに時間が必要な場合は、長めに見せます。話者が複数のものを続けて挙げる場合は、それぞれについて、話された言葉に合わせて個別のクリップまたはカードの行を表示します。各クリップは1回だけ使います。
B-roll は次の順に探します。ユーザー自身の映像(長時間の録画に含まれる画面共有部分も含む)、次に公式デモや、話題に関する投稿またはローンチページ内のメディアです。各クリップの使える部分には @start-end を指定し、短いクリップをループさせず、最後のフレームを hold します。画面上のテキストは、どの行も欠けないようにします。ウェブページは、スマートフォンの幅に合わせて再配置する capture.py でキャプチャし、完全なセクションを一つ表示しながら下へ流れる page: として見せます。製品 UI の文字が小さすぎて読めない場合は、端の文字を切り取るのではなく、カードまたはフィールド全体の一つに zoom します。ユーザーが使用権を持つ映像を使います。ブランドのロゴは公式ファイルからのみ表示し、描き直したり生成したりしてはいけません。公式ファイルがない場合は、ブランド名を文字で表示します。
ユーザーが Gemini キーを持っていて、ショットに適切な映像がない場合は、生成を提案します。Nano Banana の画像、Gemini Omni Flash の動画クリップ、または Lyria の音楽ベッドを生成できます。各呼び出しには料金がかかるため、ユーザーが承認したものだけを生成します。
名前のスペルミスを直す場合は ## Caption fixes を追加します。キャプション内で枠を付ける価値がある、製品名や主要な数値などのまれな語句には ## Emphasis を追加し、キャプションを控えめに保ちます。音楽には、ユーザーの楽曲、ユーザーが承認した Lyria の音楽ベッド、または音楽なしを使います。Lyria はゆったりしたピアノソロを返すことがあるため、生成した音楽ベッドはユーザーに聴いてもらい、求められたグルーヴがなければ再生成します。ユーザーが曲名やアーティスト名を指定した場合は、名前ではなく、ジャンル、テンポ、楽器を Lyria のプロンプトに記述します。話者が音楽に言及する箇所では、Music lift で音量を上げます。ユーザーから求められない限り、効果音はオフにします。
チャットでプランを提示し、実行の承認を待ちます。
- シーンごとに1行で、時間、レイアウト、画面に表示される内容、話す言葉を記載します。
- 見つけたBロールの素材と、そのリンク。
- 生成するものがあればその内容と、音楽。
3. 下書きとレビュー
render.py --draft を実行し、その後 qa.py を実行します。ステップ4のチェックに失敗したフレームを修正し、ユーザーのレビューがミスではなく好みに集中できるようにします。その後、バックグラウンドで review.py を実行します。レビュー画面では、シーンごとに分割されたタイムラインで下書きを再生できます。ユーザーは任意のフレームで一時停止し、Cキーを押してコメントを入力し、Sendをクリックします。スクリプトが終了し、各メモの時間、シーン、話した言葉、および一時停止したフレームの静止画が出力されます。
各メモのフレームを確認し、すべてのメモを edit.md に反映して、次の下書きをレンダリングし、review.py --no-open を実行します。開いているページは自動で再読み込みされます。ユーザーがLooks goodをクリックするまで繰り返します。
4. 最終版
render.py を実行し、その後 qa.py を実行して、不合格のチェック項目を修正します。work/qa/ 内の opening.jpg、contact.jpg、cuts/*.jpg を確認します。
- キャプションが口やあごに重ならないこと。
- すべてのカットが適切な単語の位置に入り、空白、フリーズ、引き伸ばされたフレームがないこと。
- テキストとクリップの詳細が、スマートフォンの画面サイズでも読みやすいこと。
ミックスを聴くことはできないため、音楽の音量と、単語が途中で切れていないかをユーザーに確認してもらいます。eval.md を実行し、動画のパス、長さ、ラウドネスを共有します。
スタイル
フォントと色はスタイルファイルから取得します。順に --style、プロジェクト内の style.json、~/.config/video-short/style.json、同梱のデフォルトが使われます。ユーザーが見た目について要望を伝えたら、その内容をスタイルファイルに保存して、すべてのShortに適用するか確認します。