エビデンスエクスプレーナー(ボイスメモ → レシート付き1分縦型動画)
「マラウイ人がフォレックスなしでVisaカードを入手する方法」(2026年11月11日)を基に構築:4分15秒のAndroidボイスメモ → 60.4秒のTikTok動画、10枚のWebページ証拠、Bridge独自のアーキテクチャ図、9つのロゴ、4つの「カチン」効果音。動作例は assets/examples/visa-cards/(スクリプト+一般向けチェック、カットリスト、撮影ジョブ、完全な video.json、投稿文、コンタクトシート)にあります。
ボイスメモ ─► 文字起こし+アイランド ─► スクリプト+一般向けチェック(確認ポイント) ─► 音声カット(確認済みエッジ) ─► テンポ+単語
│
└► 証拠:対象矩形付きスクリーンショット・ロゴ・ドキュメントからの図
│
video.json タイムライン(シーン、ズーム、スタンプ、用語解説、カチン、図のステップ)
│
効果音+静かなBGM+ミックス ─► セーフゾーン付き静止画 ─► レンダリング ─► 検証
セットアップ
SK=~/.claude/skills/evidence-explainer
zsh $SK/scripts/new_explainer.sh "<音声ファイル>" .context/<スラッグ> # 約1〜3分;空きディスク容量を表示
cd .context/<スラッグ> # 以降すべてのスクリプトはここから実行(重要)
必要なもの:ffmpeg、Python 3(+ numpy + Pillow)、Node.js 20+、Chrome(Playwrightはインストール済みのChromeを使用)、whisper.cpp + ggml-medium.en.bin(~/.cache/whisper.cpp に配置;scripts/setup_whisper.sh でビルド;WHISPER_DIR で上書き可能)。scaffoldは remotion/ で npm i を実行、または EXPLAINER_NODE_MODULES が既存の node_modules を指している場合はそれをクローンします(APFSのコピーオンライト、約0バイト)。ルック=「開発モード」(src/brand.ts:ドットグリッド、Space Monoフォント、シアン/イエロー/アンバー色);ハンドル/サイトは video.json から取得。
各ステージ(該当箇所に来たらリファレンスを読んでください)
| # | ステージ | 読むべきリファレンス | ツール |
|---|---|---|---|
| 1 | sent.txt からビートをスクリプト化し、一般向けチェックを実行 | references/01-script-and-lay-check.md | — |
| 2 | 音声を確認済みエッジで60秒以下にカット、テンポ調整、字幕生成 | references/02-voice-cut.md | islands_labels.txt、dips.py、tx.sh、cut.py、voice.sh、words.py |
| 3 | 証拠:対象矩形付きスクリーンショット、ロゴ、ドキュメントの図 | references/03-evidence.md | shoot.mjs、logo_tools.py、logo.mjs、register_image.py |
| 4 | remotion/src/video.json タイムライン | references/04-video-json.md | エンジン src/Explainer.tsx |
| 5 | サウンド:クリック、カチン、静かなBGM、ミックス | references/05-sound.md | sfx_mix.py、score.py |
| 6 | TikTokセーフゾーン付きプレビュー、レンダリング、検証 | references/06-render-verify.md | remotion/stills.mjs、sheet.py、verify.sh |
スクリプトが確定した後のクイックパス:
python3 $SK/scripts/cut.py cut.json && zsh $SK/scripts/voice.sh 1.18 "名前、ブランド、専門用語"
python3 $SK/scripts/words.py word_fixes.json
node $SK/scripts/shoot.mjs shoot_jobs.json shots && cp shots/*.png remotion/public/shots/ && cp shots/shots.json remotion/src/shots.json
python3 $SK/scripts/logo_tools.py sync # ロゴ取得後
# remotion/src/video.json を書き込み、その後:
python3 $SK/scripts/sfx_mix.py path/to/music.mp3 # または `none`
(cd remotion && npx tsc -p . && node stills.mjs 45,300,...) && python3 $SK/scripts/sheet.py stills --zones
(cd remotion && npx remotion render src/index.ts Explainer ../out/<スラッグ>.mp4 --codec=h264 --crf=18 --audio-codec=aac --audio-bitrate=192k)
zsh $SK/scripts/verify.sh out/<スラッグ>.mp4
60秒のフルレンダリングには約40秒、静止画はバンドル後1枚あたり約1秒かかります。
ハウススタイル(初回動画のクリエイターレビューに基づく。指示がない限りこれを維持)
- フルスクリーンBロール。 スクリーンショットは1080×1920フレームを埋め尽くします(ブラウザカードなし);カメラは広角でスタートし、主張を証明する行にズームし、ハイライターでなぞります。左上に細い
https://domainピルと黄色の// evidence: …タグを配置。 - ロゴはカメラシャッター音とともに表示(白カード、わずかな傾き、スケールダウンポップ、白フラッシュ)。可能な限り多く表示する:登場するすべての企業名のロゴを1回ずつ。
- 成功した取引ごとに「カチン」効果音(アカウント作成、入金、ウォレットチャージ、支払い承認)と緑の✓チップ+リング。
- 一般向けアーキテクチャ。 1つの図(あなた → アプリ → インフラ → カード)に、ノード内にロゴを配置し、ステップごとに構築(「ステップ1・サインアップ」…)、ノード間をラベル付きパケットが移動。プロバイダ自身の開発者向け図は平易な英語のボックスにズームした部分のみ表示し、全体は表示しない。
- スクリプトを書いた後は自問する:これは製品を使う一般ユーザーにとって理解を助けるか、混乱させるか? 「混乱させる」箇所はすべて構築前に修正(用語解説カード、よりシンプルなラベル、コード風スタイルは不使用)。チェック結果はスクリプトファイルとサマリーに記載。
- 字幕は下部に固定:ボックスの下端はフレーム下端から400px(ちょうどTikTokのユーザー名/キャプションブロックの上)、2行ページは上方向に拡大、右のアクションレールを避けてパディング。
- 最初にフック(大きなドットマトリックス文字+視聴者の疑問を最初の証拠上に、ぼかし付きで表示)、最後にフォローCTA(ロゴチェーン要約、FOLLOW、ハンドル、ボタン、サイト)。
- BGMは静かなもの(score.py BASE −26 LUFS):派手でドラマチックなスコアは「うるさすぎて邪魔」と判定。
確認ポイント(推奨付きで停止して確認)
- スクリプト+一般向けチェック:何かをカットする前に。ビート表(話者の発言 → 画面表示)と混乱/明確化表。
- 検証できない主張(例:「アプリXはプロバイダYを使用」):話者の言葉のまま維持し、画面上のラベルは「例」「一例」と表記し、フラグを立てる。
- レンダリング前:
--zones付きで新しい要素すべての静止画を確認。 - 公開前:ロゴライセンス(CC BY/BY-SAはクレジット行が必要)、控えめな主張(「可能性が高い」を表示維持)、Whisperが聞き間違えた名前(キャプションは正しいスペルを使用、話者の発音がおかしくても)。公開は依頼があった場合のみ。
動作原則
- 主張より証拠:事実に基づくビートごとに、それを示すページをライブキャプチャし、該当行にズーム。ブログより一次情報源(企業ニュースルーム、公式ドキュメント、規制当局/中央銀行、アプリのストアページ)を優先。ページが言及していないこと(Bridgeの国別テーブル=オンボーディング可能な国、カード利用可否ではない)に注意し、適切にラベル付け。
- 確認済みエッジでのみカット:エネルギーアイランド+二分されたディップ(
tx.sh)を使用。Whisperの単語タイミングは使用しない(電話音声では最大数秒ずれる)。最終カットとレンダリングの再文字起こしを実施。 - 用語解説は短く具体的に:「ステーブルコイン=デジタルドル、1 USDC ≈ 1ドル」、「KYC=本人確認・セルフィー確認」、「API=Xを使えるようにする接続口」。
- ズーム制限:1200pxのモバイルスクリーンショットは ズーム1.0 でフレームを埋める(既に各辺約36pxクロップ済み);段落は1.3以下、短いターゲット(コード行、テーブル行)は1.8〜2.0。ハイライト単語と重要な列(例:通貨)がフレーム内に収まることを確認。
- 検証して報告:長さ(動画と音声)、−14 LUFS / ピーク≤−1、レンダリングの完全な文字起こし、音声より+5 dB以上のカチン音、確認したコンタクトシート。音楽は視聴せずにタグで選択した理由を説明。
最終サマリー形式
出力ファイルパス+長さ;コンタクトシート画像;画面のビートごとの内容(簡潔);一般向けチェックの評価;「投稿前確認事項」(未検証の主張、ライセンス、控えめ表現、聞き間違え名);管理情報(作業ディレクトリ、ディスク容量、再レンダリングコスト、編集すべきファイル)。