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、ロゴがダウンロードされます。その後はすべてキャッシュされます。
ワークフロー
- トピックを一文で。 ユーザーが指定しない場合は、3つ提案して選択させます。
- スクリプト。
references/writing.mdを読んでください:効果的なフック、構成、長さについて。- 9~14文、110~170語を目指します。
- 1秒あたり約2.7語、さらに文間0.35秒として計算:130語で約50秒になります。
- ファイル。 ユーザーのプロジェクトに
videos/<id>.jsonを作成します。フォーマットは以下、完全なカタログはreferences/scenes.mdにあります。メディアファイルはvideos/medias/に配置します。 - ビルド。
node <skill>/scripts/make.mjs videos/<id>.jsonで、音声、ページ、チェック、コンタクトシートを作成します(レンダリングなし、約1分)。 - 確認。 画像1枚だけ 開きます:
videos/rendus/<id>-planche.jpg。- フレーム1、次に各シーンの終了時点(すべての要素が到着した後)、最後にアウトロカードが表示されます。
- JSONを修正し、コマンドを再実行します。音声はキャッシュされます:変更された文のみが再作成されます。
- レンダリング。
--renduを追加します。動画45秒に対して約1分かかります。次のものが取得できます:videos/rendus/<id>.mp4;-couverture.jpg、カバー画像(フレーム1);<id>.txt、タイトル、キャプション、ハッシュタグ、ピン留めコメント付き。
- 公開。
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_tts | sh <skill>/scripts/install.sh を実行 |
mot « x » introuvable | au はそのシーンの文の単語を、記述された通りに繰り返す必要があります |
logo « x » introuvable | ファイル("medias/x.svg")を指定するか、スペースなしのブランド名を試す |
| テキストがはみ出す | テキストを短くするか、より幅広いシーン(duel ではなく carte や liste)に変更する。CSSは触らない |
| 単語の発音が間違っている | prononcer に追加する。例:{"Ledger": "Ledjer"} |