プレゼンター音声ナレーション は何をしますか?
ツール: $VIDEO_ROOT/voice/(video-generations より)(speak.py, speak_cast.py, polish_vo.py, mix_narration.py, el_cache.py); モデルは $VIDEO_ROOT/models(python studio/get_models.py)。
1. プレゼンターのように書く(声よりもスクリプトが重要)
-
画面をそのまま読まない。 画面上のテキストは事実を述べ、音声はその背後にある意味、感情、ストーリーを加える。行が画面のテキストを一字一句繰り返している場合は、書き直すか削除する。例外:製品名と最後のタグライン。
-
一行一アイデア。 短い文、6~12語。話し言葉の英語、短縮形は許可。
-
ヒーロースレッド。 一人の人物(例:Aroon、Anita、Dr Rao)を追い、その人物に言及する。人は機能ではなくストーリーを覚える。
-
エンドフォーカス。 重要な単語をフレーズの最後に配置する(「…すべてのチームが ただ一つ を保持する」)。声は自然にそこに着地する。コンテキストは前置き:「…午前2時14分、早朝に // Aroon // 倒れる。」
-
ルール・オブ・スリー:利益やリストには均等なビートで。
-
対比と転換: 問題 → 「さあ、想像してみてください…」 → 解決策。
-
開始: 各セクションをアンカーで始める(「まず、家族のために。」「では、病院の中に入ってみましょう。」)。
-
終了: 文は終止符で終わり、下降して完了したトーンにする。約束またはタグラインで締めくくり、明確な招待状、そして「ありがとうございました。」
-
ペース(ハウススタイル): ゆっくりでポーズが多いとロボット的に聞こえる(「ポーズが多すぎ、単語が少なすぎ」)。デフォルトは流暢なプレゼンターペース:
- ほとんどの行は速度 1.00、長いリストや説明は 1.02、タグラインやクロージングは 0.95~0.97、感情的なフックにのみ 0.93。
- 一行あたりの保持ビート
...は最大一つで、感情の転換点のみ(「午前2時14分、早朝に ... Aroon倒れる」、「もし ... たった一回のタップでできたら?」)。/は控えめに使う;代わりに普通のコンマを推奨。 - このスタイルでの測定レート:約 2.6~2.8 語/秒(af_kore)。予算 = 語数 / 2.7 + 0.35秒(ポリッシュテール)。行は次のビジュアルビートの前に収まらなければならない。
- 問題の構築後、および解決策の感情的なペイオフ後(「あの最初の夜よりも落ち着いている。」)に、意図的な無音(1~1.5秒、行なし)を残す。
- 密度:2.5分のフィルムで約230~250ナレーション語;すべてのシーンに少なくとも一行あるため、計画された無音以外で3秒以上無音のシーンは発生しない。
-
誠実さ: 創作された結果は含めない;架空の名前や数値はデモデータ。
-
高速パス(時間節約のため): すべての行を書く → 上記の予算で所要時間を見積もる → テキスト内でオーバーランを修正してから生成 → 一度生成する。ラップトップでの再生成は一行あたり約25~40秒かかるため、ほとんどの時間は書き直されるテキストに費やされる。
2. マークアップ(ナレーションファイル)
LINES = [(start_s, speed, text), ...]、VOICE = '...'、さらに配信ノートを含むdocstring。例:voice/examples/narration_demo.py。
/= ブレスポーズ(0.25秒)、//= 劇的なポーズ(0.55秒)、...= 保持ビート(0.8秒)。- エンジンが間違える名前は
voice/lexicon.pyで綴りを直す(例:Arun → "Aroon"、Dr → "Doctor")。最初に一行テストする。 - 複数声のダイアログ:
speak_cast.py用にLINES = [(key, voice, speed, text), ...](voice/examples/dialogue_demo.py)。
3. 音声
- エンジン:kokoro-onnx経由のKokoro、オフライン、50以上の声。良いプレゼンターの選択:af_kore / af_heart(落ち着いた、自信のある女性)、hm_omega / hm_psi(インド人男性)、am_onyx(深い男性)、bm_george(イギリス人男性)、hf_alpha / hf_beta(インド人女性)。ブレンドも可能:
hm_omega:0.6,am_onyx:0.4。 - 新しい声の選択には、候補ごとに代表的な3行(フック、解決策、タグライン)をレンダリングし、本番実行前にユーザーに選んでもらう。
- 単語レベルの強調は強制できない;フレージング、句読点、ポーズ、速度で作り出す。正確な強調には人間の録音が必要。
- プレミアムクラウド音声:
voice/el_cache.py(ElevenLabs;各行は一度課金され、その後キャッシュされる)。
4. 生成 → ポリッシュ → ミックス
python voice/speak.py <narration>.py work/vo [voice]— 再開可能;各フレーズは個別に発声され、マークされた無音で結合される。python voice/polish_vo.py work/vo work/vo_polished— トリミング、温かみ/クリアなEQ、ソフトなコンプレッション、さりげない残響、フェードアウトテール。python voice/mix_narration.py <silent.mp4> <music.wav> <narration>.py work/vo_polished <out.mp4>— 行を配置、長い行を最大1.08倍に速度調整、必要に応じて後続の行をずらし、音楽をダッキング、−16 LUFS、SRTを書き出す。- ドリフトレポートを確認する。 すべての行がビジュアルから約0.5秒以内にあるべき。ドリフトが蓄積した場合は、行を短くするか削除し(画面を繰り返す行が優先)、開始時間をビジュアルビートに合わせる。触っていない行を再生成せずに再ミックスする。
一部の行をやり直すには、古いクリップを移動し、
speak.pyを再実行する;欠落したクリップのみが補充される。クリップ番号とLINESの同期を保つ。 - MP4とSRTを納品する。