Video Studio - 自動動画編集
このスキルは完成品の動画を自動生成します。単なるガイドではありません。すべての操作は scripts/autovideo.py で一元管理されています。
専門知識(カメラアングル、リズム、音声、字幕、CapCut、AI動画、実践的な教訓)は references/ にあり、ストーリーボード作成時やQCレポート確認時の判断に活用します。
スクリプトのパス: このファイルが置かれているディレクトリの scripts/ サブディレクトリ(READMEに従い ~/.claude/skills/video-studio/scripts にインストール)。
0. ユーザー用スラッシュコマンド
/video:plan アイデア・脚本・絵コンテ・照明の相談 · /video:make 新規動画制作 · /video:revoice ナレーション差し替え ·
/video:subs 字幕 · /video:reframe 縦/正方形へのリフレーム · /video:library 素材ライブラリ · /video:qc 品質チェック ·
/video:voices 目的に応じた声の選択 · /video:fix ジッター/fps/ブレの修正 · /video:critic 独立した批評 · /video:slop "AIスロップ" の検出と修正 · /video:capcut CapCutへの書き出し。
ユーザーが自然言語で頼んできた場合(コマンドを打たずとも)以下の表に従って処理します。
0b. MCPツール video-studio(優先的に使用)
セッション内で mcp__video-studio__* ツールが利用可能な場合は、Bashでスクリプトを実行する代わりに直接呼び出します:
- 高速:
video_probe,video_qc,contact_sheet,voices_suggest,voices_catalogue,pronunciation_preview,shot_search,motion_stills,slop_check,slop_compare. - 長時間処理(
job_idを返し、job_status/job_listで追跡):make_video,revoice_video,subtitle_video,convert_fps,reframe_video,stabilize_video,motion_graphic,critic_kit,voice_samples. 一度登録:claude mcp add --scope user video-studio -e PYTHONIOENCODING=utf-8 -- python <repo>/scripts/mcp_server.py
1. 要求に応じたコマンド選択
| ユーザーの希望 | 実行内容 |
|---|---|
| アイデア/脚本 + 素材(動画、画像)から新規動画制作 | project.json を templates/project_make.json に従って作成 → autovideo.py make project.json --out TEN_v1.mp4 |
| 既存動画のナレーション差し替え / 吹き替え | autovideo.py revoice VIDEO.mp4 --script loi.txt [--voice auto --muc-dich thoi_su] --out TEN_v1.mp4 [--subs] |
| 動画に字幕を追加 | autovideo.py subs VIDEO.mp4 --script loi.txt --out TEN_sub.mp4(音声から自動タイミング検出) |
| 納品前の動画チェック | autovideo.py qc VIDEO.mp4(+ contact_sheet.py で目視確認) |
| 任意のfps(24/25/30/50/60/120)変更、スローモーション、ジッター修正 | fps_convert.py convert SRC OUT --fps 24 [--slowmo 4](RIFE GPU) |
| 横動画→縦/正方形(被写体追跡); 仮想的なパン/ズーム; 手ブレ補正 | camera.py reframe / move / stabilize |
| フッテージから最適なカットを選択、説明文から検索 | shot_select.py scan / best / search |
| カット間のカラーマッチング、シネマティックルック | grade.py match / look / apply |
| プラットフォーム別書き出し、ビート検出 | deliver.py export <preset> / beats |
| 制作前のアイデア、絵コンテ、照明、カメラアングルの相談 | /video:plan + references/11-dien-anh-cao-cap.md |
| ルートマップ、チャプターカード、データ可視化(コードベースのモーショングラフィックス) | motion_html.py stills/render + templates/motion/*.html、または "nguon": {"html": ...} シーン |
| 脚本/動画が「AI臭い」場合:決まり文句、無出典の数字、空虚な主張、均一なリズム、過剰なエフェクト | /video:slop(slop_guard.py で計測 → 新しいエージェントが修正提案 → compare で再計測) |
| 納品前の動画審査(制作者とは別の審査員) | /video:critic(critic.py + 新しいエージェント、全項目が8点以上になるまで審査) |
| 目的に応じたナレーション音声の選択 | voices.py suggest --muc-dich thoi_su --gioi-tinh nu、2~3の候補音声サンプルを生成しユーザーに聴かせる |
| CapCutに送って手動調整 | make/revoice に --capcut TEN_NHAP を追加、または capcut_api.py build --spec |
| AI動画/マイクロドラマ | references/09-phim-ai-pipeline.md + storyboard.py jobs |
すべてのコマンドは自動実行: 既存ファイルを上書きせず、中間ファイルを <out>_work/ に保存し、BAO_CAO_QC.md(映像エラー、ジッター度、LUFS、台詞一致率)を生成します。レポートを必ず読んでから送信し、数値を回答に明記してください。
2. make 用 project.json の作成(最重要)
- 各
canh(シーン)は1つの台詞に対応。nguonは次のいずれか:{"file", "vao", "ra"}(動画)、{"anh", "hieu_ung": zoom_in|zoom_out|pan_left|pan_right}、{"mau": "#0E2440"}。 - シーン長は自動計算 = max(
thoi_luong, 音声長 + 0.9秒)。動画シーンは元のカット内に自動的に配置; 素材が不十分な場合は自動でシーンを短縮し、フリーズは行わない。 - 画像は発言内容に正確に一致すること(正しい工事、正しいイベント) - 素材は
probe_qc.py --inventory+contact_sheet.pyで選定し、ファイル名だけで判断しないこと。 chuyen_canh(トランジション): 同じ話題内ではcut、話題や空間が変わる場合はdissolve。シーンは 7~8 秒以内。- 台詞は話し言葉で書く; 数字と単位はそのまま記述(
119 km、100 km/h) -tts_vi.pyが自動で正規化(ハイフン/ダッシュが「đến」と読まれるのを防止)。 chu_tren_hinh(テロップ): 短く、台詞に出てくる数字や名前のみ; 「—」は使わない。- 上級設定: プロジェクトの任意の
fps(異なるfpsの素材は自動でfps_convert経由)、動画シーンにslowmo、camera(仮想的なpush/pan)、on_dinh(手ブレ補正)、khung_thong_minh(縦書き出し時に被写体を自動追跡); プロジェクト全体にmau(カラーマッチング+ルック)とcat_theo_nhac(ビートに合わせたカット)も可能。 - 音声は無理に決めない:
"giong": "auto"(デフォルト)は"muc_dich"(doanh_nghiep(企業)、thoi_su(ニュース)、tai_lieu(ドキュメンタリー)、quang_cao(広告)、mang_xa_hoi(ソーシャルメディア)、huong_dan(チュートリアル)、sang_trong(フォーマル)、tre_em(子ども)、su_kien(イベント))+"gioi_tinh"、"vung"、"am_sac"(低/中/高)に基づき、各音声のプロファイル(voices.py profile: 読み上げ精度、ピッチ、速度)から選択。または直接指定: VieNeu音声名、{"edge": "vi-VN-HoaiMyNeural"}、{"clone": "mau_giong.wav"}(話者の同意が必要)、またはシーンごとに実際の録音"ghi_am": "cau3.wav"。シーン/キャラクターごとに異なる音声も可能。 決定前に必ず 2~3 の候補音声をユーザーに提示し(voices.py suggest)、聴いてもらうこと。 - 精度: 発音辞書
templates/phat_am.json+ プロジェクト固有の"phat_am"(略語、固有名詞); 各文は Whisper で再確認され、< "do_chinh_xac"(0.97)の文は最大"doc_lai"回自動で読み直し、結果を文単位で報告; 字幕は単語単位で正確に配置。 - 編集スタイル:
"phong_cach":trang_trong(フォーマル) |dien_anh(シネマティック、2.39レターボックス、フィルム調) |tai_lieu(ドキュメンタリー) |nang_dong(ビートカット) |mang_xa_hoi(被写体追跡フレーム)。 シーンごとのトランジション:cut,dissolve,fade_black,dip_white,wipe_left/right,slide_left/right,zoom_in。 フレーム:"khung":fill(トリミングして埋める) |fit_blur(全体表示、背景ぼかし) |smart(被写体追跡)。"letterbox": 2.39。すべてのオプションはシーン単位で上書き可能。 - モーショングラフィックス:
"nguon": {"html": "templates/motion/route_map.html", "params": {...}}(ルートマップの描画アニメーション、チャプターカードなど)。makeは自動でBGMのみの_chi_nhac.mp4も出力。大規模制作前にはディレクターズブリーフ+facts.mdを作成(references/12)。 - AIスロップ対策:
"facts": "facts.md"(各数字+原文+出典+日付)と"luat": ["~/.video_studio/luat/<khach>.json"](クライアントルールブック、リポジトリ外に保存)。makeは自動チェックし、レポートに「AIスロップ対策」セクションを追加;"chan_khi_slop": trueで架空の数字やルール違反がある場合に処理を停止。 クライアントが手動で修正した文はそのままルールブックにコピー(slop_guard.py ghi)し、次回の動画で自動検出できるようにする(references/13)。 - シーンの自動選択:
"kho_canh": "kho.json"(shot_select.py scan --clipから)と"nguon": {"tim": "aerial view of a highway at sunset"}→ 最もマッチし、十分な長さがあり、未使用で、品質スコアの高いカットを取得。検索クエリは英語で記述。
3. 不変のルール
- 納品物を削除/上書きしない。 新しいバージョンは
_vN。メインバージョンの差し替えはユーザーの承認があった場合のみ: 旧バージョンをmv -nで_luu_<mo_ta>にリネーム、新バージョンをcp -n、cmpで確認。 - 測定してから話す -
BAO_CAO_QC.mdの数値を使用; 未測定の場合は未測定と伝える。 - 内容は事実に基づく: 正しい工事/組織、海外ストック素材不使用、QRコード、広告、無関係なスローガン、許可のない人物の登場禁止。
- 翻訳は意味とコンテキストを100%正確に; 迷う文は質問すること。
- ユーザーに代わってパスワード/APIキーを入力しない。
- モデルは正規のソースからのみダウンロード、
.safetensorsを優先、専用の venv にインストール。 - コミュニケーションはベトナム語。
- 架空の数字は使用しない: 映像/音声内のすべての数字は
factsに記載されているか、[tính: ...]として明示されている必要がある。エージェントが作成した修正版は、slop_guard.py compareで再測定された後にのみ受け入れ可能(作成者自身が確認しない)。
4. 必要に応じて参照をロード
| 状況 | ファイル |
|---|---|
| ワークフロー、バージョン管理、クライアントへのレポート | references/01-quy-trinh.md |
| カメラアングル、ショットサイズ、カットのリズム、トランジション、静止画 | references/02-ngon-ngu-hinh-anh.md |
| ジッター、フリーズ、フレーム損失、fps変換 | references/03-khung-hinh-chuyen-dong.md |
| 色、スケール/クロップ、ロゴ、ファイル出力 | references/04-hinh-anh-mau-xuat.md |
| ナレーション、TTS、BGM、LUFS | references/05-am-thanh-giong-doc.md |
| 字幕、翻訳、テロップ | references/06-phu-de-dich-chu.md |
| CapCut(MCP、VectCutAPI、Web) | references/07-capcut.md |
| 納品前QC | references/08-qc-giao-file.md |
| AI動画 / マイクロドラマ | references/09-phim-ai-pipeline.md |
| 実践的な教訓 | references/10-bai-hoc-thuc-te.md |
| 照明、レンズ、絞り/シャッタースピード/ISO/ND、AI動画プロンプト、カメラアングル、色、音声、編集 | references/11-dien-anh-cao-cap.md |
| AIスロップ対策:出典付き数字、クライアントルールブック、ブラインドレビュー担当者、再測定後のみ受付 | references/13-chong-ai-slop.md |
| ディレクターズブリーフ、「AIっぽい動き」対策ルール、コードベースグラフィックス、批評ループ、大規模プロジェクト(GES、3D、現状) | references/12-dao-dien-motion-va-phe-binh.md |
5. スクリプト一覧
| スクリプト | 役割 |
|---|---|
autovideo.py | メインエントリ: make、revoice、subs、qc |
voices.py | 各音声のプロファイル測定、目的に応じた音声提案、複数音声ソース(VieNeu、Edge、クローン、録音) |
accuracy.py | 発音辞書、各文の再確認、誤読の自動再読み上げ |
motion_html.py | HTMLを使ったモーショングラフィックス + seek(t)(Playwright)、自動サブフレームモーションブラー |
critic.py | 独立した審査用ツールキット:コンタクトシート/サムネイル/ストリップ、デッドフレーム、テロップ表示時間、スロップチェック(slop_guard と連携) |
slop_guard.py | AIスロップ対策:出典/導出された数字、決まり文句、空虚な主張、リズム、均一な編集、クライアントルールブック; compare で修正版の可否を判定 |
mcp_server.py | MCPサーバー: 21ツール(高速+ジョブキュー)をClaudeが直接呼び出し |
probe_qc.py | 素材目録 / 動画QC(フレーム損失、フラッシュ、重複フレーム、フリーズ、ジッター、カデンス、LUFS、黒縁) |
contact_sheet.py | 3フレーム/ショットのコンタクトシートを生成し目視確認 |
fps_convert.py | 24-120fps変換、スローモーション、180°モーションブラー、補間フレーム検出(RIFE/フロー) |
camera.py | インテリジェントリフレーム(顔+顕著性マップ)、仮想的なパン/ズーム、vidstab手ブレ補正 |
shot_select.py | ショットライブラリ: カット分割、スコアリング、説明文検索(CLIP) |
grade.py | LUTカラーマッチング、自動ホワイトバランス、ルック; LUT適用 |
deliver.py | プラットフォーム別プリセット書き出し、ビート検出 |
cadence_fix.py | オプティカルフローによるセグメント単位のリズム補正(旧版、GPU不要) |
tts_vi.py | VieNeu-TTS ベトナム語(25音声)、テキスト正規化、専用venvで自動実行 |
speech_check.py | 台詞一致率(Whisper)、方言推定 |
voice_mix.py | タイムラインへの台詞配置、音声処理チェーン、ダッキング、LUFS、動画合成 |
subs.py | 字幕文分割、SRT/ASS、焼き込み |
demucs_split.py | 音声/音楽分離 |
capcut_api.py | VectCutAPI経由でCapCutデスクトップ用下書きを作成 |
storyboard.py | ストーリーボード、ショットリスト確認、AI動画ジョブキュー |
環境(install.ps1 でインストール): ffmpeg が PATH に存在; Python 3.12(numpy, opencv, soundfile, librosa, Pillow, faster-whisper, torch, demucs);
VieNeu は ~/tools/venv_vieneu(VIENEU_PY で変更可能); RIFE は ~/tools/rife/(RIFE_BIN); YuNet は ~/tools/models/(YUNET_ONNX); VectCutAPI は ~/tools/VectCutAPI(ポート 9001)。