Communitygithub.com

ai-video

1つの `video.json` ファイルから、クリーンでアニメーション化されたホワイトスタイルの短尺縦型動画(TikTok、Reels、YouTube Shorts、30~90秒)を、非常に少ないトークンで作成します。3つのモードがあります。

ai-video とは?

このスキルは、1つの `video.json` ファイルから完全な縦型短尺動画を生成するための、高効率で低コストなソリューションです。TikTok、Reels、YouTube Shorts向けの30~90秒の動画を、最小限のトークン消費で作成できるため、開発者やコンテンツクリエイターにとって非常に有用です。`Generated`、`Images`、`Filmed` の3つのモードがあり、それぞれAI音声とモーションデザインの生成、実機iPhone/ブラウザ/全画面でのスクリーンショットや写真の表示、トーキングヘッドクリップへのキャプションとアニメーションシーンの追加が可能です。このツールは、スクリプト作成、音声生成、単語単位のキャプション同期、各シーンのアニメーション、BGMと効果音の追加、テキストの画面内収まりチェックを行い、最終的に MP4 ファイルをレンダリングします。英語、フランス語など多くの言語に対応しており、ユーザーが「スキル」と明示的に言わなくても、短い動画、Short、Reel、TikTok、アニメーション解説、動画バッチ、顔出しなし動画、アニメーションキャプション、または低コストで多数の動画を素早く制作したいといった要求に応えます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danbaruka/claude-code-ai-video/tree/main/skills/ai-video

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

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

ドキュメント

ai-video は何をしますか?

1つの動画は 1つの video.json ファイル です:音声が話す文章と、それぞれの強いアイデアに対して、16種類のカタログから選ばれたシーンで構成されます。 スクリプト scripts/make.mjs がそれ以外のすべてを行います。HTML、CSS、アニメーションコードを手書きしないでください。 唯一の例外は、カスタムビジュアル(htmlタイプ)に値する唯一の瞬間です。

アイデア ─► スクリプト(文章) ─► video.json ─► make.mjs ─► コンタクトシート(確認) ─► --rendu ─► MP4 + カバー + 投稿テキスト

JSONのキーはフランス語です(phrases、texte、scene、voix、marque…)。シーンタイプも同様です(titre、chiffre、liste…)。このスキルに示されている通りに正確に記述してください。音声が話すテキストは任意の言語にできます。

最初の動画の前に(一度だけ)

sh <skill>/scripts/install.sh      # node ≥ 18、ffmpeg、python3をチェックし、edge-ttsを<skill>/.venvにインストール

<skill> はこのファイルのフォルダです。初回起動時にHyperFrames(npx経由)、GSAP、ロゴがダウンロードされます。その後はすべてキャッシュされます。

ワークフロー

  1. トピックを一文で。 ユーザーが指定しない場合は、3つ提案して選択させます。
  2. スクリプト。 references/writing.md を読んでください:効果的なフック、構成、長さについて。
    • 9~14文、110~170語を目指します。
    • 1秒あたり約2.7語、さらに文間0.35秒として計算:130語で約50秒になります。
  3. ファイル。 ユーザーのプロジェクトに videos/<id>.json を作成します。フォーマットは以下、完全なカタログは references/scenes.md にあります。メディアファイルは videos/medias/ に配置します。
  4. ビルド。 node <skill>/scripts/make.mjs videos/<id>.json で、音声、ページ、チェック、コンタクトシートを作成します(レンダリングなし、約1分)。
  5. 確認。 画像1枚だけ 開きます:videos/rendus/<id>-planche.jpg。
    • フレーム1、次に各シーンの終了時点(すべての要素が到着した後)、最後にアウトロカードが表示されます。
    • JSONを修正し、コマンドを再実行します。音声はキャッシュされます:変更された文のみが再作成されます。
  6. レンダリング。 --rendu を追加します。動画45秒に対して約1分かかります。次のものが取得できます:
    • videos/rendus/<id>.mp4;
    • -couverture.jpg、カバー画像(フレーム1);
    • <id>.txt、タイトル、キャプション、ハッシュタグ、ピン留めコメント付き。
  7. 公開。 references/publishing.md を読んで、オーディエンスの国別の投稿時間、投稿頻度、キャプションを確認してください。ユーザーの明示的な許可なしに投稿しないでください。

トークンを節約する:重要なルール

このスキルは低コストです。モデルは動画あたり250~400行のHTMLとアニメーションコードではなく、60~120行のJSONを記述するためです。ブラインドテストでは、新しいエージェントがこのスキルを読むことを含め、約65,000トークンで60秒の動画を完成させました。この状態を維持するために:

  • make.mjs、lib/*.mjs、style.css、生成された index.html を開かないでください。 シーンカタログで十分です。コマンドが失敗し、そのメッセージだけでは不十分な場合のみコードを開いてください。

  • 各ステップのリファレンスのみを読んでください:

    ステップリファレンス
    スクリプト作成writing.md
    シーン選択scenes.md
    音声、映像、スクリーンショットmodes.md
    公開publishing.md

    会話内ですでに読んだリファレンスを再度読まないでください。

  • コンタクトシート1枚、スクリーンショットは不要。 動画を確認するには、<id>-planche.jpg を一度見ます。1秒ごとにフレームを取得したり、MP4をフレームごとに検査したりしないでください。

  • チェックを信頼する。 コマンドはHyperFramesチェック(テキストのはみ出し、隠れたテキスト、ランタイムエラー)を実行し、数行に要約します。

    • 「aucun débordement, aucune erreur」は問題がないことを意味します。
    • ✗ 行は必ず修正する必要があります。
    • ⚠ 行は確認する価値があります:テキストに影響する場合は修正してください。
  • バッチは1つのコマンドで。 最初にN個のファイルを作成します。その後、node make.mjs videos/a.json videos/b.json … --rendu をバックグラウンドで実行し、出力を監視せずに終了するのを待ちます。

  • その場で編集する。 修正するには、JSONの該当する文またはシーンのみを変更します。ファイル全体を書き直さないでください。

  • アセットを探さない。 ロゴ(logo:bitcoin、logo:metamask…)と45個のアイコン(icone:cle…)は組み込まれています。ユーザーが要求した場合のみ、画像をウェブで検索してください。

video.json のフォーマット

{
  "id": "wallet-key",
  "titre": "Your crypto is not in your wallet",
  "langue": "en",
  "voix": { "nom": "en-US-AndrewMultilingualNeural", "debit": "+4%" },
  "marque": { "nom": "BDan", "visuel": "icone:etincelle" },
  "prononcer": { "USDT": "U S D T" },
  "phrases": [
    { "texte": "Your crypto is not in your *wallet*.",
      "scene": { "type": "titre", "lignes": ["Your crypto", "is not in", "your *wallet*"], "visuel": "icone:portefeuille" } },
    { "texte": "The key fits in *twelve words*.",
      "scene": { "type": "chiffre", "valeur": "12", "apres": "words", "au": "twelve", "couleur": "accent" } },
    { "texte": "It's called the recovery phrase." }
  ],
  "fin": { "texte": "I'm BDan.", "sous": "Let's talk new tech.", "audio": "medias/signature.wav" },
  "publication": { "titre": "…", "legende": "…", "hashtags": ["crypto"], "commentaire": "…" }
}
  • phrases[].texte:音声が話す内容をそのまま記述します。

    • *word* は強調する単語を示します:色付きのイタリックで表示され、発声時にパルスし、カメラがその単語にズームインします。
    • 一文につき最大1つ使用してください。
  • scene:新しいシーンを開始します。

    • scene のない文は前のシーンを継続し、読む時間を確保します。
    • 撮影モードでは、シーンのない文は顔を表示します。その場合、"scene": "suite" でシーンを継続します。
  • au(「~で」):その文の特定の単語のタイミングで要素が表示されます。例:"au": "Ledger"。

    • au がない場合、要素は自動的に分散されます:要素が文と同じ数の場合は一文につき一つ、それ以外の場合は等間隔で配置されます。
  • ビジュアル:シーンがビジュアルを取る場合:"logo:binance"、"icone:cadenas"、"emoji:🔑"、または "medias/screenshot.png" などのパス(.svg ファイルはインライン化されます)。

  • voix:音声。nom は音声名、debit は速度。fichier は独自の録音を指定します。

  • langue:デフォルトは "fr"。英語の場合は "en" を設定し、英語の音声と併せて使用します。

  • marque:左下に表示される小さなブランドピル。nom はブランド名、visuel はロゴ。

  • prononcer:発音の指定。音声が単語をどのように発音するかを変更します。画面上に表示されるテキストは変更しません。

  • fin:アウトロカード。marque ロゴ、texte、sous(サブタイトル)を含みます。

    • audio はカード上で録音されたサインオフを再生します。
    • audio がない場合、カードは2秒間無音で表示されます。
  • titre:ファイル内の動画の名前。YouTubeのタイトルは publication に記述します。

  • オプション:

    キー効果
    musiqueBGMファイル。音声に合わせて音量が下がります
    couleurs色の指定。例:{"accent": "#2f6bff", "accent2": "#5fa3ff"}
    sons: false遷移時の効果音(ウーッという音)なし
    blanc文間の無音時間(デフォルト0.35秒)
    pause特定の文の後の追加の無音時間
    sousTitres: falseキャプションなし
  • 文1には必ずシーンがあります。 フレーム1はフィードで表示されるカバー画像なので、短くてキャッチーな titre を使用してください。

16のシーン(パラメータと例は references/scenes.md):

表示するもの…タイプ
フック、インパクトのある一行titre
数字(価格、記録、パーセンテージ)chiffre
2~6個のポイント、ツール、ヒントliste
2~5ステップの方法etapes
A対B、ビフォー/アフター、神話/事実duel
ブランド、コイン、アプリlogos
アプリのスクリーンショットまたは画面録画telephone
ウェブサイト、ページnavigateur
写真(カードまたは全画面)image
会話(AI、サポート、詐欺)chat
危険、詐欺、良いニュースalerte
トレンド、数字の比較graphique
コマンド、インストールterminal
誰かの引用citation
概念とその説明carte
発明されたビジュアルに値する唯一の瞬間html

シーンを変化させてください。

  • それぞれの強いアイデアに独自のシーンを割り当てます:動画あたり6~10シーン。
  • 同じタイプを連続して使用せず、動画ごとにタイプの順序を変更してください。
  • 固定スタイルがテンプレートになってはいけません。3つの動画が連続して同じシーンの順序を使用すると、視聴者は離れていきます。

3つのモード(詳細は references/modes.md)

  • Generated:JSONのみで完結します。
    • 音声はedge-tts:無料、キー不要、多言語対応。
    • voix.nom を設定して音声やアクセントを変更します。
  • Images:スクリーンショットや写真を telephone、navigateur、image で使用します(videos/medias/ から)。
    • 録音またはクローン音声は "voix": { "fichier": "medias/voice.wav" } で指定します。
    • ローカルで文字起こし(whisper)され、文に同期されます。
  • Filmed:"rush": "medias/clip.mp4" を設定します。クリップの音声が音声として使用されます。
    • シーンのない文は顔を表示し、下部にキャプションが表示されます。
    • シーンはそのアイデアの長さ分だけ画面を覆います。
    • スクリプトから文を記述します:スキルが単語単位で同期します。

レンダリング前のチェックリスト

  • 文1でトピックを明確に述べ、そのタイトルが1秒以内に読める。
  • すべての技術用語が同じ文または次の文で説明されている。
  • 一文につき強調する単語は最大1つ、6~10のバラエティに富んだタイプのシーンがある。
  • 数字は実際の確認済みソースからのもの。chiffre シーンが他人の数字を使用する場合、source を持つ。
  • コンタクトシートが確認され、チェックがクリーンで、「mot introuvable」(単語が見つかりません)の警告が残っていない。
  • エンディングは視聴者が留まる理由(次に何が来るか、覚えておくべき一言)を与え、漠然とした質問ではない。
  • ブランドはそれについて話すために表示され、パートナーシップを示唆するためではない。
  • 架空の会話には "mention": "Exemple fictif"、または英語で "Example" を含める。

問題が発生した場合

メッセージ対処法
voix : … edge_ttssh <skill>/scripts/install.sh を実行
mot « x » introuvableau はそのシーンの文の単語を、記述された通りに繰り返す必要があります
logo « x » introuvableファイル("medias/x.svg")を指定するか、スペースなしのブランド名を試す
テキストがはみ出すテキストを短くするか、より幅広いシーン(duel ではなく carte や liste)に変更する。CSSは触らない
単語の発音が間違っているprononcer に追加する。例:{"Ledger": "Ledjer"}

関連スキル