動画編集
このスキルは、カメラに向かって話す人物の生映像を、完成した動画、対応するSRTキャプションファイル、およびカバー画像に変換します。ffmpeg、Whisper、Playwrightをベースにしたバンドルコマンドラインツール(vedit.py)を使用します。編集を担当し、クリーンなテイクの選択、カット、ショットバリエーション、グラフィックスとBロールの配置、キャプション、ラウドネス、カバー、最終QAを行います。台本と編集ノートについてはvideo-scriptingスキルに、色、フォント、コンプライアンスラインについてはbrand/brand-profile.mdに、静止画像についてはimage-generationスキルに、独立したチェックについてはreview-loopスキルに、投稿についてはschedulingスキルに依存します。ここから投稿やスケジュール設定は行われません。
権限順位:brand-profile.mdがブランド定数とコンプライアンス文言で優先され、このスキルは方法の所有者です。
開始前に
- マーケティングワークスペース(デフォルトは
marketing/)を見つけてください。存在しない場合は、一言で伝え、brand-setupスキルを提案してください。ツールはニュートラルな外観で動作します。 - 作品のフォルダ
content/<yyyy-mm-dd>-<slug>/を見つけてください。そこにはscript.txt(1行に1つの話される文、[注記は角括弧で]と[CHAPTER N • タイトル]マーカーは発話されない)、理想的にはedit-notes.txt(HOOK ON SCREEN:、COVER:、OUTCOME:行)、およびsources.txt(画面に表示が許可されている唯一の図表)が含まれている必要があります。台本なしで撮影された場合は、まず文字起こしを行い、クリーンアップしたトランスクリプトを台本として扱ってください。 - ブランドプロファイルの
## ビジュアルアイデンティティ、## コンプライアンス、## 境界、## CTAと連絡先、およびbrand/voice-learnings.md(グラフィックやカバーに使用する言葉やフレーズ用)を読んでください。 - ツールの準備ができているか確認:
python3 <skill>/vedit.py doctor。不足がある場合は、bash <skill>/setup.shを1回実行してください(ffmpeg、Node、Python venv、Whisper、Playwright、フォント)。Whisperのlargeモデルは約3GBで、ノートPCのCPU上でクリップの長さの約1~2倍の時間で文字起こしするため、長時間のステップはバックグラウンドで開始してください。
標準
- 各行をクリーンなリードで1回。 完成動画には、各行のリードが正確に1回含まれます。言い直し、「the, the」、放棄されたテイクからの不完全な文、切れた単語の末尾は含みません。これはポリッシュではなくブロッカーです。自然な「えー」は残しても構いません(人は自分らしく聞こえるべき)が、冒頭行では絶対に使わず、1行に2回以上も使わないでください。
- 書かれた台本ではなく、話された言葉に従う。 人は話しながらラインを改善します。生の言い換えは、テイクファインダーで行が欠落または低カバレッジとして表示されます。それは失敗ではありません。彼らのバージョンを保持し、本物のつまずきや言い直しのみをカットし、台本から書かれたグラフィックやフックカードを実際に言われた内容に合わせて修正してください。
- ビジネスに貢献するビートを維持する。 台本に初期の「私が誰か」という行や締めのコールトゥアクションがある場合は、そのままの位置に残します。
- 絶対に単調な一枚ショットにしない。 すべてのカットでワイドとタイトを交互に使い、長いリード内でリフレームし、Bロールにカットアウェイし、モーショングラフィックスでストーリーを運びます。トークヘッドは背骨であり、動画全体ではありません。
- キャプションは完成したオーディオから生成し、台本と照合して、聞こえる内容と正確に一致させます。ショート動画では焼き付け、長尺動画ではSRTのみ使用。
- ラウドネス -14 LUFS、トゥルーピーク -1.5 dB で、すべてのプラットフォームで適切に聞こえるようにします。
- 実際のフレームを使用したカバーで、グリッドセーフスクエア内に見出しを配置し、1つまたは2つのバリエーションを提供します。
- 納品前にQAゲートが通過する。 レンダリングを再文字起こしし、各カットを個別に聞き、各カットが無音で着地することを確認します。
deliverは新しいPASSなしでは拒否されます。 - 耳について正直に。 Claudeは聞くことができません。ゲートは単語とエネルギーをチェックし、トーン、単語の下の咳、または悪いルームトーンのスプライスはチェックしません。毎回、引き渡し時にその旨を伝えてください。
方法
すべてのコマンドはpython3 <skill>/vedit.py <command> <slug>です。手動でproject.jsonを編集する前にreferences/project-config.mdを読んでください。
- まずすべてを収集する。 バッチ内のすべてのクリップをリストアップします。サブカメラを音声でペアリングし(
scripts/sync_cams.py、実際の一致は約0.4~0.55、不一致は約0.03)、ドローンなどの無音カメラはモーションとタイムスタンプで同期します(scripts/sync_cams_visual.py)。すべての写真とショートクリップのコンタクトシートを作成し、Bロールとして使用可能なものをメモし、フォルダにないカメラがあればすぐに尋ねてください。詳細はreferences/multicam-and-long-form.mdを開いてください。 - 初期化。
vedit.py init <slug> --raw <cameraA clip> --pack <content folder> [--long] [--cam B=<clip>]。台本をコピーし、編集ノートを読み、ブランドプロファイルのパレットとフォントをproject.jsonにマッピングします。次に、台本内のすべての固有名詞(プレゼンターの名前を含む)をvocabに追加します。 - プレップ(遅い、バックグラウンド):
vedit.py prep <slug>。カメラのフレームレートでアップライトマスター、16kHzオーディオ、同期された追加カメラ、および2つのトランスクリプト(large-v3逐語とmedium.en)を作成します。HDR映像、形状が間違っている映像、Bluetoothマイクからの通話品質のオーディオで停止します。references/audio-and-sync.mdに救出ルートがあります。 - テイク。
vedit.py takes <slug>は、テレプロンプターのように音声を台本に合わせます。後方へのジャンプは言い直しであるため、各行の各試行はスコア付きのテイクになります。2回目のリスニングでは、各テイクを個別に再確認し、フィラー、繰り返し、ダブルリードを見つけます。picker/takes_report.txtを読んでください。次に、信頼する前に検証します。references/whisper-pitfalls.mdを開いてください。Whisperは繰り返される誤った開始を落とし、最後の単語をでっち上げ、なじみのない用語を分割するためです。提案された言い直しトリムは、エネルギーマップが第二の音声バーストを示さない限り、そのままにします。 - ピック。 担当者がブラウザでピックするか(
vedit.py picker <slug>をバックグラウンドで実行し、http://localhost:8765を開く)、Claudeにピックを依頼する場合は、picker/picks.jsonを自分で書き、マシンピックからの変更ごとにnoteを付けます。どのラインが赤または琥珀色で、その理由を伝えてください。隣接するラインと同じランからのリードを優先します。それらはカットなしで流れます。マシンピックから納品しないでください。 - 振付(デザイン作業、最初に
references/style-notes.mdを読んでください)。台本、sources.txt、映像から:フレーム0のフックカードをedit_notes.hook_on_screenから(3~5単語、答えではなく約束)、graphics.jsonの必要なビート用のカード、唯一sources.txt内の数値のみ、cuesは行または話された単語に固定し、決して固定時間にしない、動機付けられたBロールカットアウェイ(説明する単語の上、または視線やジェスチャーの直後)、1フレームで測定されたframing.face_x/eye_y、退場用のexit_tail。vedit.py mg-preview <slug>でグラフィックスを静止画としてプレビューします。 - ビルド。
vedit.py build <slug> planは瞬時で、カットの概要を出力します。build cuesは配置できなかったキューをリストします(修正し、無視しないでください)。build cutとscripts/cut_check.pyをクリーンになるまで繰り返し、カバーを作成(ステップ9)してポスターフレームを埋め込み、その後build allを実行します。ビルドが適用するルールはreferences/edit-rules.mdにあります。 - ゲート。
vedit.py gate <slug>。ラインが2回読まれている、つまずきや放棄された開始が残っている、単語のない音声エネルギー(隠れた再読み)、任意のカットをまたいだ繰り返しやスキップ(両方のモデルで個別に聞かれる)、ドロップされたテイクからの浮遊単語、音が乗ったカット、および(マルチカメラの場合、gaze.jsonが存在する場合)間違ったカメラで失敗します。原因を修正し、再ビルドし、再ゲートします。次に、ヒューマンプロキシパス:レンダリングのコンタクトシートを視聴し、すべてのキャプションを読み(vedit.py captions <slug>)、変更した行ごとに何があったかと何が保持されたかを書き留めます。 - カバー。
vedit.py frames <slug> --every 5でコンタクトシートを作成。アイコンタクト、温かい表情(話している途中ではない)、シャープなフォーカス、ストーリーを伝える小道具のあるフレームを選びます。cover.frameと1つまたは2つのvariants(2~4単語、大きく、強調単語1つ、シンプルで真実)を設定し、vedit.py cover <slug>を実行します。各テキストボックスをグリッドセーフスクエアと顔に対してチェックし、プロファイルグリッドが表示するものを示すgrid_tiles.jpgを書き込みます。 - レビュー。 レンダリングのコンタクトシート、カバー、SRT、カットリストを
review-loopスキルに渡します。画面上の数値はsources.txtと照合され、信頼されません。 - 納品とリリース。
vedit.py deliver <slug>は、動画、SRT、カバー、カットリスト(各行:テイク、ソース範囲、トリム、理由付きの変更)、QAレポート、および長尺動画用のyoutube-chapters.txtをcontent/<date>-<slug>/video/に書き込みます。vedit.py release <slug> --to <folder>は、動画、SRT、JPGサムネイルを1つのファイル名でコピーします。これはスケジューラーやYouTubeが期待する形式です。
出荷前のチェック
担当者への引き渡しには常に以下を含めます:
- ゲートPASS、最新(レンダリングより新しいもの)。
- 最終レンダリングで測定されたリップシンク:
scripts/lipsync.py build/final.mp4 <t0> <t1>を2~3か所の顔カメラストレッチで実行し、それぞれ±40 ms以内。 - キャプションチェック読了(
vedit.py captions <slug>、vN-caption-check.txtとして提供):FIXが妥当に見え、各CHECKが担当者が聞くための行として名前付けされていること。 - 再生時間とラウドネスの記載。
- ピックに対するすべての変更とその理由、および聞く価値のある行。
- カバーA対B、およびグリッドプレビュー。
- 「何も投稿またはスケジュールされていません。」
- 「私には聞こえません。公開前にお聞きください。」
適応
- 台本なし? 最初に文字起こしします(
prepで両方のトランスクリプトを作成)、トランスクリプトを1行1文にクリーンアップし、script.txtとして保存してからtakesを実行します。 - 異なる外観: ビジュアルなものはすべて
project.jsonのbrand(色、フォント)とcover.wordmark(オプションの小さな名前タグ)を読みます。そこで変更し、スクリプトでは決して変更しないでください。 - 異なるスペル:
captions.localeen-GB(デフォルト)またはen-US。 - 遅いマシン:
project.jsonの`