Video Lite v2
小さなストーリーボードJSONから完成したMP4を生成します。全てのフレームはcairoで描かれたベクターアート(アンチエイリアステキスト、記号、幾何学図形、グロー、パーティクル、カメラ移動、シーントランジション)であり、ffmpegでエンコードされます。音声はespeak-ng/MBROLA(pt-BRおよび英語)を使用し、ソフトなプロシージャルBGMが音声に合わせて音量調整され、カットや表示切り替え時にシューッという音やポップ音が付加されます。古いPentium Mで動作:約90秒の720p動画を約7〜8分でレンダリング(ドラフト480p:約4分)。Node、Chromium、GPU、モデル、ネットワークは不要です。
以下、<skill-dir> はこのSKILL.mdが置かれているフォルダです。すべてのコマンドはユーザーのプロジェクトフォルダから実行してください。出力はそこに生成されます。
ゴールデンパス — この順序で正確に実行
# 1. マシンを一度だけチェック(速度も計測、約1分)。不足しているものと修正方法を表示します。
python3 <skill-dir>/scripts/doctor.py
# 音声がない場合? Debian/Ubuntu/antiXでは、root権限なしでespeak-ng + MBROLA pt-BRを~/.localにインストール:
bash <skill-dir>/scripts/setup_voice.sh
# 2. ジョブ(フォーマット)とテーマ(雰囲気)から開始:
python3 <skill-dir>/scripts/compose.py formats # explainer-motion / story / listicle / explainer / promo / demo
python3 <skill-dir>/scripts/compose.py themes # mystic, neon, terminal-green, sunset, ocean, paper, mono
python3 <skill-dir>/scripts/compose.py new --format explainer-motion --theme neon --out storyboard.json
# その後、storyboard.jsonを編集:すべての「TROQUE:」プレースホルダーを、このビデオの実際のコンテンツに置き換える必要があります(レンダリングは未置換のものを拒否します)。シーンの追加、削除、並べ替えは自由に行えます。
# ナレーションのペース:約14文字/秒。1シーンにつき1つのアイデア、1〜2文。
# 3. レンダリング。MP4が書き込まれるまでブロックします。--draftは480p、高速:古いマシンでは先にこちらを使用。
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --draft
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4
# オプション:長時間のレンダリングの前に1フレームだけ確認(video.pngを書き込み):
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --still 12.5
# 4. 実際のファイルを検証(再生時間、動画+音声ストリーム)し、コンタクトシートPNGを確認。
python3 <skill-dir>/scripts/verify.py video.mp4 --require-audio
ffmpegパイプラインを手書きしたり、自分でフレームを描画したりしないでください。render.pyがレイアウト、テキストフィット、アニメーション、タイミング、同期を担当します。ステップが失敗した場合は、そのメッセージを読んでください — 何を変更すべきか示されています。マシンが遅くて急いでいる場合? render.py ... --fast(パーティクルを減らし、カメラ移動なし)。
ストーリーボード
{
"theme": "mystic",
"voice": "mb-br3",
"scenes": [
{"kind": "title", "title": "O Caibalion", "subtitle": "os sete princípios herméticos", "symbol": "☿",
"narration": "Conheça o Caibalion e seus sete princípios."},
{"kind": "kinetic", "text": "O Todo é *Mente*",
"narration": "O primeiro princípio diz: o Todo é mente."},
{"kind": "bullets", "title": "Na prática", "bullets": ["observe seus pensamentos", "mude o foco", "repita"],
"narration": ["Observe seus pensamentos.", "Mude o foco.", "E repita todo dia."]},
{"kind": "wheel", "title": "Os sete princípios", "center": "☿",
"nodes": ["Mentalismo", "Correspondência", "Vibração", "Polaridade", "Ritmo", "Causa e Efeito", "Gênero"],
"narration": "Mentalismo, correspondência, vibração, polaridade, ritmo, causa e efeito e gênero."},
{"kind": "cta", "title": "Leia o livro", "subtitle": "domínio público desde 1908",
"narration": "Leia e tire suas conclusões."}
]
}
トップレベル:theme、voice(pt-br、en-us、es… またはMBROLA mb-br3 / mb-br1 / mb-br4、ロボット感がはるかに少ない;pt-brの場合、インストールされていればmb-br3が使用されます;"none" = 無音)。話す速度はrender.pyによって設定されます(約14文字/秒);"speed": 0.9–1.15で微調整します(v1のrateは無視されます)。オプション:すべてのシーンにtransition、"music": false(音声の下のソフトコードベッドなし)、"sfx": false(シューッ/ポップ/ライザー効果音なし)、"captions": true(ナレーションを字幕として表示;デフォルトはオフ — 画面にはキーワードが表示され、音声が残りを伝えます)。
すべてのシーン:kind(下記)、narration、オプションのseconds(デフォルト:ナレーション+短いポーズ;シーンを長くすることのみ可能)、オプションのtransition(fade | slide | zoom | wipe | iris | cut;デフォルト:テーマ独自のローテーション)、オプションのcamera(auto スローズーム/パン、またはnone)。
アイテムを音声に同期: narration は文のリストにできます。bullets、wheel、icons、split シーンにN個のアイテムがあり、ナレーションにN個の文がある場合(またはN+1:最初にイントロ)、アイテムkは文kの開始時に正確に表示されます:
{"kind": "bullets", "title": "Por quê", "bullets": ["roda em PC velho", "modelos grátis", "testa tudo"],
"narration": ["Três motivos.", "Roda em computador velho.", "Usa modelos grátis.", "E testa antes de dizer pronto."]}
narration にリンク、メールアドレス、ファイルパスを入れないでください(レンダリングは拒否します):画面に表示します(cta サブタイトル)。各文は約110文字以下にしてください。
シーンの種類(compose.py kinds でこのリストが表示されます)
| kind | 表示内容 | フィールド |
|---|---|---|
title | 大きなタイトルが単語ごとに表示、下線描画、オプションで上部に記号 | title, subtitle, symbol(オプション) |
bullets | タイトル+アイテムが1つずつ表示、各アイテムにアイコン | title, bullets: ["text", {"text": "…", "icon": "fa-rocket"}] |
terminal | ターミナルウィンドウでタイピング | lines: ["$ comando", "saída"] |
quote | 大きな引用符、単語がフェードイン、著者がスライドイン | title(引用文)、subtitle(著者) |
cta | 終了コール:タイトルがポップ、サブタイトルが光るボタン内に | title, subtitle, symbol(オプション) |
symbol | 1つの巨大な記号をストロークごとに描画、その後塗りつぶし+グロー、ハローリング | symbol, title, subtitle, spin(true/false) |
geometry | 神聖幾何学を徐々に描画、その後グロー | shape(1つの名前またはリスト)、title, subtitle, labels(arrows のみ) |
wheel | 円上のN個のノード(2〜12)を1つずつ表示、中心への線付き;現在のノードが光る | title, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center(単語または記号)、active(1..N:そのノードを強調表示) |
icons | 1〜8個のアイコンがラベルとともにポップインするグリッド | title, items: [{"icon": "fa-cogs", "label": "motor"}] |
kinetic | 大きな単語が音声に同期して表示;*word* = アクセントカラー+グロー | text |
split | テキスト列+反対側にイラスト | title, text または bullets、および symbol または shape、side(right/left:アートを配置する側) |
shape 名:circle、triangle、triangle-down、square、hexagon、hexagram、pentagram、flower(生命の花)、seed(生命の種)、vesica、spiral(黄金比)、eye(三角形の中の目)、ouroboros、wave(振動)、pendulum(リズム)、arrows(原因→結果;"labels": ["causa", "efeito", "causa"] を使用)。組み合わせ:"shape": ["circle", "hexagram"]。
symbol / icon / center は以下を受け付けます(compose.py symbols で全名称リスト表示):
- 文字:
"☿"、"☤"、"☯"、"✡"、"⚖"、"∞"、"🜂"(錬金術)、"♀"、"☉"、"☽"… - Font Awesome 4 名:
"fa-cogs"、"fa-book"、"fa-rocket"、"fa-lightbulb-o"、"fa-globe"、"fa-terminal"… - 名前付き記号:
"mercurio"、"caduceu"、"yin-yang"、"balanca"、"fogo"、"agua"、"olho"… - 絵文字:
"🔥"、"🚀"、"💡"(色付き;ストローク描画ではなくポップで表示)。
完全な約90秒の例(ハーメティシズム、テーマmystic、すべてのイラスト種類):<skill-dir>/examples/caibalion.json。
良いセンスを素早く
- 種類を変える:同じ種類のシーンを3つ連続させない。テキスト主体(
bullets、split)と視覚的(symbol、geometry、kinetic、wheel)を交互に配置。 - タイトルは短く(5語以下)、サブタイトルは10語以下、箇条書きは各6語以下、最大5箇条。
- N個のもののリスト:1つの
wheel概要、次に各アイテムに1シーン(symbol/geometry)、または再びwheelを"active": kで使用。 - テーマ:
mystic(藍色/金色、セリフ体、星)、neon(マゼンタ/シアン、シンセグリッド)、terminal-green(コード)、sunset、ocean、paper(明るい、セリフ体)、mono。
テスト
python3 <skill-dir>/scripts/selftest.py はすべての種類をドラフトで一瞬レンダリングし、MP4をffprobeでチェックします(exit 0 = OK)。--voice はespeak+字幕もテストします。