launch-video-kit は何をしますか?
デザイン以外の動画部分(音声、字幕、カメラ)を構成する6つの部品です。READMEがリファレンスです(各判断の根拠とそれを裏付ける数値が記載されています)。ここでは作業の順序と、うっかり見落としがちなルールをまとめます。
順序が重要
- 音声を先に、編集は後で。
gen-voice.mjsは各行の実際の長さをフレーム数で出力します。その数値でシーンのタイミングを固定します。編集を先に行うと、実際のテイクの長さが合わず、編集をやり直すことになります。 - 次に音楽。
analyze-music.mjsで楽曲のエネルギー曲線を分析し、最適な切り出し位置を選んだあと、必要ならloop-music.mjsでループさせます。 - その後にカットを、分析結果が出力する拍のグリッドに合わせます。
- 字幕は最後。どのフレーズに画面上のラベルがあるかが確定してから作業します。
うっかり見落としがちなルール
- 1行につき1つの音声ファイル。 長いテイクは避ける。
- 画面上に表示されているものだけ字幕にする。 フレーズがすでにラベルで表示されている場合、字幕を付けると同じ場所にテキストが重複します。
- 字幕の
durは読み時間であり、音声の長さではない。 手動で範囲を調整し、次の字幕や後続のラベルと重ならないようにします。 DUCK.baseは ~0.85 を超えない。 ライブラリのトラックは0dBで提供されており、さらにエフェクトをかけるとクリッピングします。- カメラは静止、短い移動のみ。 継続的なドリフト(気が散る)や急なカット(跳ねる)は避ける。各シーンは前のシーンのフレームで始める。
- 継ぎ目を挟んで同じインターフェースは同じコンポーネントを使用する。 手描きのシーンがあると細部が異なり、ブロック変更時にその違いが突然現れます。
- 時間を基準に反復処理し、内容を基準にしない。 内容配列をループしてそれより短い時間配列をインデックスすると、拍を1つ減らしただけでレンダリングが停止します。
主観ではなく検証する
エージェントは動画を見たり聞いたりできません。主観的に見えるものすべてに数値があります:
# セクションごとのミックス:音楽上の音声は、音声単独の場合と同様に測定されるべき
ffmpeg -hide_banner -ss 27 -t 4 -i out.mp4 -af volumedetect -f null /dev/null
# 全体のピークは -1 dB 未満である必要がある
ffmpeg -hide_banner -i out.mp4 -af volumedetect -f null /dev/null
# フレームを1つずつ確認する代わりにコンタクトシート
ffmpeg -v error -i f_%d.png -vf "scale=560:-1,tile=5x4" -frames:v 1 sheet.png
loop-music.mjs は自身の継ぎ目を検証します。継ぎ目が無音にならない場合はその旨を通知し、別の2つの隙間を選ぶ必要があります。
実行環境
- PATHに
ffmpegとffprobeが必要。Node 20以上。 - WindowsのGit Bash環境:
ffmpegはglobパターンをサポートせず、drawtextは fontconfig が不足しているため動作しません。代わりに連番ファイルを使用すること。またbcは利用できません。 - Remotionの
staticFile()はスペースやアクセント記号を正しく扱えません。アセットはASCIIにリネームしてください。 <Sequence>内でのuseVideoConfig().durationInFramesはシーケンスの長さであり、動画全体の長さではありません。絶対フレーム数と混同しないでください。
できないこと
TTSは「話す」ことであり「呼吸」ではありません。ため息、笑い声、効果音は別途録音が必要です。合成ブリップ音はffmpegで生成できます。READMEに例があります。