trend-explainer-video:ランキング解説動画パイプライン
C:/Users/<あなたのユーザー名>/.workbuddy/skills/video-talkcraft(TalkCraft スキル)をレンダリングエンジンとして、本スキルはランキング系コンテンツのプロジェクト骨格、全チェーンスクリプト、ビジュアルデザイン、実戦的なトラブルシューティングを提供します。動画理論や共通ゲートについては TalkCraft 本体を参照し、本スキルでは重複しません。
パイプライン手順(コマンドと落とし穴は references/pipeline.md 参照)
- スナップショット取得:ランキングページを一括取得(curl でユーザーエージェント設定)、
data/snapshot.md/.jsonに保存。ランク・スター数・概要・言語はこの一度の取得のみを信頼し、捏造禁止。 - 口述スクリプト
script.json:35フレーム固定構成 = オープニング 1 + プロジェクト10 ×(ランク文 + 詳細/スター总数文 + 使い方文 + スター总数文)+ エンディング 3(まとめ/金言/CTA)。厳格ルール:数字はすべて漢数字(例:「35」「10」「3」)各プロジェクトの先頭は必ず「第1位」「第2位」…… 各プロジェクトに「使い方」ナレーション(動詞で始め、使用場所・方法・解決する問題を解説)を追加。オープニングは「今日の GitHub 週間トレンド、トップ10 を一気に解説します」と直接切り出す。 - 音声合成:
synth_voice.py(VOICE/RATE は冒頭、edge-tts は HTTP_PROXY 必要)→assemble_voice.py(full.wav + timestamps.json)→cp audio/full.wav remotion/public/narration.wav。 - タイムライン再構築:
make_timing.py→gen_beats.py(anchors.json 生成を含む)→gen_cues.py。3か所のアンカーテーブルは必ず同期:gen_beats の REPO_ANCHORS、gen_cues の REPO_CFG、all.tsx の REPO_CFG、さらに scenes/index.ts の sceneFor(エンディング chart/quote/cta のシーン番号は挿入句により後ろにずれる)。音声パラメータ変更 = 全チェーン再構築、単なる音声差し替えは不可。 - プロジェクト実装:
assets/remotion-template/からスケルトンコピー;src/data.ts(スナップショットデータ)、src/scenes/all.tsxのREPO_CFG/USES/STEPS/ICONS/DETAILSの5テーブル +RANK_LIST(ランクシーンテーブル)を編集。その他のシーンコードはそのまま再利用。npx tsc --noEmitで検証。 - レンダリング:
node <video-talkcraft>/scripts/render_shots.mjs --all --concat out/assembled.mp4 --audio out/full-mix.wav --mux out/v?.mp4(full-mix は timing フィンガープリントに基づき自動再レンダリング)。 - 機械ゲート(すべて緑でなければ納品不可):beat_lint → motion_check(静止 + 振動)→ sfx_check solo+mix → workbench_contract_lint。しきい値と FAIL 処方は pipeline.md 参照。
- 納品:loudnorm 2パス(測定→線形正規化)→ delivery.mp4 → sfx_check --mix を再実行 → present_files。
- カバー画像:
gen_cover.pyで 1080×1920 縦型汎用カバー(特定プロジェクトなし、長期再利用)を生成、cover_vertical.png/.jpg を出力。
本パイプラインの独自ビジュアル(v16 デザイン確定、詳細は references/style-guide.md 参照)
- ランク独立ページ
RankPage:ランク名を読み上げるシーンは画面全体を独立した「第N位」ページとしてレンダリング(金色 240px 大文字 + RANK #N + リポジトリ名 + スター数 + 10セグメント進捗バー)、プロジェクトコンテンツとは同画面に表示しない。 - コンテンツカード3点セット:
IllBg(全画面イラスト背景、blur30+暗転)+OgiCard(動的イラストカード、EFFECT PREVIEW + Ken Burns + 光点 + スキャン光)+DemoPanel(ターミナル/グリッドデモ)、USES 3項目(絵文字)+DetailBlock(詳細カルーセル)付き。 - 使い方3ステップカードシーン
HowScene:各ステップ1枚のStepIconイラストカード(グラデーション背景 + 大きな絵文字 + STEP バッジ)、STEPS/ICONS2テーブルで駆動。 - Ambient 全画面環境動画:3本の光帯が位相をずらしてスキャン、motion_check の静止区間対策(小カード/テキストシーンには必須)。
- ダークカラーパレット:カラーパレットは style-guide.md 参照。スター数金色 #FFC94D、週間増加緑 #63E6A4。
高頻度トラップ(詳細は references/pipeline.md 参照)
- ImageGen 画像生成が 429 レート制限に直面する可能性 → イラストカードは emoji アイコンカード(StepIcon)、カバーは PIL プログラム(gen_cover.py)で、コストゼロで安定かつ適切。サービス復旧次第 AI 画像に切り替え可。
- motion_check 静止区間(freezedetect noise=0.003):小カード/静的テキスト/ぼかし背景シーン、低速 sin 動画では対処不可 → Ambient 3本光帯位相ずらしスキャン(3本以上、2本では真空期間発生)。
<Video>サーバーサイドレンダリングで必ずクラッシュ →OffthreadVideo+muted。- 素材 fps ≠ 成果物 fps → motion_check が「重複フレーム」と判定;オプティカルフロー補間は
minterpolate=mi_mode=blendを使用。 - Windows:シンボリックリンクはすべて拒否 → ディレクトリコピー;ffmpeg 7+ では
-vsyncなし →-fps_mode passthrough。 - edge-tts はプロキシ必要:
HTTP_PROXY/HTTPS_PROXY=http://<あなたのプロキシ>。 - all.tsx 編集は Python アトミック書き換え(Windows EBUSY 競合により Edit が成功扱いになる可能性);bash heredoc でバッククォート含む Python を渡すと途中で切れる → Write で .py ファイルを書き込んで実行。
環境クイックリファレンス
- bash PATH はセッションごとに補完:
PortableGit usr/bin+ffmpeg-bin;Python は venv 使用:C:/Users/<あなたのユーザー名>/.workbuddy/binaries/python/envs/default/Scripts/python.exe;node は管理版を直接実行;tsc はnode_modules/typescript/lib/tsc.js(bin/tsc は fnm shim に乗っ取られている)。