プロ動画編集 は何をしますか?
このスキルは、連携して動作する3つのパートで構成されています。
- 編集ジャッジメント: 何を、どこで、なぜカットするか。結果が機械によるものではなく、センスのある人間が作ったように感じられるようにします。
- エディタ (
vedit): 完全にコマンドラインから操作できる小さなタイムラインエディタ。カット、タイトル、フェード、効果音、音声プリセットをすべて処理し、ユーザーはブラウザで同じプロジェクトを開くことができます。 - サウンドツール: 効果音ライブラリをインデックス化し、検索し、効果音が正確なフレームに合うように配置します。
以下のパスは、このスキルのフォルダからの相対パスです。ツールにはPython 3.9以上とFFmpeg 5以上が必要です(他にインストールするものはありません)。
できることとできないことについて正直に
- 音声を聞いたり、動画を見たりすることはできません。トランスクリプト、シーン・無音検出、
scripts/qc_audio.pyなどの測定値で判断し、その旨を伝えてください。レンダリング後、ユーザーが耳で確認するためのタイムスタンプを2〜3箇所挙げてください。 - 音声ファイル名やIDをでっち上げないでください。
scripts/sfx_search.pyが返すIDのみを使用してください。 scripts/sfx_search.py --statsでカタログが存在しないと表示された場合、サウンドライブラリがまだセットアップされていません。以下の初回セットアップを提案し、ダウンロードする前に承諾を待ってください。ユーザーが辞退した場合や失敗した場合は、編集作業を行い、references/sfx-library-setup.mdを参照するように促してください。他のサウンドライブラリを自分でダウンロードしないでください。
基本原則(簡略版)
全文と例: references/editorial-principles.md。カット前やカットのレビュー前に読んでください。
- 感情を最優先に。各時点で視聴者がどう感じるべきかを問いかけてください。全体を通してそれを感じさせることができれば、編集は成功です。
- カットの優先順位。カットですべてを満たせない場合は、以下のリストの下位から優先順位を放棄します。感情、ストーリー、リズム、視線誘導、平面性、空間連続性。上位の項目を下位の項目と引き換えにしないでください。
- 思考が終わる地点でカットする、視聴者がまばたきをする瞬間です。カットポイントはまばたきの可能性があるポイントであるべきです。
- 最小限で最大の効果を。示唆は説明に勝ります。より少なく、より良い選択。カットしないことも一つの決断です。
- 画面に映っているものだけを判断する。努力、コスト、意図は無視します。
- マジシャンのように注意をそらす:視線をどこに向けるかを決め、次のショットがそれに合うようにします。
- 修正する前に診断する。問題は、視聴者が感じたと言う場所よりも前にあることがよくあります。
ワークフロー
| 段階 | 行うこと | 参照先 |
|---|---|---|
| 1. 取り込み | 納品物(プラットフォーム、アスペクト、fps、長さ)と意図を一文で確認する。 | technical-pipeline.md |
| 2. ログ | すべてのフッテージをインデックス化する:単語タイム付きトランスクリプト、ショットタイプ、無音、ベストテイク。セットアップごとに代表的なフレームを選ぶ。 | editorial-principles.md |
| 3. アセンブル | 最良の素材でストーリーを順に構築する。磨く前に構造を固める。 | editorial-principles.md |
| 4. 洗練 | カットの優先順位とまばたきのタイミングを適用する。最初のフルパスの後、拒否したフッテージを再確認する。 | editorial-principles.md |
| 5. サウンド | スポッティング、検索、配置、ミキシング。 | sfx-placement.md |
| 6. チェック | 観客として通しで見る。QCスクリプトを実行する。 | 下記 |
| 7. 納品 | フルクオリティにリリンクし、カラー/レベルを合わせ、最初にマスターを書き出す。 | technical-pipeline.md |
作業を戻す際は、編集の意図、主な構造上の選択、削除したものとその理由、既知の妥協点、試す価値のある代替案を述べてください。
エディタ (vedit)
実際の編集に使用します。最初に references/editor.md をお読みください。すべてのコマンド、プロジェクト形式、作業方法が記載されています。基本は以下の通りです。
python3 editor/vedit.py new myfilm --size 1920x1080 # プロジェクトフォルダを作成(python3がない場合は`python`を使用)
python3 editor/vedit.py -p myfilm settings --preset vertical # 出力先のキャンバス(Reels/TikTok/Shorts用); 他に --lufs -14
python3 editor/vedit.py -p myfilm analyze clip.mp4 # 無音とシーンチェンジを検出し、カット位置を選択
python3 editor/vedit.py -p myfilm import clip.mp4 # a1 などのアセットIDを出力
python3 editor/vedit.py -p myfilm add a1 --in 12.5 --dur 8 # 8秒間をタイムラインに追加
python3 editor/vedit.py -p myfilm grade c1 --look cinematic # カラー調整; 他に --brightness --contrast --saturation --temperature --lut FILE
python3 editor/vedit.py -p myfilm key c1 scale --at 0 --value 1; python3 editor/vedit.py -p myfilm key c1 scale --at 8 --value 1.15 --ease inout # ゆっくりとしたプッシュイン
python3 editor/vedit.py -p myfilm transition c1 c2 --type dissolve --dur 0.5
python3 editor/vedit.py -p myfilm key c1 speed --at 0 --value 1 # スピードランプ:`speed` にさらにキーフレームを追加(クリップの元の音声はミュート); 他に:reverse c1, freeze c1 --at 4 --dur 2
python3 editor/vedit.py -p myfilm tracker add c1 --at 4 --x 0.6 --y 0.3 # ポイントを追跡; その後: mask c1 --effect blur, follow c1 m1 t1 (顔をぼかす)または attach c2 t1 (タイトルを追従させる)
python3 editor/vedit.py -p myfilm stabilize c1 # カメラの揺れを滑らかにする(libvidstab対応FFmpegが必要)
python3 editor/vedit.py -p myfilm captions subtitles.srt # 字幕ごとに1つのテキストクリップ
python3 editor/vedit.py -p myfilm sfx a3f9c012 --at 8.0 # scripts/sfx_search.py からのサウンドID; 8.0秒の位置にヒット
python3 editor/vedit.py -p myfilm set c1 preset="voice enhancer"
python3 editor/vedit.py -p myfilm check # 報告されたすべてのエラーを修正
python3 editor/vedit.py -p myfilm render --preview # 高速レンダリング; その後 `frame --at T` でPNGを確認
python3 editor/vedit.py -p myfilm measure --at 4 # 明るさ/カラー数値を表示、露出とグレーディングを判断
python3 editor/vedit.py -p myfilm serve # ユーザーがブラウザで開いて調整できるようにする
- 完全に制御可能:すべてのコマンドはJSONを出力し、エラーはプレーンテキスト、
batchで複数の編集を一度に適用、undoで元に戻せます。キーフレームはズーム、位置、回転、不透明度、カラー、ボリューム、スピードをアニメーション化できます。editor.mdに残り(マスク、トラッキング、グリーンスクリーン、クロップ、フリップ、トラックミュートと非表示、キャンバスプリセット)がリストされています。 - 推測ではなく
frame --at Tで画像を確認し、measureでカラーを判断し、音は「良い音だ」と主張するのではなく測定値で判断してください。 - 控えめに:穏やかなルック、1つのトランジションスタイル、少数のゆっくりした動き。エフェクトを削除しても何も失われないなら、削除してください。
- トラッキングとマスクは測定に基づき、目視ではありません。
tracker addの後、foundを確認し、frame --at Tでフレームを見てください。トラッキングは、サイズが安定した硬くテクスチャのあるものに適しています。回転したり隠れたりするターゲットは見失います。 - ユーザーはあなたの作業中にブラウザでタイムラインを変更する場合があります。ユーザーが変更したと言った後は、編集前に
showを実行してください。 - 音声プリセット(
phone call、deeper voice、robot voiceなど)は、バンドルされているPremiere.prfpsetから提供され、presets import FILE.prfpsetで他のファイルから抽出できます。これらはPremiereのエフェクトを近似したものです。詳細はreferences/voice-presets.mdを参照してください。 - サウンドライブラリがセットアップされていない場合、
sfxは明確なメッセージとともに失敗します。以下のSFXセットアップを提案してください。
SFX ツールキット
すべてのスクリプトは --help を出力します。標準ライブラリとFFmpegのみを使用します。
初回セットアップ。 このスキルには音声は同梱されていません。サウンドのライセンスにより再配布が禁止されているためです。デフォルトのライブラリは、無料の Sonniss GDC 2026 Game Audio Bundle で、Sonniss自身のサーバーからダウンロードされます。これを実行する前に、ユーザーにサイズ(パート1は1.3 GB、82サウンド。全5パートは7.5 GB、347サウンド)とライセンス(個人および商用メディアプロジェクトで無料、クレジット不要。サウンドの再販・再配布不可、AIトレーニング不可)を一文で伝え、承諾を得てください。
python3 scripts/setup_library.py --accept-license # パート1
python3 scripts/setup_library.py --accept-license --parts all # すべて
ダウンロードしたzipはこのスキル内の library/ に保存され、中断されたダウンロードを再開し、既存のパートを再利用し、その後カタログを構築します。Windowsでは python3 が見つからない場合は python を使用します。
ユーザー自身のサウンドを使用する場合(または追加で使用する場合)は、直接インデックス化します(references/sfx-library-setup.md を参照):
python3 scripts/build_catalog.py /path/to/sounds.zip # フォルダ、またはzipフォルダも可
どちらの方法でも、結果は ~/.pro-video-editing/catalog.json にテキストのみのカタログとして保存されます。音声データは含まれません。
プロジェクトごとに:
python3 scripts/sfx_search.py --stats # 利用可能なものを表示
python3 scripts/sfx_search.py "fast airy whoosh" --max-dur 1.5 --limit 8
python3 scripts/sfx_search.py "button click" --exclude ID1,ID2 # 同じテイクの繰り返しを避ける
python3 scripts/render_mix.py in.mp4 cues.json --check # キューシートをリント
python3 scripts/render_mix.py in.mp4 cues.json -o out.mp4 # レンダリング
python3 scripts/render_mix.py in.mp4 cues.json --sfx-only fx.wav # DAWやカラーリスト向けのSFXステム
python3 scripts/qc_audio.py out.mp4 --target -14 # ラウドネスとトゥルーピークチェック
検索出力の列: id、duration、category、peak@(サウンドがヒットするポイント)、tags、file name。peak@ を使用して、カットと何が揃うかを理解します。
キューシート
{
"default_gain_db": -9,
"duck": true,
"humanize": true,
"cues": [
{"id": "a3f9c012", "at": 2.50, "sync": "peak", "note": "タイトルカードへの風切り音"},
{"id": "19be4d70", "at": 2.50, "gain_db": -12, "note": "その下のソフトなレイヤー"}
]
}
atは、サウンドの同期ポイントが到達すべきビデオ時間です。at_frameはフレーム番号で配置します。sync:peak(デフォルト)は最も大きな瞬間を、onsetはアタックを、startは最初のサンプルを配置します。ツールが開始時間を自動計算するため、サウンドがカット前に始まっていても、ヒットはフレーム正確になります。- オプションのキューごとの設定:
gain_db、fade_in、fade_out、trim_start、duration、pitch_semitones(12以内)、note。 duckはSFXを元の音声(会話)の下に下げます。humanizeは同じサウンドが繰り返されるときに小さなゲインとピッチのバリエーションを追加します。noteに理由を記述してください。これによりシートのレビューが可能になり、次の編集に役立ちます。
--check は、不明なID、ビデオ外の時間、テイクの繰り返し、重なったレイヤー、過密なシートを報告します。レンダリング前に報告されたすべてを修正してください。
SFX ルール
詳細なガイドとスポッティング方法: references/sfx-placement.md。
- 理由を持ってスポッティングする。 すべてのサウンドは感情やストーリーに役立たなければなりません。削除しても何も失われないなら、削除してください。
- ヒットをカットまたは動きに正確に合わせる、近くではなく。風切り音や衝撃音には
sync: peakを使用します。 - レイヤリングは控えめに: 一度に多くとも3つのサウンドまで(例: 衝撃音、サブ、テール)。
- テイクを変える。 同じサウンドを2回連続で使用しないでください。再度検索するときは
--excludeを使用します。 - 沈黙を残す。 ヒットの前の間は、ヒットをより強力にします。
- 会話を明瞭に保つ。 会話があるときは
duckをオンにし、デフォルトゲインは会話中は -9 dB 以下に保ちます。 - 密度: 10秒あたり約12キューですでに非常に賑やかです。落ち着いた素材ではもっと少なくする必要があります。
検証チェックリスト
カットが完了したと言う前に:
- すべてのカットが優先順位を満たし、感情が最優先されている
- ペースを追加するためのみに存在するカットはなく、ホールドは意図的である
- カットポイントは思考の境界にあり、思考の途中ではない
-
render_mix.py --checkがエラーを報告せず、警告は解決または正当化されている -
qc_audio.pyがトゥルーピークが -1 dBTP 以下、ラウドネスが目標値付近であることを示している - 出力の長さ、フレームサイズ、フレームレート、オーディオレイアウトが納品仕様と一致している
- ユーザーに確認すべき特定のタイムスタンプが提供されている
リファレンスインデックス
references/editorial-principles.md: 哲学、カットの優先順位、まばたきのタイミング、会話、ペーシング、問題の診断references/editor.md: エディタのコマンド、キーフレーム、カラーグレーディング、トランジション、キャプション、書き出し設定、プロジェクト形式、AIの作業方法、ブラウザエディタreferences/voice-presets.md: 音声プリセット、Premiere.prfpsetファイルの抽出、精度の限界references/sfx-placement.md: スポッティング方法、目的別サウンドガイド、レベル、レイヤリング、ダッキングreferences/sfx-library-setup.md: ライブラリの入手、カタログの構築、タグのキュレーション、ライセンスreferences/technical-pipeline.md: メディアの整理、プロキシ、カラー、コーデック、インターチェンジ、書き出し