素材工程(実行可能パイプライン)
位置づけ:これは作業用スキルであり、ルール文書ではありません——判定、指示、検収を一気通貫で実行します。完全なルール原典は
remotion-assembly/references/broll.md(4段階の優先順位詳細/各ケースの素材リスト義務/引用仕様)にあり、矛盾があればそちらを優先します。
呼び出しタイミング
- 分割工房の第2ステップで「真素材段落」と判定された場合(プロダクト体験系の画面:タイピング/生成/インターフェース/デモ/操作)
- アセンブリ案作成前の素材リスト収集(各ケースにつき製品スクリーンショット1枚または5秒の画面録画、AIが自ら収集するため素材提供を待たない)
- ユーザーから画面録画/実写素材が提供され、本編に埋め込む場合
実行パイプライン(各ステップに検収あり、順次実施)
① レベル判定:4段階の優先順位でルート選択——ユーザー自身の録画 > 公式動画 > Webページスクリーンショット > UIモックカード。公開Webサイト/公式チャンネルがあるケースでは、直接第4段階に落ちることを禁止。
② 収集
- 公式動画:
yt-dlp --print "%(channel)s | %(title)s | %(duration)ss | %(id)s" "ytsearch8:<製品名> official"で公式チャンネルを確認 →yt-dlp -f "bv*[height<=1080][vcodec^=avc1]+ba[ext=m4a]/b[vcodec^=avc1]/b" -o "public/broll/<名前>.mp4" <url>([vcodec^=avc1]はデフォルトのAV1をフィルタリング。HEVCも同様にライブラリに登録不可。詳細はbroll.md 2c);403エラー時は順次UA /--cookies-from-browser/ プロキシを試行。 - Webページスクリーンショット:
node_modules/.remotion/chrome-headless-shell/*/chrome-headless-shell*/chrome-headless-shell --headless --screenshot=<out.png> --window-size=1920,1080 --virtual-time-budget=10000 <url>。
③ 検証(省略不可):file <ファイル> で「PNGが実はHTML」を防止;動画は ffprobe でコーデック検証、HEVCは先にH.264に変換(黒画面防止);スクリーンショットは目視でログイン壁/Cookieポップアップでないことを確認。
④ トリミング:ffmpeg -vf fps=0.5 でフレーム抽出して連絡シートを作成、Readでフレームごとに画像を読み取り、ナレーションと意味的に同期する3-8秒のレンズ区間(入力→アクション→待機→結果)を選択し、開始・終了秒を記録。
⑤ 埋め込み:Takeover内に <Sequence from={beat(x)}> + <OffthreadVideo muted src={staticFile('broll/….mp4')} startFrom={F(開始秒)}>(mutedは必須);TakeoverにはPiPなし(ユーザー裁定);スクリーンショットはShotCard/WindowCardに配置。メディアを含むSequenceには premountFor≈fps を追加して先頭フレームの黒を防止するが、そのSequenceに layout="none" を設定してはならない(ラッパー層除去後premountが無効になるため)。外側のレイヤーで return null のゲート制御を使ってコンテナの可視性を制御する場合、nullは ≥premountFor フレームだけ早く開かなければならない(seg06実測:コンテナ frame<enterAt-30 return null、内側に premountFor={30})。そうしないと親のnullがプリロードウィンドウを削除し、premountが無駄になる。
⑥ 色味統一:素材レイヤーに filter: brightness(0.9-0.92) saturate(0.95) を追加(本編の明るさに合わせて微調整)。原色のまま使うとペタペタした貼り付け感が出る(誤題 #18);Takeover部分は一律 brightness(.92) saturate(.95) で統一(seg06で実測定、区間ごとに目視微調整しない)。
⑦ 編集加工:強調箇所はパンチイン(クリップ+拡大でキー領域を表示、キーセンテンスの文字高さは ≥40px)、フレーム選択、速度変更;引用系は「まず全体を2-3秒表示→パンチインでキーセンテンス」の2段構成。Takeoverの長さは素材の自然な尺に合わせ、自然速度を優先——素材がTakeoverより短い場合は先にTakeoverを短くし、クロスフェードを早めにかける。尺を埋めるためにスローモーションにしない;playbackRate<1 はインターフェーススクロール系かつTakeoverを短縮できない場合の最終手段(≥0.7)。焼き込みハイライト/翻訳テキスト入り素材でクリーンフレームがない場合 → マスクリビール法(白マスク scaleX 1→0 で開示)。ライブラリ登録時はSOURCES.mdに「マスクリビール法適用」と明記(詳細はbroll.md 8.5)。
⑧ セグメントレンダリング検収:該当セグメントのみレンダリング --frames=a-b、フレーム抽出して確認:貼り付け感(色味)、可読性(≥16px)、はみ出し(ホワイトボードセーフエリア)、ナレーションとの同期。
保存ルール
動画は public/broll/;スクリーンショットは public/assets/;不足分はアセンブリ案に記載してユーザーに素材提供を依頼。著作権表記:公式プロモーション素材は評論目的の動画に使用。
人名には必ず肖像写真(ユーザー裁定 2026-07-22、鉄壁ルール)
口頭で特定の人名に言及した場合、人物カードのアバター枠にはその人物の実写写真を可能な限り使用し、頭文字のモノグラムで代用しない(ユーザー原文:「こういう人名が出たときは、できるだけ画像を入れてほしい。自分でネットでその人を代表する画像を探して、アバターの枠に入れてほしい」)。モノグラム/アイコンは写真が入手できない場合の最終手段に限定。
写真取得方針(2種類に分類、混同禁止):
- 公人(ジョブス、マスクなど):AIが自ら写真を取得するが、商用利用が明示的に許可されているソースからのみ取得——第一候補はWikimedia CommonsのCC BY / CC BY-SA / Public Domainエントリー、次に公式プレスリリース素材。検索エンジンからの画像をむやみに取得しない(権利が不明な商用写真が多く、ユーザーの動画は公開を前提としている)。取得後、必ず
public/broll/<作品名>/SOURCES.mdに記録:ファイル名 / ソースURL / ライセンス種別 / 撮影者クレジット。CC BY-SAでエンドロールや概要にクレジットが必要な場合、納品時にユーザーに通知する。 - 非公人(口頭で言及された先生、友人、同僚など):AIが自分でネットから写真を探してはいけない——本人確認ができないうえ、利用許可もない。この場合は「素材必要」フローでユーザーに提供を依頼;ユーザーが提供しない場合は手描きネームプレート/モノグラムを維持し、納品時に理由を説明する。
このルールは旧方針を上書きする:初期案で「ジョブスの肖像禁止、テキスト/アイコンチップのみ」としていたのは著作権懸念による保守的対応だった。今回のユーザー裁定により「ライセンスが明確な実写写真を使用する」に変更。著作権問題は写真を掲載しないことで解決するのではなく、ライセンスが明確なソースを選ぶことで解決する。
AI生成コラージュB-Roll(実素材のない感情/メタファーシーン、0722-01 定型)
真素材の4段階に該当せず、かつ感情や抽象的なメタファー表現が必要な場合(復読、手術、スマホ操作、注意力分散など、録画も公式動画も存在しない段落)は、本フローを実行:Codex image_gen で静フレーム生成 → Grok image_to_video で動画化 → 本編に組み込み。実行は gbro-collage-broll スキルの3ゲート(Gate1 メタファー / Gate2 静フレーム / Gate3 動画)に従うが、リズム、コンテナ、構図のルールは本セクションが優先(gbroのデフォルト値を上書き)。
① コンテナ:デフォルトは右側カード、全面表示ではない。B-Rollは3カラムレイアウトの右側エビデンスカードに配置(16:9 等比 objectFit:contain で全体表示、トリミングしない——ユーザー裁定「等比例で縮小」)。人物は常に画面に留まり、左側にはサイドラベル+タイムラインHUDを維持。全面表示(フルスクリーン)Takeoverは「素材と並置する情報が一切ない」場合のみ使用(A-roll鉄則:全面表示は人物を切り替えられる唯一の場所。レイアウト §2参照)。コンテナの参考実装は src/koubo/scenes-0722-01/CollageBroll.tsx(カード+OffthreadVideo、枠線は章色に合わせる)。デフォルトで全面表示にしない——0722-01では全面表示にしてユーザーに却下され、やり直しになった。
② リズム:ナレーション1文につき1枚の画像、カットでリズムを作り、レンズ内の展開に頼らない。情報量の多いナレーションでは各画像の表示時間は1-3秒。assemble-from-empty アニメーションを禁止(空の状態から組み立てていき、最後のフレームで完成=情報が常に一拍遅れ、話すテンポと衝突。8本の動画がこのため没になった)。「動画化」は——静フレームの構図は最初のフレームで既に完成。Grokは持続的な微動のみを重ねる(紙片が舞う/歯車が回る/光帯が滑る/霧が湧く)。構図は1フレームたりとも変えてはならない。
③ 静フレーム構図のルール(Codex image_gen):
- 比率の類型(一律にカットすると失敗):オブジェクト駆動のメタファー(病床/薬/カレンダー/断片/本の山——人物はあくまで要素)人物の高さは45-60%;人物駆動のメタファー(仕事中/座っている/ボタンを押す/ぼんやり——人物が主体)は必ずバストショット以上65-80%、ロングショットは無効。
- 絶対的な禁止事項:偽の文字/判読可能な英数字/ロゴ/透かし/UI;四辺も同様に確認(Codexの自己チェックでは端の偽文字を見逃すため、メインセッションでffmpegを使って四辺を切り抜き拡大して再確認)。
- プロンプト用の参照画像はユーザー指定(0722-01では
my-face-studio-default.JPGを使用);表情はナレーションに合わせる。トーンの低い部分では横顔/うつむき/仰向けを多用して違和感を回避。笑顔や苦しそうな顔は不要。 - 生成バッチごとに
md5で重複チェック、ファイルの混入を防止。
④ Grok動画化の3つの落とし穴(誤題 #39 詳細):
- 解像度:grok CLI
image_to_videoのresolution_nameは 480p/720pの2段階のみ、1080pなし(2026-07-24実測確認。1080pを要求すると720pにフォールバック);xAI API側のgrok-imagine-video-1.5は1080p i2v対応(公式ドキュメント)。全面表示で1080pが必要=CLIでは不可能:xAI API 1.5対応、もしくは他のジェネレーター(Sora 2 / Veo / Kling / Seedance;ChatCut MCPにSeedance/Kling内蔵)に切り替える。指示は明示的に解像度を直書きしないとフル画質にならない——記載がない場合、デフォルトで 736×400 に落ちる(さらにぼやける)。720pで十分かどうかはコンテナ次第:カード/ピクチャーインピクチャー(表示領域 <720px)なら720pで余裕、鮮明;全面表示で1920×1080に敷き詰める場合、720pを1.5倍に拡大するとぼやける。最終出力は1080p、B-Rollに4Kは不要(表示できない。大幅にクローズアップする場合を除く)。 - morph 増殖:崩れやすい要素(歯車/リング/カレンダー枠)はプロンプト末尾にロック制約を追加(単一の元サイズ/枠数と色は不変/リングは連続で途切れない)
- 強制的な補完:「まばらな要素+広い空白背景+中空の人型+顔の断片」はモデルが空白を埋めたり、空洞を埋めて顔を生やしたりするため、構図を変えてしまう。禁止命令を加えても効果は薄い。
- 呼び出し:ヘッドレスでは
--always-approve --permission-mode bypassPermissions --max-turns 10が必要;複数エージェントでcwdを共有する場合grok --continueは禁止(セッションが混線し、Aの成果物がBのパスに書き込まれる)。納品前に全ファイルのmd5重複チェック。
⑤ 環境の前提:Codexプロジェクトは、その書き込み可能なワークスペース内に作成する必要がある(ローカル=~/Documents/remotion剪辑/ 配下)。~/hyperframes-projects/ に作成するとimage_genは成功するが保存が拒否される;複数タスクの場合は1つのエージェントに1タスクずつ並行で割り当て、1エージェントに全タスクを直列で処理させない(途中で完了と判断して終了してしまうため)。