あなたは動画ディレクター兼エンジニアです。下の仕様どおりに、YouTube 用の解説動画(約3分)を「事実確認 → 台本 → 音声 → 映像 → 書き出し → 検証 → 納品」まで一気に完成させてください。 途中でこちらに確認を求めず、【完了条件】をすべて満たすまで、自分で確認・修正・作り直しを繰り返してください。止まってよいのは、進め方0の疎通チェックに失敗したときと、【上限と中断のルール】に当てはまるときだけです。 ━━━━━━━━━━━━━━━━━━━━━━━━ 【差し替え欄】(自社用に書き換えるのはここだけ) - 動画名:Gemini3.8FlashTTS解説_あなたのAI顧問版 - 会社名(正式名称):あなたのAI顧問株式会社 - サービス名:あなたのAI顧問 - サービスの一文定義:「あなたのAI顧問」は、AI・DX領域のBPOとAI教育を組み合わせ、業務改善の実装と現場の自走を同時に支援する伴走型サービスです。 - タグライン:AI・DX領域のBPO × AI教育 - 支援の進め方(5段階):業務棚卸し → 優先順位付け → 実装 → 現場教育 → 自走 - 締めの行動喚起:自社業務の棚卸しについて相談する - サイトURL:ai-advisors.jp / 問い合わせURL:https://ai-advisors.jp/contact/ - 番組名ラベル(画面左上):AIニュース解説 - 台本と映像を担当するモデル名(実際に実行しているモデル名にする):Claude Opus 5.5 - ロゴ(横長・透過PNG):03_projects/brand-assets/product-ui/assets/logo-ai-advisors.png - マスコット(正方形・透過PNG):03_projects/brand-assets/logos/anata-no-ai-advisor-robot.png - 配色:背景 #FFFFFF / 文字 #121212 / ブランド赤 #CC0700(濃 #B80600)/ AI・音声を表す色 #18BCB6(濃 #0C7F7A)/ グレー #838383・#C2C2C2・#E3E3E3・#F5F5F5 - 和文フォント:Hiragino Sans(macOS 以外なら Noto Sans JP など、太さ900まであるものをインストールして使う) - 欧文・数字フォント:Avenir Next(macOS 以外なら Inter など、800のイタリックがあるものをインストールして使う) - BGM(任意。なければBGMなし版だけ作る):~/Downloads/黄昏カフェテーブル.mp3 - APIキー:リポジトリ直下の .env にある GEMINI_API_KEY - 社内の公開コンテンツ基準(任意):00_context/ai-advisor-content-standards.md - 作業フォルダ(新規に作る):03_projects/tts-explainer-video/ - 納品フォルダ:~/Downloads/<動画名>/ ━━━━━━━━━━━━━━━━━━━━━━━━ ■ 作るもの - テーマ:Google が 2026年9月23日に発表した音声生成AI「Gemini 3.8 Flash TTS」を、<サービス名>の視点で「選べる・演出できる・つくれる」の3点に絞って解説し、会社の現場での使いどころにつなげる。 - 仕掛け:動画内の声(ナレーション・デモ)はすべて Gemini 3.8 Flash TTS で生成し、台本と映像は <モデル名> が作る。人間の声は使わない。冒頭でそれを明かす。 - 分担:台本(script.json)と画面のコード(player/ と scenes)は、このセッションのモデル自身が書く。サブエージェントや別のモデルには任せない(任せた場合は、hook の台詞とクレジットを実際の分担に合わせて直す)。 - 形式:1920×1080・30fps・H.264(yuv420p/BT.709 リミテッドレンジ)・AAC 48kHz ステレオ・2分30秒〜3分15秒。字幕は HTML で描いて映像に焼き込む(ffmpeg の drawtext や libass には頼らない)。音量は -14 LUFS。 - 納品物:BGMあり版とBGMなし版の MP4、字幕 SRT、YouTube 概要欄テキスト。 ■ 進め方 0. 疎通チェック(失敗したらその場で報告して止める):APIキーは node --env-file=.env で読む(Node.js 20.6 以上が必要。値を画面・ログ・ファイルに出さない。cat や echo もしない)/声一覧の GET が成功する/短い1文の TTS で音声(WAV か PCM)が返る/下の3つの参照先に curl で届く/ffmpeg に loudnorm と ebur128 がある/Playwright で 1920×1080 の空ページを撮影できる(ブラウザが入っていなければ npx playwright install chromium で入れてから確かめる)。 1. 公開コンテンツ基準があれば全文を読む。台本・画面の文言と矛盾する箇所は基準を優先して最小限だけ直し、直した箇所を最後の報告に並べる。 2. 事実確認:下の参照先を curl で取得してテキストにし、使う事実を research/facts.json に保存する(【事実の扱い】のとおり)。 3. 声の一覧を取得・集計し、声を割り当て、ボイスデザインで研修講師の声を用意する(再利用を優先)。 4. script.json に台本を書き、各項目の display と tts をそれぞれひらがなにして同じになることを確かめる(読み方以外の語の食い違いを防ぐ)。 5. 音声を生成 → 前後の無音を削る → 削った後のクリップで誤読チェック。 6. クリップを並べて、タイムライン・narration.wav・字幕・音量エンベロープを作る。 7. HTML で画面を作り、静止画を撮って見た目を直す。 8. 書き出し → 完成 MP4 で検証 → 納品 → 報告。 ■ 上限と中断のルール - 同じ行の取り直しは3回まで(script.json の take を1ずつ増やす)。直らなければ tts の読み方(かな・読点・区切り)を変えて回避する。語そのものは変えない(変える場合は display も同じ文に直す)。それでも直らない項目は「未達」として報告に回す。 - 書き出し直しは3回まで。TTS のリクエストは再試行も含めて合計150回まで。 - 401・403 が返ったら直ちに中断して報告する(キーや権限の問題のため)。404 はモデルIDを GET /v1beta/models で確かめ直し、見つからなければ中断する。429・5xx は指数バックオフで再試行する(1リクエストにつき最大5回、待ち時間は合計10分まで。超えたら中断して報告する。1日の利用枠が尽きた場合も同じ)。400 や音声が空の応答は、内容を記録して1回だけ直して送り直し、だめならその項目を未達にする。 - 声を他社の TTS や別のモデルで代用しない(冒頭の「声はすべて Gemini 3.8 Flash TTS」が嘘になるため)。 - 上限に達した完了条件は「未達」として理由と該当時刻を報告し、それ以外はすべて仕上げて納品する。 - 実行を始めた時点で納品フォルダや作業フォルダにファイルがあれば、それは上書きしない。フォルダ名に実行日時(YYYYMMDD-HHMM)を付けた別フォルダに出す。リポジトリ内にある既存の動画制作コードは参照せず、ゼロから作る。 ■ 事実の扱い - 参照先: - Google 公式ブログ https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-8-text-to-speech/ - https://ai.google.dev/gemini-api/docs/speech-generation - https://ai.google.dev/gemini-api/docs/voice-design - 台本と画面に出す事実は、参照先を curl で取得してテキストにし(要約するツールは使わない。言い換えで数字が変わるのを防ぐため)、該当する原文を URL 付きで research/facts.json にそのまま保存して、そこからだけ取る。facts.json の各引用が、取得したテキストの中に文字列として含まれることをコードで確かめる。対象:声の数(従来と現在)、言語・方言の数、ベンチマークの順位と点数、2モデル構成、提供先(Gemini API/Google AI Studio)、声の再現に必要な音声の長さと本人の同意、SynthID の電子透かし。 - 裏付けが取れない事実は使わない。{旧}と{N}は【構成と台本】の指定どおりに差し替える。それ以外の事実を含む項目は、その項目を削って間を詰め、画面の対応する要素も消す。 - 画面に出す数字には出典を小さく表示する(例:出典:Google公式ブログ(2026年9月23日))。 - 日本語の声の数と、話し方(accent)別・役柄(persona)別の内訳は、API の声一覧を自分で集計する。type=prebuilt を指定して next_page_token がなくなるまで取得し、プリセットの声だけを数える(自作の声は除く)。集計はボイスデザインで声を作る前に1回だけ行い、取得した JSON を research/ に保存して正本にする。役柄は persona の値の「 / 」より前、さらに「 (」より前の部分で集計する(ナレーター選びの「で始まる」と同じ基準)。画面の表記は「当社調べ:Gemini API の音声一覧(YYYY年M月D日時点)」と実際の日付にする。 - 効果を保証する言い方、「完全」「何でも」「人間不要」、料金の話は入れない。 ■ Gemini 3.8 Flash TTS の呼び出し方(2026-09-26 に実際の呼び出しで確認済み。ここを間違えると動かない) - モデル gemini-3.8-flash-tts は Interactions API で呼ぶ:POST https://generativelanguage.googleapis.com/v1beta/interactions(ヘッダ x-goog-api-key)。従来の generateContent+speechConfig の形式は使わない。 - 単一話者(speech_config は配列): {"model":"gemini-3.8-flash-tts","input":[{"type":"user_input","content":[{"type":"text","text":"読み上げ文","annotations":[{"type":"speech_metadata","style":"演技の指示"}]}]}],"response_format":{"type":"audio"},"generation_config":{"speech_config":[{"voice":"声ID"}]}} - 2人の掛け合い(speech_config はオブジェクト。単一話者と型が違うのは正しい): {"model":"gemini-3.8-flash-tts","input":[{"type":"user_input","content":[{"type":"text","text":"1人目の台詞","annotations":[{"type":"speech_metadata","speaker":"President","style":"演技の指示"}]},{"type":"text","text":"2人目の台詞","annotations":[{"type":"speech_metadata","speaker":"Consultant","style":"演技の指示"}]}]}],"response_format":{"type":"audio"},"generation_config":{"speech_config":{"mode":"conversational","speakers":[{"speaker":"President","voice":"声ID"},{"speaker":"Consultant","voice":"声ID"}]}}} (最大2人。日本語の声IDも使える。speaker 名は英数字にする) - 応答:steps[] のうち type が model_output のものの content[] にある type=audio の data(base64)。mime_type が audio/wav なら WAV(24kHz・モノラル・16bit)。PCM で返った場合は WAV ヘッダを付ける。 - 声の一覧:GET /v1beta/voices?language_code=ja-JP&type=prebuilt&page_size=50。応答に next_page_token があれば、それを page_token に渡して続きを取る。type を指定しないと自作の声(prompted)も混ざるので必ず指定する。各声に id・type・gender・pitch・accent・persona・description がある。accent は "Tokyo Japanese" のような値、persona は "High-Trust Advisor / Authoritative Advisor (Financial Advisor)" のような値。照合は大文字・小文字と記号を無視し、前方一致で行う。 - ボイスデザイン:先に GET /v1beta/voices?type=prompted&language_code=ja-JP で同じ display_name の自作の声を探し、あれば再利用する。なければ POST /v1beta/voices に {"store":true,"voice":{"model":"gemini-3.8-flash-tts","type":"prompted","display_name":"英数字と空白の名前","gender":"female","language_code":"ja-JP","prompted":{"input":"声の説明文"}}} を送る。(display_name は「AI Advisor Trainer JP」のような空白入りで作成できることを確認済み)。返ってきた voice_… の ID を voices.json に保存し、以後は再利用する。作った声は Google のプロジェクトに残る資源(上限200件・1年で失効)なので、作るのは1回だけ。 - 声の再現(実在の人の声のコピー)は使わない。機能として紹介するだけにする。 - 並列は4まで。キャッシュのキーは「モデル+声+style+読み上げ文+take」のハッシュにし、変更のない行は作り直さない。文面を変えずに取り直すときは take を1増やす。 ■ 声の割り当て - ナレーター:accent が Tokyo Japanese、persona が High-Trust Advisor で始まる男性・低めの声を選ぶ(description に warm や engaging を含むものを優先)。POINT 01 で「このナレーションもその役柄の声」と明かす仕掛けに使う。該当がなければ落ち着いた男性の声を選び、POINT 01 の最後の2行を「この声も、この一覧から選びました。」の1行に差し替え、画面では実際に選んだ声の役柄の行を強調する。 - ナレーションの style は全行で同じ文字列にする(例:経営者向けのビジネス解説。落ち着いた温かいトーンで、はっきり、テンポよく話す。)。行ごとに変えると声色がぶれる。 - 電話応対デモ:persona が Customer Support Agent で始まる女性の声を1つ。3行とも同じ声で、style だけを変える。 - 掛け合いデモ:社長役(50代前後の男性)と担当者役(30代前後の女性)を声一覧から選ぶ。 - 研修講師デモ:ボイスデザインで作る。display_name は AI Advisor Trainer JP。説明文:20代後半の女性の研修講師。明るく、はきはきとした声で、要点を分かりやすく、親しみやすく話す。標準的な東京の日本語。 ■ 台本のルール - 台本の1項目=1クリップ(全部で約40本)。ナレーションの1項目は34文字以内(字幕1行に収まる長さ。1文が基本で、短い2文までよい)。demo と dialogue の台詞は2文でもよく、字幕が2行以内に収まればよい。 - 各項目に display(字幕)と tts(読み上げ用)を持たせる。読み違えやすい語は tts をかなにする:一言→ひとこと、AI→エーアイ(「音声生成AI」「どのAI」なども含む)、AI顧問→エーアイこもん、3.8→さんてんはち、Opus 5.5→オーパス、ごーてんご、TTS→ティーティーエス、API→エーピーアイ、2,000→にせん、100→ひゃく、115→ひゃくじゅうご、30秒→さんじゅうびょう、1つ目・2つ目・3つ目→ひとつめ・ふたつめ・みっつめ、外国籍→がいこくせき、9月23日→くがつ、にじゅうさんにち。英語の固有名詞(Claude、Gemini、Google)はカタカナにする。 - 間:同じシーン内の項目の間 0.32秒、シーンの変わり目 0.85秒、デモ音声の前後 0.5秒、最後にエンドカード用の余韻 3.2秒。尺が3分15秒を超えたら、シーンの変わり目を0.6秒まで詰める(台本は削らない)。 - script.json には、項目ID・シーンID・種類(narration/demo/dialogue)・声・style・display・tts・take・デモ行の指示チップの文言を持たせる。 ■ 構成と台本({ } は facts.json とAPI集計の値。< > は差し替え欄の値。各シーンの秒数は目安で、音声の実尺に従う) 1. hook(約14秒) 台本:「この動画で、人間は一言も話していません。」「台本と映像をつくったのは、<モデル名>。」「声を担当したのは、Gemini 3.8 Flash TTSです。」 画面:中央にマスコット。左右対称のシアンの音声波形が、実際のナレーションの音量に合わせて中心から外へ広がる。下に大見出し「人間の声、ゼロ。」(「ゼロ」は赤帯に白文字)。2項目めで波形とマスコットが上へ退き、左から黒いカード「台本・映像|<モデル名>」、右から白地にシアン枠のカード「声|Gemini 3.8 Flash TTS」が入り、間に赤い「×」。 2. news(約10秒) 台本:「9月23日に、Googleが発表した音声生成AIです。」「現場で何が変わるのか、3つのポイントで解説します。」 画面:「NEWS|2026.09.23|Google 発表」のチップ、特大の「Gemini 3.8 Flash TTS」(3.8 だけ赤)、補足1行(2モデル構成)、facts.json の事実のチップ2つ(ベンチマークの順位と点数、提供先)、下に3枚のカード「01 選べる/02 演出できる/03 つくれる」(各カードに一言の説明)。 3. p1 選べる(約23秒) 台本:「1つ目は、声を『選べる』こと。」「これまで{旧}種類だった声が、{新}種類以上に。」「{N}以上の言語と方言で話せます。」「APIで数えると、日本語の声だけで{M}種類。」「その中には、『信頼できるアドバイザー』という役柄の声も。」「実はこのナレーションも、その一つです。」 裏付けがない場合:{旧}が不明なら「声は{新}種類以上。」の1行に、{N}が不明ならその行を削る(画面の数字も連動して消す)。 画面:左に大きな数字({旧}に赤い取り消し線 → {新}+ へカウントアップ、{N}+、日本語の声の数は赤)。右のパネルに「日本語{M}の声の内訳」:話し方(accent)別の積み上げ横棒(墨・赤・シアン)と、役柄別の横棒リスト(APIの分類を和訳し、上位8+その他)。「信頼できるアドバイザー」の行を赤く強調し、ライブ波形付きの「いま話している声」タグを付ける(タグで数字を隠さない)。パネルの下にナレーターの声IDを小さく。 4. p2 演出できる(約46秒) 台本:「2つ目は、声を『演出できる』こと。」「台本の1行ごとに、話し方を言葉で指示できます。」「たとえば、電話応対の研修教材なら。」 デモ(同じ声で指示だけ変える):「お電話ありがとうございます。<会社名>でございます。」[明るく・はきはきと]/「確認いたしますので、少々お待ちくださいませ。」[落ち着いて・ていねいに]/「このたびは、大変申し訳ございませんでした。」[深くお詫びするように] 台本:「同じ声でも、指示ひとつで、ここまで変わります。」「2人の会話も、1本の台本からまとめて生成できます。」 掛け合い(1リクエスト):社長「うちみたいな小さな会社でも、AIって使えるんですか?」(半信半疑で、少し不安そうに)/担当「はい。まずは毎日の業務を、一緒に棚卸しするところから始めます。」(明るく、安心させるように) 画面(前半):左に「台本」パネル(行番号・本文・右端に演技指示のチップ。チップは1つずつ入力されていく。再生中の行は赤い縦線と薄い赤の背景)。右に「生成された音声」パネル(再生中のライブ波形、いまの指示を大きく表示、最後に3つのデモの波形サムネイルを短いラベル付きで並べて比較)。 画面(後半):左に「台本(1本)」カード(社長/担当のタグ付き2行、再生中の行を強調、「1回の生成で、2人分の声に」)。右に「生成された音声(2トラック)」:秒の目盛り付きの2レーン(社長役=墨、担当者役=赤)で、再生に合わせて波形が左から伸び、赤い再生ヘッドが動く。 5. p3 つくれる(約36秒) 台本:「3つ目は、声そのものを『つくれる』こと。」「欲しい声の特徴を、文章で伝えるだけです。」「今回は、社内研修の講師をイメージしてみました。」 デモ(ボイスデザインの声):「みなさん、こんにちは。それでは、今日の研修を始めましょう。」 台本:「{秒}秒の音声から、声を再現する機能もあります。」「ただし、声の持ち主本人による、同意の録音が必要です。」「生成された音声には、すべて電子透かしが入ります。」「誰の声を、何に使うか。社内ルールも決めておきましょう。」 画面(前半):左に「ボイスデザイン」パネル(説明文が1文字ずつ入力され、赤い「声を作成」ボタンが押される)。右に「NEW VOICE」カード(声の名前、IDは後半を伏せ字、属性チップ、ライブ波形、「試聴中:生成した声で再生しています」の表示)。 画面(後半):見出し「安全に使うための前提」と3行(本人の同意が前提/生成音声には SynthID の電子透かし/社内ルールを先に決めておく)。3行目は赤枠にして「<サービス名>の視点」タグを付ける。 6. use(約26秒) 台本:「では、会社の現場のどこで使えるのか。」「研修やマニュアル動画のナレーション。」「電話や問い合わせの、一次対応。」「外国籍スタッフや、海外のお客様への案内。」「ただ、大切なのは、どのAIを使うかではありません。」「どの業務の、どんな課題を前に進めるかです。」「だから私たちは、業務の棚卸しから始めます。」 画面:3枚のユースケースカード(番号・アイコン・見出し・一言・タグ)を順に出す。消えたあと「どのAIを使うか、ではなく」(グレー+赤い取り消し線)と「どの課題を、前に進めるか。」(特大。「課題」は赤帯)。下に進め方の5段階を矢印でつないだフロー(最初の段階だけ赤)。 7. making(約5秒) 台本:「この動画も、台本から書き出しまで、コードでつないで作りました。」 画面:「この動画のつくり方」の4ステップ(台本・演出=<モデル名>/声=Gemini 3.8 Flash TTS(クリップ数と誤読チェック)/映像=HTML × コード(Claude Code)/書き出し=MP4 1920×1080)。カード内の文字が重ならないよう、各カードは縦並びのレイアウトにする。 8. outro(約18秒) 台本:「Gemini 3.8 Flash TTSは、すでに公開中です。」「Gemini APIと、Google AI Studioで試せます。」「自社のどの業務に活かせるか。」「<サービス名>が、棚卸しからご一緒します。」 画面(前半):タイトルと「● 公開中」「Gemini API」「Google AI Studio」のチップ、マスコットと波形(冒頭と対にする)。 画面(後半):エンドカード。ロゴを大きく、タグライン(キーワードを赤帯)、サービスの一文定義を短くした1行、赤い CTA ボタン、サイトURL、小さくクレジット「台本・映像:<モデル名> / 声:Gemini 3.8 Flash TTS / 制作:<会社名>」。 ■ 画面デザイン - 地の背景は白一色。装飾は余白・極太の書体・赤帯で出す(地の背景にクリーム色・グラデーション・方眼の模様は使わない。POINT のパネルだけは例外)。 - 書体はパソコンに入っている差し替え欄のフォントだけを使い、書き出し中にネットから読み込まない:和文フォントは見出しを 900 に skewX(-8deg) をかけて斜体風、本文は 700。欧文・数字フォントは 800 のイタリック。 - 日本語の改行は、 を指定したうえで word-break: auto-phrase を使い、それでも句読点だけの行や語の途中の改行が出たら で直す。 - 常に表示:左上にロゴ+細い区切り線+番組名ラベル(グレー)。右上に POINT の進み具合(01 選べる/02 演出できる/03 つくれる。いま=赤、済み=墨の枠、これから=グレー)を POINT の区間だけ表示し、その下に出典を小さく。エンドカードではロゴが中央に出るので左上のロゴは消す。 - 字幕:下中央。墨色の角丸ボックスに白文字 40px、左端に赤い縦線、下辺にシアンの線(その項目の再生に合わせて伸びる)。デモ・掛け合いの音声は白地+シアン枠にし、先頭に話者ラベル(電話応対(デモ)/社長役/担当者役/生成した声)を付ける。字幕は1〜2行。次の項目との間が短いときは、次の項目が始まるまで表示を続けてちらつかせない。 - POINT 01〜03 の頭:赤(#CC0700→#B80600 のグラデーションに細い斜線)の平行四辺形パネルが、その項目の開始0.5秒前から0.45秒かけて左から画面を覆い、「POINT 0X」と特大の「声を、〇〇。」(〇〇は白帯に赤文字)を出す。項目を読み終えたら0.05秒後から0.55秒かけて右へ抜け、次の画面を見せる。動いている間はずっとパネルの端が画面内に見えていること(画面の外を移動している時間を作らない)。 - ほかのシーンの切り替えはクロスフェード。次のシーンの見出しは切り替え直後から出し、真っ白な瞬間を作らない。 - 画面の要素は、対応する台本の項目が始まるタイミングで出す(フェードと少しの移動。数字はカウントアップ)。 ■ 作り方(技術) - フォルダ構成:scripts/(音声生成・誤読チェック・タイムライン作成・静止画確認・書き出し・納品前チェック・概要欄作成)、player/(index.html・engine.js・styles.css・assets/)、episodes/<日付>_<テーマ>/(script.json・voices.json・scenes.js・scenes.css・research/)、work/(音声・フレーム・静止画・書き出しなどの生成物)。.gitignore には node_modules/ と work/ を入れる。Node.js(ESM)で書き、Playwright は作業フォルダにローカルで入れる。 - 音声:各クリップの前後の無音(-45dBFS 未満の10ms窓)を削り、実際の長さを測ってから並べる(TTS の前後の余白は毎回ばらつく)。語頭を削りすぎないよう前に40ms、後ろに120ms残す。24kHz の narration.wav 1本にまとめる。掛け合いは、全体の25〜80%の範囲でいちばん長い無音を話者の切れ目として、字幕を2つに分ける。100Hz の音量エンベロープを作って、映像の波形に使う。 - 映像:1920×1080 の HTML に、時刻 t を渡すと画面が決まる関数 window.renderAt(t) を作る。CSS の transition と animation は全面禁止。requestAnimationFrame・Date.now・Math.random も使わない(揺らぎは t と要素の番号から計算する)。出すタイミングは秒数を手で書かず、台本の項目の開始・終了時刻 S(id)・E(id) からの相対で書く(音声を作り直しても、字幕と演出が自動でついてくるようにするため)。 - プレビュー用の操作バーを付けるなら、書き出しに絶対に映り込まないようにする(hidden 属性が CSS の display 指定で打ち消されることに注意)。 - 書き出し:Playwright(deviceScaleFactor 1)で全フレームを JPEG(品質95)で撮り、ffmpeg にパイプする。4並列で区間ごとに作り、無劣化で連結する。JPEG は BT.601 フルレンジなので、scale フィルタで BT.709 リミテッドに変換し、colorspace・color_primaries・color_trc を bt709、color_range を tv にする。 - 音:BGM 単体を ebur128 で測り、ナレーションの積分ラウドネスより 20LU 低くなるゲインで混ぜる。BGM は news のシーンの開始から入れ(冒頭のフックは声だけ)、頭2秒でフェードイン、終わり3.5秒でフェードアウト、長さが足りなければループする。混ぜたあとに2パスの loudnorm で -14 LUFS・トゥルーピーク -1.5dB にする。BGM あり・なしの2本を同じ映像から作る。 ■ 完了条件(判定結果と日時を work/checks.json に都度書き、途中で会話が要約されても続きから再開できるようにする) 1. 誤読:削った後の全クリップを、台本を渡さずに gemini-3.8-flash(generateContent に音声を inline_data で渡す)で「聞こえたとおりのひらがな(英字は聞こえた読みのカタカナ)」に書き起こす。tts は音声なしの別の呼び出しでひらがなにする。比べるのはコードで行い、カタカナはひらがなにそろえ、句読点・空白・長音記号の違いは無視する。差分があれば該当箇所を並べて判定し、読み違い・抜け・追加がないこと。誤読は tts の読み方を直すか take を増やして、その項目だけ作り直す。 2. 掛け合い:話者の切れ目で2つに分けて同じ方法で確かめ、前半に社長の台詞だけ、後半に担当の台詞だけが入っていること。 3. はみ出し:全項目の「開始+0.9秒」と「終了−0.1秒」の時点で、表示中の文字要素に横のはみ出しがなく(scrollWidth ≦ clientWidth)、字幕が2行以内であること。 4. 見た目:各シーンを2枚以上の静止画で撮って自分の目で確かめ、重なり・見切れ・不自然な改行・数字を隠すタグがないこと。 5. 完成 MP4:全シーンの境界の前後0.2秒、各シーンの中ほど、各 POINT 項目の終了時刻の −0.2秒・+0.2秒・+0.5秒のフレームを抜き出して確かめ、真っ白なフレームがないこと・操作バーが映り込んでいないこと・赤いパネルが画面を横切る途中の姿が写っていること。エンドカードの赤い CTA ボタンの中央の画素(最後から1秒前のフレーム)が #CC0700 から各チャンネル ±8 以内であること(POINT の赤いパネルはグラデーションなので色は測らない)。確認用の画像は 960×540 に縮小し、ffmpeg の tile で最大9枚を1枚にまとめて見る。 6. 形式(BGMあり・なしの両方):ffprobe で 1920×1080・30fps・yuv420p・bt709・tv・AAC 48kHz・2ch、長さとタイムラインの差が ±33ms 以内。ebur128 で -14±1 LUFS、トゥルーピーク -1.0dB 以下。尺が2分30秒〜3分15秒。 7. 同期(両方):MP4 の音声と narration.wav の10msごとの音量の相関が最大になるずれが ±10ms 以内。全項目で、開始時刻から150ms以内に、直前200msの平均より10dB以上大きい10msの区間があること。 8. 基準:社名は正式名称、数字には出典、効果の保証なし、マスコットに名前や人格を付けていない、APIキーを出力・保存・コミットしていないこと。 ■ 納品と報告 - 納品フォルダに入れるもの:<動画名>.mp4(BGMあり)、<動画名>_BGMなし.mp4、字幕_YouTube用.srt(掛け合いは話者ごとに分け、先頭に役名を付ける)、YouTube概要欄.txt(タイトル案2つ、チャプター、出典URL、使用した声、サービスの一文定義と問い合わせURL、ハッシュタグ)。 - チャプター:先頭は00:00、秒は切り捨てて表示し、表示上の間隔が10秒未満になる章は隣の章とまとめる(making は outro と一緒にする)。POINT の章は赤いパネルが入り始める時刻を頭にする。 - 使用した声:プリセットの声はIDを載せる。ボイスデザインの声はIDを載せず「ボイスデザインで作成」と説明文だけを書く。 - コミット:ブランチは切り替えない。いまのブランチが main か master なら、コミットはせずに報告に回す。それ以外なら作業フォルダを git add してから git commit -m "…" -- <作業フォルダ> とパスを指定してコミットする(ほかにステージ済みのファイルがあってもパス指定なので巻き込まない。git add . は使わない。push はしない)。 - 最後に日本語で報告する:完成物の場所、完了条件ごとの結果(未達があれば理由と時刻)、基準に合わせて直した文言、人の耳で聞いて確かめてほしい箇所の時刻(ナレーションの冒頭、デモ3種、掛け合い、研修講師の声)。