Communitygithub.com

Noahnocap/ai-video-skill

ひとつのプロンプトから、Instagramリール / TikTok / YouTubeショート向けの1080x1920動画を生成します。スクリプト作成、ナレーション生成、モーションデザインのアニメーション、フレームの自己レビュー、MP4出力までを自動化。ユーザーが「リール」「ショート」「TikTok」「解説動画」「顔出しなし動画」「SNS向けアニメーション」「/ai-video」とリクエストしたときに使用します。

ai-video-skill とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がひとつの自然言語プロンプトから、SNS投稿可能な縦型動画(1080x1920、30fps)をフルパイプラインで生成できるようにします。スクリプト作成(ユーザー提供の場合はそのまま使用)、音声合成(ElevenLabs対応)、3種類のビジュアルスタイル(Classic / 3D explainer / Illustrated)によるシーンアニメーション、フレーム単位の自己レビュー、そして最終的なMP4出力までを自動化します。 主なワークフローは、まず与えられたトピックからトピック・スタイル・CTAキーワード・言語を推論し、必要最低限の質問のみで不足情報を補います。次に、ガイドラインに沿ったスクリプトを作成し、音声ファイルと単語タイミングデータを生成。その後、各ビート(文節)に対して中央メタファーとカスタムプロップを発明し、エンジン提供のアニメーション部品(バネ運動、振り子、浮遊、タイピング効果など)と組み合わせてコード化します。 重要なのは、単なるテンプレートではなく、毎回独自のビジュアル世界を創り出す点です。全シーンが単語タイミングに同期し、動きのない静的なフレームが1.2秒以上続かないように設計されています。完了した動画は、プロモーション用のキャプションとハッシュタグ、そしてCTAを自動返信で運用するためのリマインダーとともにユーザーに提供されます。 このスキルはClaudeをはじめ、APIプラン、Claude Max、Teamプランで効果的に動作し、並列処理により高速な動画生成が可能です。また、セットアップが簡単で、初回は数分の環境チェックを実行するだけで利用開始できます。

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

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

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

ドキュメント

AI動画編集スキル

あなた(Claude)が編集者です。このフォルダには、実証済みのリールエンジン、3種類のビジュアルスタイル(Classic、3D explainer、Illustrated)、クリエイターのスクリプト作成・テンポ設定ルール、そして音声・レンダリング・レビュー・書き出しのためのツールが揃っています。あなたがスクリプトとシーンコードを書き、ツールが重い処理を担当します。

以下でSKILL_DIRとは、このファイルが置かれているフォルダを指します(AI Videoワークスペースでは<workspace>/skill)。すべてのツールは絶対パスでどこからでも実行してください(例:node "$SKILL_DIR/tools/reel.mjs" ...)。

0. このコンピューターで初めて使う場合:セットアップチェック(約2分)

node "$SKILL_DIR/tools/doctor.mjs"を実行してください。Node.js、ffmpeg、Python、ヘッドレスブラウザ、ElevenLabsのAPIキー、選択した音声をチェックし、不足しているものの正確な修正方法を表示します。ユーザーに1つずつ、平易な言葉で修正手順を案内してください(ユーザーは技術に詳しくないかもしれません)。詳細はSETUP.mdを参照。

  • 自分で実行できるインストール手順(ユーザーの承諾を得て):SKILL_DIR内でnpm installとnpm run browser、pip3 install numpy。
  • APIキー:ユーザーはdoctorが指定したファイルに自分のキーを貼り付けます。チャットにキーを貼り付けさせたり、キーをログに出力したりしないでください。
  • 音声:保存済みの音声がない場合は、音声を選ぶのを手伝ってください(セクション3)。これは一度行えば、今後のすべてのリールで保存されます。
  • AIプラン:使用しているプラン(Claude Pro、Claude Max、API、Team、Codex、Cursor)を一度だけ尋ねてください。自分で検出することはできません。保存:node "$SKILL_DIR/tools/doctor.mjs" --set-plan <max|pro|api|team|codex|cursor|other>。Max、API、またはTeamプランの場合:「あなたのプランではシーンビルダーを並列実行できるため、動画制作が大幅に高速化します」と伝えてください。それ以外のプランでは、一度だけ「最高品質(完全なプロセスですが、使用制限をすぐに使い切る可能性があります)または良好品質(制限に合わせた軽量ビルド)のどちらがいいですか?」と尋ね、保存:node "$SKILL_DIR/tools/doctor.mjs" --set-quality <best|good>。いつでも切り替え可能(「最高品質 / 良好品質で」と言う)。
  • プレゼンター(classicとillustratedのみ):~/.config/ai-video/config.jsonに"presenter"がまだなく、リールがclassicまたはillustratedの場合、一度だけ写真を提供してもらうか(または「プレゼンターなし」)、ルックを構築し(guides/presenter.md)、設定に保存します。ユーザーが質問をしないように指示した場合は、テンプレートのデフォルトプレゼンター(engines/classic/template/reel.json)を使用し、引き渡し時に「次回はご自身のルック(またはなし)にできます」と伝えてください。

ツールがセットアップ関連と思われるエラーで失敗した場合は、必ずdoctorを再実行してください。

1. 依頼を理解する(質問しすぎない)

ひとつのプロンプトから必要なもの:トピック/視点、スクリプトの有無、スタイル、CTAキーワード、言語。推測できるものは推測し、トピック自体が不明確な場合のみ、最大で1つの短い質問をしてください。デフォルト:

  • ユーザーがスクリプトを貼り付けた場合 → そのまま完全に保持(明らかなタイプミスのみ修正、「改善」は決してしない)。それ以外の場合は自分で作成(セクション2)。
  • スタイル(guides/styles/参照):
    • Classic(classic):トークポイント、ツール、ヒント、リスト、意見、ビジネス/AI/テクノロジーニュース、「これが方法 / これが理由」的なもの。デフォルト。
    • 3D explainer(explainer3d):物理的なものやシステム(ガジェット、アプリ、車、人体、ネットワーク、都市)について「Xは実際にどう動くのか」を説明するもの。
    • Illustrated(illustrated:classicエンジンと同じペーパールック、キャプション、プレゼンターだが、各ビートの主役は、guides/illustration.md、kits/illustrate.js、library/classic/illustrated/を使って描かれた、実在感のある被写体のイラスト):スクリプトが実在する名前のあるもの(企業やチェーン、店舗、場所や近隣、製品、食べ物、建物、乗り物、電話の中のアプリや動画)について語る場合。
    • 人と場所が登場するストーリー(小さなビジネスとその顧客、店、通り、チーム、都市):ストーリーがビジネス、場所、製品(実際の店構え、カウンター、食べ物、地図、小さな人々が生活している様子)についてならIllustrated;ポイントがシステムがその場所をどう動くか(配送、行列、交通、信号)なら3D explainer。ユーザーがスタイルを指定した場合(「3D」「描いた」「イラスト」「前回のリールみたいに」)、それが優先されます。
  • CTAキーワード:トピックに関連する、覚えやすい単語(例:PLUGINS、COFFEE)、大文字。reel.jsonに保存。
  • 言語:スクリプトの言語。reel.jsonに"language": "xx"を設定(ISOコード:ru, es, de, ar...)。音声、キャプション、CTA、UIテキスト(コメントシート、DM)で使用;自信がなければキャプション/強調は自分で記述。ラテン文字、キリル文字、ギリシャ文字、ベトナム語のフォントはバンドル済み;その他のスクリプトの場合は、音声ステップの後にpython3 "$SKILL_DIR/tools/fonts.py" check <project>を実行。
  • 音声 ↔ プレゼンター:ユーザーが自分の性別・年齢を述べたり写真をくれた場合、保存済みの音声が合っているか確認;明らかに合わない場合(例:女性プレゼンターなのに男性音声)、そのことを伝え、voices.py searchで合う音声を提案する(またはユーザーが主張する場合はそのまま使う)。非英語スクリプトでは、その言語のタグが付いた音声を優先。

2. スクリプト(ユーザーが既に提供した場合はスキップ)

guides/scripting.mdを読み、正確に従ってください:冒頭1.5秒でフック、2行目で好奇心のループ、具体的なステークス、問題が実感された後でのみ製品/回答を命名、会話調(スタッカートではない)、110~170語(約32~50秒:再生時間≈語数 / (3 × 音声速度) 秒;短いスクリプトを求められた場合は、フック、ループ、ペイオフを圧縮して保持)、最後は「KEYWORDとコメントしてくれたら~を送ります」で終わる。<project>/script.txtに書き出す。ユーザーがレビューを希望した場合は、音声読み上げ前にチャットでスクリプトを表示;それ以外は続行(完成したリールを求めている)。

3. プロジェクト + 音声

node "$SKILL_DIR/tools/reel.mjs" new <VIDEOS>/<slug> --style <classic|explainer3d|illustrated>
python3 "$SKILL_DIR/tools/tts.py" <VIDEOS>/<slug>

<VIDEOS> = このスキルフォルダの隣にあるvideos/フォルダ(AI Videoワークスペース:<workspace>/videos/<slug>/)、存在しない場合はユーザーのカレントフォルダの./videos/。ただしユーザーが別の場所を指定した場合を除く。<slug>は短いケバブケースのトピック名。--style illustratedはclassicプロジェクト(reel.jsonに"style": "classic", "look": "illustrated")をスキャフォールド;以下で「classic」と書かれているものはすべてこれに適用され、さらにguides/illustration.mdも適用。tts.pyはaudio/vo.mp3(ポーズを詰め、保存された音声速度(別の--speedで保存されていない限り×1.15)で高速化、ラウドネス正規化済み)とbuild/words.json + build/word_index.txt(各単語とそのタイミング)を書き出す。すべてのアニメーションはこれらの単語に同期します。

  • 音声の選択(初回、またはユーザーが変更を希望):python3 tools/voices.py search "<希望の内容>" [--lang xx]、ユーザーに3つのプレビューリンクを提示、その後voices.py add <owner> <voice_id> "<name>"とvoices.py use <voice_id> --name "<name>"を実行。ユーザー自身の録音:tts.py <project> --provider file --audio take.mp3。OpenAI音声:voices.py provider openai。
  • クレジット:リールあたり音声生成は1回。後でスクリプトを変更した場合は再生成;タイミングのみの修正には--reuseを使用(追加クレジット消費なし)。

4. ビジュアルを考案し、次にビートを計画する(コードの前にストーリーボード)

4a. 考案(これこそが、作られたリールとテンプレートの違いです)。 最初にguides/mindset.mdを読んでください(基準と、考えるべき視点:非常にクリエイティブに、美しく、決して空虚ではなく、よくアニメーションされ、一瞬で理解できる)。次にguides/patterns.md(classic、illustrated)またはguides/patterns_3d.md(explainer3d)を読み、その考案方法をこのスクリプトに適用します:

  • アイデア全体を担うひとつの中心メタファー / ビジュアルワールド(動作が議論そのものである物理オブジェクト、機械、または場所)、およびビート用の3~6個のカスタムプロップ。これらはこのスクリプトの言葉から生まれなければならず、例から取ってきてはいけません:ガイドやlibrary/のプロップ例は技法を示すものであり、決して貼り付けないこと。自問:「このフレームは他の誰かのリールにも合うだろうか?」もし「はい」なら、それは汎用的です:再度考案してください。
  • 実世界の被写体(スクリプトが実在の企業、場所、製品、食べ物、建物、乗り物に名前を出している、または電話のアプリ/動画を表示している):フラットなアイコンや名刺カードではなく、実物のように描く:guides/illustration.md(classicとillustrated:kits/illustrate.jsのプリミティブ + library/classic/illustrated/の例;画面上の動画は常に再生)。実際のものが主役になり、考案したメタファーがそれに作用します。
  • 考案内容をSTORYBOARD.mdの先頭に書く:メタファー、それが適合する理由、プロップ、セクションごとの「わあ」と思わせる瞬間。

4b. ストーリーボード。 build/word_index.txtを開く。スクリプトをビートに分割:一文またはアイデアごとに1ビート、各1.5~5秒。最初にスタイルガイドの品質セクションを読み(参考ストリップも見る)、次にすべてのビートに対して次のブロックを書く(1行ビートは禁止):

beat NN · "<該当の言葉>" (word i0-i1, s-e)
  stage stays : 画面上に残る要素とその位置
  each stressed word adds/changes : 単語 → 入ってくる、または状態が変化するもの(強調単語ごとに1つ、0.4~0.8秒ごと)
  keeps moving : すべての要素のアイドル動作(時を刻む、揺れる、転がる、タイプする、点滅する、浮かぶ)
  presenter    : (classic) 彼が指すフォーカス + フレーズごとの動作 ・ (3D) 誰/何が動作するか
  camera       : どの単語で寄る/プッシュ/キック/カットするか ・ トランジションの入り
  custom props : 考案したどのプロップが登場するか(新しく書くコード)
  big moments  : 強打、カット、ホイップ、見せ場:1秒あたり1以上を目指す(リールモーションがドラフトで計測)

ルール(guides/direction.mdより):ステージは構築される(強調単語ごとに1つの要素が追加または変更され、以前の要素は残って動き続ける)、フォーカスは常に1つだけ;音声をオフにしても絵が意味をなす;1.2秒以上静的な状態が続かない;大きな出来事は強調単語の上で起こる;フックビートはペイオフまたは対立を、すぐに、完全な状態で示す。

5. シーンを構築する

コードを書く前にguides/styles/<style>.mdを全て読む(illustrated:guides/styles/classic.md + guides/illustration.md)(品質基準、ルック、トークン、API、シーン契約、レシピ)。エンジンはどのように動かすかを提供します(ばね、振り子、重力、構築ステージ、プレゼンターの演技、カメラ、タイピング、回転する数字、トランジション);何を動かすかは、あなたが4aで考案し、プロジェクト内で新しいコードとして描画するプロップです。予算:クリエイターのリールには、1秒の動画あたり50~110行のカスタムシーンコードと3~7個のカスタム描画オブジェクトが含まれています;それに合わせて計画してください。

  • 単語にはスタイルのヘルパー(wordAt('word') / wi(index))で同期させ、ハードコードされた秒数は使わない。
  • 考案した各プロップは、使う前に単独でプレビューする(プロップだけを表示する使い捨てのビート/シーン、reel stills <project> <t> --only <id>でレンダリング;explainer3dにはキットの紹介ページもあります)。そのシーンファイルはscenes/preview_<prop>.jsと名付ける(craftはscenes/preview*.jsとscenes/props*.jsを無視するので、本番のリールコードをそのような名前に決して入れないこと)。Classic:SCENE_FILESにリストするが、TIMELINEには決して入れない:タイムラインにない登録シーンはリールでレンダリングされません;最終版の前にSCENE_FILESから削除。
  • reel stills / reel videoのたびに、出力の最後を読む:「error while drawing frames」と表示された場合、それらのフレームは壊れています。最初に修正。
  • 並列モード:サブエージェントを使用(逐次モードでは、同じビートを同じビートごとのブリーフで、自分で1つずつ順に構築):1~2ビートごとに1つのサブエージェント、すべて並列、各サブエージェントには以下を与える:guides/mindset.md(ブリーフに貼り付ける)、スタイルガイドのパス、guides/patterns(_3d).md、ガイドのビートが実世界の被写体を描画する場合はguides/illustration.md(classic)、考案ブロック、そのストーリーボードの行と単語、および隣接シーンのハンドオフ状態。各サブエージェントは--out <そのビート名>を使ってスチルをレンダリング(独自のシート、上書きなし)。その後、一緒にレビュー。

6. 自分の作業をレビューする(必須、これがプロフェッショナルに見える理由です)

guides/review.mdに従う。要約:

  1. node "$SKILL_DIR/tools/reel.mjs" stills <project> <t1> <t2> ...を各ビートの中央と、すべてのカットの0.1秒後に実行(シート:stills/sheet.jpg)。シート画像を見る。レビューチェックリストのすべての項目を確認;問題があれば修正してスチルを再レンダリング。
  2. node "$SKILL_DIR/tools/reel.mjs" video <project>(高速低解像度ドラフト、build/draft.mp4)。各トランジションの周辺のフレームを抽出して見る(ffmpeg -ss T -frames:v 1)。ポップ、オーバーラップ、無音部分を修正。
  3. node "$SKILL_DIR/tools/reel.mjs" motion <project>とnode "$SKILL_DIR/tools/reel.mjs" craft <project>:両方ともPASSを出力する必要があります(craft = 十分なオリジナル作品、ストックプロップがリールを支えていない)。motionはすべての平坦な部分とその単語をリストします:各部分に構築イベント、二次モーション、カメラ移動、またはプレゼンターの演技を与え、ドラフトを再レンダリングし、再実行。失敗している間は最終版をレンダリングしない。ユーザーがビデオレンダリングを禁止した場合、ドラフト(ステップ2)とmotionをスキップし、代わりにスチルで密度を確認(guides/review.md、「スチルのみの実行」:強調単語ごとに新しいものがあり、連続する2つのスチルが同じに見える1.2秒のウィンドウがない);craftは依然として実行し、引き渡し時にモーションが未検証であると伝える。
  4. 最終版の前に、guides/mindset.mdの質問を通してスチルシートをもう一度見る(最もクリエイティブか?充実しているか、美しいか、生き生きしているか?明確なフォーカスが1つあるか?クリエイターはこれを投稿するか?)。どれか一つでも「まだ」なら、先に改善。
  5. 最終版:node "$SKILL_DIR/tools/reel.mjs" video <project> --final、次にnode "$SKILL_DIR/tools/reel.mjs" export <project> → out/<name>.mp4(1080x1920、30 fps、H.264 + AAC、Instagram対応)。 レンダリングは常に1つだけ実行(組み込みロック)。まずドラフト、最後に最終版:ユーザーのラップトップに優しく。

7. 引き渡し

ユーザーに以下を提供:out/<name>.mp4へのパス、投稿キャプション(文脈を追加する2~3行、CTAキーワード、3~5個の関連ハッシュタグ)、および「Comment KEYWORD」にはDM自動返信(ManyChat、ReplyRush、またはInstagramの自動化機能)を設定し、約束したリンクを送るように設定する必要があることのリマインダー。guides/delivery.mdを参照。変更のラウンドを1回提供(「フックを速く」「別の音声」「シーン3を交換」)。

努力モード(agent_planとqualityを~/.config/ai-video/config.jsonから読み取る;doctorが表示する)

  • 速度: Max、API、Team = 並列(1~2ビートに1つのサブエージェント、すべて同時:動画制作が大幅に高速化)

…[翻訳のため省略]

関連スキル