ビデオクラフト
2つのジョブ、1つの基準。誰かが録画した映像を編集するか、ブランドキットとコピーから映像を制作するかのいずれかです。どちらの方法でも、レンダリング前に作業が計画され、スクリプトによって正確にレンダリングされ、完了を伝える前に測定によってチェックされます。
動画が完成したように見える要素(優先順位順):
- 構造。最初の3秒にフック、1つのアイデア、時間を無駄にするものがない。
- リズム。カットと動きが発言とビートに合っている。無駄な間がなく、急ぎすぎない。
- クラフトの細部。すべてのカットに空気感、読みやすいキャプション、適切に減速しながら停止するモーション、十分な音量でクリッピングしないサウンド。
- 証明。
qa.pyがパスし、コンタクトシートが確認されていること。
クイックパス
| 依頼 | 対応 |
|---|---|
| 「この録画をタイトニング/クリーンアップして」 | 文字起こし → plan_cuts → EDLレビュー → レンダリング → qa |
| 「これでShort/Reel/TikTokを作って」 | 上記に加えて captions.py --style punch、render.py --preset shorts --fit crop(画面録画の場合は blur) |
| 「キャプションを追加して」 | transcribe.py → captions.py → render.py --captions(または .srt を納品) |
| 「音楽を追加して」 | render.py --music bed.mp3(発言下に自動ダッキング) |
| 「音量を上げて / 音声を修正して」 | render.py --voice --denoise、目標値は platforms.md を参照 |
| 「ブランドイントロ / ロゴリビール / スティング」 | films/brand-sting をコピー、ブランドキットを記入、スチル → ドラフト → マスター → qa |
| 「ローンチ動画 / プロモ / 広告」 | films/launch をコピー、コピーを書き、フォーマットを選び、スチル → ドラフト → マスター → qa |
| 「この動画をチェックして」 | qa.py video.mp4 --sheet sheet.jpg [--safe] |
| すでにRemotionで作業中 | references/remotion.md |
必要条件
編集には ffmpeg 6+ と Python 3.9+ が必要です。文字起こし: pip install faster-whisper(または openai-whisper、whisper.cpp)。フィルム制作: Node 18+ と Playwright(npm i -D playwright && npx playwright install chromium)。キャプションは、ffmpegがlibassをサポートしている場合はlibassで焼き付け、それ以外の場合はPillowで描画(pip install pillow)。python3 scripts/doctor.py を実行してインストール状況を確認できます。
すべてのスクリプトは --help をサポートしています。ジョブごとにフォルダを作成して作業します。中間ファイルは work/、納品物は out/ に配置します。
映像の編集
python3 scripts/transcribe.py raw.mp4 -o work/words.json # 単語単位の文字起こし
python3 scripts/plan_cuts.py raw.mp4 --words work/words.json -o work/edl.json
python3 scripts/captions.py work/words.json --edl work/edl.json --style clean -o work/cap
python3 scripts/render.py work/edl.json -o out/final.mp4 --preset youtube \
--captions work/cap.cues.json --music bed.mp3 --voice --zoom auto
python3 scripts/qa.py out/final.mp4 --edl work/edl.json --sheet out/sheet.jpg \
--words work/words.json --words-check
- まず文字起こしを読み、構造を決めます。何を完全に削除するか(セクションカットはきれいに読める。文の途中でのカットが多いと不安に感じさせる)、フックは何かを決めます。必要に応じて、セクション全体の判断を手動でEDLの
segmentsに反映します。 plan_cuts.pyは、無音部分(ゼロではなく息継ぎ程度に短縮)、フィラー、放棄されたリテイク(最後のテイクを保持)を削除します。無音部分は録音ごとに測定され、すべてのエッジは実際のオーディオにスナップされ、パディングは非対称(前80ms、後140ms)で、削除された単語に到達することはありません。出力リストを読みましょう。強調による繰り返しはリテイクに見えることがあります。- 時間のかかる作業については、担当者とチェックポイントを設けます。前後時間、削除したセクション、削除したリテイクを確認します。担当者のコメントをEDL編集に反映します。
render.pyはすべてを1つのffmpegグラフで実行します:フーム精度のトリム、すべてのカットに8msのフェード、固定フレームレート、パンチイン、リフレーミング、キャプション、音声ポリッシュ、ダッキング音楽、2パスラウドネス。qa.pyを実行し、シートを確認します。--words-checkは結果を再度文字起こしし、カットで飲み込まれた単語を特定します。
判断、数値、失敗モードについては references/editing.md を参照。音声については references/sound.md を参照。
映像の制作(ブランドイントロ、ローンチスポット、広告)
cp -r films/brand-sting my-film && python3 scripts/sfx.py --out my-film/sfx
# my-film/index.html の PARAMS を編集(または --params '{"name": "...", ...}' を渡す)
node scripts/render_film.mjs my-film/index.html --stills 0.5,1.6,2.4,3.5 -o work/stills # 確認
node scripts/render_film.mjs my-film/index.html --draft -o work/draft.mp4 # リズム判定
node scripts/render_film.mjs my-film/index.html --blur 4 -o out/intro.mp4 # マスター
python3 scripts/qa.py out/intro.mp4 --no-gaps --sheet out/intro.sheet.jpg --safe
- まずブランドキット(
references/brand-intro.md):公式ロゴファイル、16進数カラー、フォント、正確な文言、レジスター、フォーマット、サウンド、すべての数字の出典。ロゴの再描画や色変更は絶対に行わない。主張、顧客、製品UIを作り出さない。 - コードの前にビートシート:各ビートの時間、動くもの、イージング、サウンドを記述。1つのレジスター(プレミアム、クリーン、テック、ボールド、プレイフル)を選び、それに合わせてタイムライン全体をスケーリングする。
assets/film.js上に構築:すべてのピクセルはtの関数。Film.tween、Film.spring、Film.stagger、Film.random(seed)を使用。CSSアニメーション、タイマー、Date.nowは使用しない。ブラウザでHTMLを開いてリアルタイムにスクラブできる。- 各ビートでスチル、次にドラフト、そしてマスター。 動画をレンダリングする前に、スチルが示す問題を修正する。マスターは約2~5フレーム/秒でレンダリング、ドラフトは10倍高速。
- サウンドは映像の一部です。
scripts/sfx.pyはキット(ヒット、ブーム、ウィッシュ×3、ライザー、ポップ、チック、チャイム、ベッド)を合成。キューはフィルム設定内に配置され、レンダラーによってミキシングおよびラウドネス設定されます。ヒットのピークはリビールフレームに重なります。
テンプレート:films/brand-sting(3~7秒のロゴリビール、5つのレジスター、16:9/9:16/1:1)と films/launch(15秒:フック→問題→リビール→証明→CTA、3つのフォーマット、プラットフォームのセーフエリア内に9:16、*word*で強調)。これらを出発点として使用し、必要に応じて構造を変更します。
ドクトリン(タイミング、役割別のイージング、スタガー、タイプサイズ、カラー、原因のあるトランジション、避けるべき曖昧な見た目、それをキャッチするテスト):references/motion.md を参照。
常に適用されるルール
- すべてのトリムを再エンコードします。 ストリームコピートリムはキーフレームにスナップします。
- 出力はすべて固定フレームレート にします。H.264 + yuv420p + AAC +
+faststart。 - 測定によるラウドネス: ウェブとソーシャルは -14 LUFS / ≤ -1 dBTP、ポッドキャストは -16。
- テキストはセーフエリア内:9:16の場合、上部288px、下部672px、右192px(1080×1920において)には何も配置しない。タイプサイズは1080で28px以上。
- 正直なコンテンツ:実際のロゴ、出典のある実際の数字、実際の製品UI。音楽、音声、映像が生成されたものである場合はその旨を明記する。
- ライセンスされた音楽のみを使用します。 動画やストリーミングサービスからオーディオをリッピングしないでください。
- 完了=チェック済み:
qa.pyがパスし、シートが確認され、チェックできなかったことが明確に述べられていること。
ファイル
| パス | 内容 |
|---|---|
scripts/transcribe.py | 単語時刻付きwords.json(faster-whisper/whisper/whisper.cpp) |
scripts/plan_cuts.py | EDL:ポーズ、フィラー、リテイクを理由付きで削除 |
scripts/captions.py | 編集済みタイムライン上のSRT、スタイル付きASS、キューJSON |
scripts/render.py | EDL → 完成動画(プリセット、リフレーム、キャプション、音楽、ラウドネス) |
scripts/qa.py | フォーマット、長さ、黒、静止、無音、ラウドネス、単語、コンタクトシート |
scripts/sfx.py | 合成サウンドキット |
scripts/render_film.mjs | HTMLフィルム → MP4(ドラフト、モーションブラー付きマスター、スチル、ポスター) |
scripts/doctor.py | インストール済みと不足しているものの確認 |
assets/film.js | 決定論的モーションエンジン + スクラバー付きブラウザプレビュー |
films/ | brand-sting と launch のテンプレート |
references/ | 編集、モーション、ブランドイントロ、サウンド、プラットフォーム、ffmpeg、remotion |