目的
前回は、「V-JEPA2で何ができそうか試してみる」でV-JEPA 2を手元で動かし、動画の特徴表現を使った実験をしました。今回はその続きとして、実用的な道具にするとしたら何が作れるかを試しました。
作ったのは、見本にしたい2秒の動画区間を選ぶと、手元の動画から似た特徴を持つ区間を探すツール「JEPA-ScenePick」です。動画を説明させたり、特定の出来事を認識させたりするのではなく、「この場面に似た区間はどこにあるか」を探すことを狙っています。
コードとセットアップ方法はGitHubリポジトリに置いています。
使い方
Mac上でローカル動画を選び、検索用の索引を作ります。次に、見本にしたい動画の2秒区間を選んで検索すると、似ている候補が元動画の時刻とともに表示されます。候補を再生して見比べ、keep または hold を記録し、最後に参照リストをJSONで書き出せます。
大まかな流れは次のとおりです。
- 動画を選び、検索方式を決めて索引を作る
- 見本にしたい2秒区間を選んで検索する
- 表示された候補を再生して比較する
- 残したい候補を記録し、参照リストをJSONで書き出す
索引と検索に使う方式は、V-JEPA 2とColor + Motionから選べます。Color + Motionは、OpenCVで色の分布とフレーム間の差を使う軽量なベースラインです。V-JEPA 2の準備ができていない状態で、利用できる方式へ自動で切り替わることはありません。
似た場面をどう探すか
動画から2秒の窓を作り、0.5秒ずつ開始位置をずらしながら特徴を抽出します。V-JEPA 2を選んだ場合は、各窓から64フレームを取り出してエンコーダーに入力し、出力トークンを平均して窓ごとの特徴ベクトルにまとめます。Color + Motionでは8フレームを使います。抽出した特徴量と動画の時刻などはSQLiteに保存します。
検索時には見本の2秒区間も、索引時と同じ方式で特徴量にします。その特徴と索引済みの窓の特徴をコサイン類似度で比べ、スコアの高い候補を並べます。同じ動画内で時刻が近い候補は間引き、隣り合う窓ばかりが結果を占めにくいようにしています。
V-JEPA 2は学習時に潜在表現を予測するモデルですが、このツールでは予測器の出力や予測誤差を異常度として使っていません。エンコーダーが出す特徴を取り出し、特徴ベクトル同士の近さを調べています。スコアは検索上の類似度であり、正解である確率ではありません。
UIとローカル処理
画面はHTML、CSS、JavaScriptで作り、Pythonの標準ライブラリによるHTTPサーバーから操作します。索引や検索の重い処理は同じPythonプロセス内の別スレッドで動き、同時に実行するジョブは1つです。特徴量や検索状態、候補の採否はローカルのSQLiteに保存されます。
UIサーバーは 127.0.0.1 で待ち受け、モデル推論もローカルで行います。依存パッケージのインストール時にはPyPIへの通信があります。検索時の推論先として外部クラウドを使う構成ではありません。
まず起動する
リポジトリのREADMEでは、Python 3.12または3.13を使う手順を案内しています。まずはV-JEPA 2のモデルを用意せず、Color + Motionで画面を試せます。
git clone https://github.com/daikubo-jb/JEPA-ScenePick.git
cd JEPA-ScenePick
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
jepa-search-ui --port 8765
ブラウザでローカル画面が開いたら動画を選び、索引を作成します。検索方式でColor + Motionを選び、2秒の見本区間から検索できます。
V-JEPA 2を使う場合は、PyTorchなどの追加依存に加えて、別途用意する jepa-risk-detection loader とローカルcheckpointが必要です。これらはこのリポジトリに含まれていないため、公開リポジトリをcloneしただけではV-JEPA 2の推論まで完了しません。READMEに記載された準備手順とライセンス上の条件を確認してください。V-JEPA 2のcheckpointも自動取得しません。
サンプルの合成動画で試すと、画像のようになります。右側に類似候補がリスト表示されるようになっています。

試して分かったこと
合成のテスト用の動画と手元にあるスキーの動画で試したところ、似た場面を検知できていそうです。
自分の趣味で冬にスキーをやる際に動画を撮っているので、それで試して見ようと思います。滑走時の部分を特定してハイライトとか作るのには良さそうです。
できることと、まだできないこと
検索対象は固定の2秒区間で、見本と特徴が近い区間を順位付けします。似ているスコアが高くても、同じ物体や同じ出来事が映っているとは限りません。映像の内容を文章で検索したり、試合のプレーや事故を判定したり、自動で見どころ動画を作ったりする機能はありません。実映像を使った定量評価も、まだ行っていません。
検索結果の参照JSONには動画のローカルパスが含まれます。共有するときは内容を確認してください。また、リポジトリの独自コードのMITライセンスは、外部loader、依存パッケージ、モデルcheckpointに適用されるものではありません。
まとめ
前回の「JEPAを手元で試す」から一歩進め、動画の特徴を使って似た区間を探すローカルツールを作りました。V-JEPA 2を分類器や予測誤差として使うのではなく、エンコーダー特徴の検索に使う構成です。見本を選んで候補を再生する流れまでは作れましたが、どの動画でも期待した候補が見つかるかは、これから素材と評価方法を増やして確かめる必要があります。