映像組み立てとエクスポート
VV、PYはスキルvideomotionと同じです。HFはnpx -y [email protected]。入力は<du-an>ディレクトリ内: storyboard.json、words.json、timeline.json、mix.wav。
1. スタイルに応じた準備
- スタイルのフォント(Google Fontsの行):
"$PY" "$VV/tools/fonts.py" <du-an> "VT323" "Be Vietnam Pro:400,700"によりfonts/とfonts.cssが生成される。 theme.css: カラーパレットから:root変数(--bg、--ink、--accent、補色、--cap-bg、--cap-ink(字幕は4.5:1のコントラスト比を満たす))を設定。- スタイルにビデオ全体にわたる背景(地図、紙、ボード、グリッドなど)がある場合:
compositions/_nen.html(id_nen)を作成し、各シーンは背景を透明にする。 "$PY" "$VV/tools/assemble.py" <du-an>:index.htmlを生成し、フォントをコピーし、未作成のシーン用のプレースホルダファイルを作成。"$PY" "$VV/tools/packets.py" <du-an>: 各シーン用のタスクパケットchecks/packets/<id>.mdを生成。
2. シーンの並行割り当て
すべてのシーンを1つのメッセージで、各シーンに1エージェントずつ、エージェントタイプvideomotion:vm-canh(model: sonnet、effort: mediumと定義済み、常に最新のSonnet)を割り当てます。割り当てメッセージは簡潔に:
シーン
<id>を構築してください。タスクパケット:<du-an>/checks/packets/<id>.md。テンプレート:$VV/templates/scene.html。正しいファイル<du-an>/compositions/<id>.htmlに書き込んでください。
プラットフォームにvm-canhエージェントがない場合(スキルがプラグイン経由でインストールされていない、または他のツールを使用): model: "sonnet"、effort: "medium"の汎用エージェントを使用し、事前に$VV/agents/vm-canh.mdを読むよう指示してください。子エージェント機能がないツールの場合は、そのファイルに従って順次構築します。
シーンが3未満の場合は自分で構築し、割り当ては行いません。
3. 結合と技術チェック
"$PY" "$VV/tools/assemble.py" <du-an>
cd <du-an> && npx -y [email protected] check
Check passed、エラー0になるまで修正します(エラーがあるシーンファイルを修正)。字幕のtimeline_track_too_dense警告は正常です。レビューや承認者は不要です。ユーザーがプレビューを希望する場合はnpx -y [email protected] preview --backgroundを実行。
4. レンダリングと音声合成
"$PY" "$VV/tools/assemble.py" <du-an> --no-audio
cd <du-an> && npx -y [email protected] render --output renders/raw.mp4 > renders/render.log 2>&1
"$PY" "$VV/tools/audio/mix.py" srt <du-an>
"$PY" "$VV/tools/audio/mix.py" final <du-an> --video <du-an>/renders/raw.mp4 --name <slug>-<ddmmyyyy>
"$PY" "$VV/tools/assemble.py" <du-an>
レンダリングはバックグラウンドで実行(動画1秒あたり約2秒の処理時間)。--no-audioは必須: mix.py finalがmix.wavをそのまま合成します。最後のassembleコマンドでindex.htmlを音声付きバージョンに戻し、プレビュー可能にします。
5. 最終確認
ffprobe renders/<ten>.mp4: 正しいサイズ、音声ストリームあり、再生時間がwords.jsonのtotalと一致することを確認。ffmpegで動画の中間フレームを1枚抽出して目視確認。renders/<ten>.mp4とphude.srtを提出。