動画の画像解析基盤
数値処理で見る画像を絞り、返された画像をCodexが実際に読む。CLIは画像を渡すところまでを担い、意味・品質・採否を判定しない。生成動画の合否判断は review-generated-video を使う。
実行環境と保存
同梱の video_analysis.py を使う。Python 3.11以上、NumPy、FFmpeg/ffprobeが必要。利用可能な環境を確認し、不足していれば既存の依存環境を探す。特定project、動画名、実験データ、OCR出力への依存はない。ネットワークや生成APIは呼ばない。
保存を依頼されていなければ --out を省略する。一時ディレクトリに画像と処理状態を置き、報告は会話内で返す。review.md やリポジトリ内の解析成果物は自動作成しない。永続的な画像出力を求められた場合だけ --out NEW_DIRECTORY を指定する。既存ディレクトリは上書きしない。
以下の <skill> はこのスキルのディレクトリ、<session> はprepareのJSONが返した絶対パス。
1. 数値解析と代表画像の取得
python3 <skill>/scripts/video_analysis.py prepare "VIDEO_PATH"
全フレームを160×96へ縮小して、画素差・局所RGB・色分布・明暗構造・鮮明さを計算する。数値的な区間と区間内の持続した変化から候補を作り、代表画像だけを元映像から抽出する。暗いカードや平坦な区間も存在情報を残す。数値上の区間は意味上のショットではない。
既定は初回最大32枚、追加予算12枚。--max-initial、--extra-budget で用途に合わせて指定できる。初回上限で区間が省かれた場合は initial_cap_omitted_segments と各segmentの initial_frame_index: null で分かる。上限や数値閾値は品質保証ではない。
JSONの frames にある画像を view_image など実際の画像閲覧ツールで確認する。パスを列挙しただけ、CLIが成功しただけで分析済みにしない。原寸で見づらければ要所を拡大し、画像生成で証拠を補完しない。
まず時刻・被写体・構図・見える状態と、確認したい疑いを整理する。全テキストの転記は目的にしない。画像の意味を読む際の観点と追加要求の選び方は 視覚分析 を使う。
2. 不明箇所を追加する
数値区間内の別候補を最大3枚取得する例。
python3 <skill>/scripts/video_analysis.py request "<session>" \
--segment 3 --mode novelty --count 3 --reason "接触箇所が別の状態でも保たれているか"
novelty は同じ区間の既配信画像から異なる候補、late はまず区間後半の候補を返す。late は動作の結果や必要な文字の完成状態を確認したいときに使える。返却後は実画像を読み、疑いが解消したか、別の状態が見えただけかを分ける。
動作を調べるときは、離れた候補だけで済ませず次のsequenceを使う。
python3 <skill>/scripts/video_analysis.py sequence "<session>" \
--start 12.0 --end 12.5 --count 12 --reason "手と物体の接触の前後"
秒数は動画の最初のフレームからの相対時刻。指定区間の元フレームが予算を超える場合は、両端を含む時間順の間引き画像を返す。all_source_frames_included: false を全フレーム確認と読み替えない。前後関係のため既配信画像を再度含む場合も、その枚数は追加予算を消費する。十分な時間分解能がない場合はその判断を保留する。
3. 質問されなかった変化を少数補う
python3 <skill>/scripts/video_analysis.py supplement "<session>" \
--count 4 --reason "未確認の大きな視覚変化を補完"
未代表の区間、次いで同じ区間の既配信画像から数値差が残る候補を選ぶ。選んだ画像を比較対象へ加え、近い候補を繰り返さないようにする。数値差が既定の下限0.08未満なら打ち切る。--threshold は変更できるが、既知の正解画像を拾うためだけに調整しない。動作の疑いの解消に必要な予算を先に取り、補完だけで枠を使い切らない。
request・supplement・sequenceは同じ追加予算を共有する。並行呼出しでもロックで予算と履歴を保ち、上限を超える要求は残り枚数へ縮め、残り0なら失敗する。数値差が大きくても意味が重複する場合は追加を続けない。
読取と結果の受渡し
- 返却値の
seconds、source_pts、frame_indexと実画像を対応させる。VFRでもFFprobeのPTSを使い、単純な番号/fpsへ置き換えない。 state.jsonに記録するのは配信した画像。モデルが見た証明ではない。未確認の配信画像があれば、追加を繰り返す前に確認する。- 既存の解析セッションと読取結果を再利用する。元動画が変わった場合はhash照合で追加を拒否するため、新規セッションを作る。
- 主担当が画像を確認してよい。Lunaなどへの分担が承認・指定されている場合は、その観測結果を使えるが、自動で別モデルや課金APIを起動しない。
- 結果は会話内で、観察事実、根拠時刻、解消した疑問、未確認事項を渡す。保存を求められた場合だけ成果物へまとめる。
数値解析や時刻順の静止画像は、実際の連続視聴、音声解析、滑らかさの確認を代替しない。必要な能力が使えない場合は、その観点を未確認として返す。