jevreel:動画に質問する
jevreel は動画を1秒1フレームのコンタクトシートに展開し、TypeSafe の高速判断モデル Jev が全シートを並列にスクリーニングし、最も該当する範囲をフルフレームで再確認します。あなた(メインのエージェント)はその結果を確認します。Jev は型付きの回答と確率を返し、説明は行いません。読み取り、説明、結論はあなたの役目です。
セットアップ確認
TYPESAFE_API_KEYは Jev に問い合わせるすべての操作(タイムラインによるインデックス、ask、find、locate、whole、lenses)で必須です。ズーム、トランスクリプト、タイムラインクエリは API キーなしで動作します。ffmpegとffprobeが PATH に含まれている必要があります。- URL を指定する場合は
jevreel[url]、字幕のない動画でトランスクリプトを取得する場合はjevreel[asr]が必要です。
ワークフロー
- 一度インデックスする。 MCP
index_video(source)またはjevreel index <file-or-url>。以降の呼び出しでは、返されたid、パス、またはタイトル("tears of steel")を使用します。すでにインデックスされた動画を再度インデックスすると即座に結果が返ります。 - 瞬間を見つける。
ask_video(video, query)/jevreel ask <id> "<query>"。- クエリは画面に表示されているか発言されている内容を平易に記述します: "スライド上の棒グラフ"、"誰かがラップトップを開ける"、"話者が価格について言及する"。
- クエリは1回に1つの内容にします。"赤い車と犬"は2つの ask に分割してください。Jev は単純な質問に最も正確です。
mode:visual(画面のみ)、speech(トランスクリプトのみ、最も安い)、both、またはauto。- ユーザーが動画の一部を指定した場合は
start/endで範囲を絞ります。
- 写真から見つける。
find_in_video(video, image_path, note="person")/jevreel find <id> photo.jpg --note person。 - 答える前に確認する。 ヒットは手がかりであり、事実ではありません。検証済みのヒットには
frame(その瞬間のフル解像度画像)が付属します:それを確認してください。zoom_video(video, start, end)/jevreel zoom <id> 12:00 12:10でより多くのフレームを取得できます。locate_in_frame(video, at, target)は1フレーム内の1つの対象をボックスで囲み、切り抜いて拡大表示します。 - 発言内容の取得。
video_transcript(video, start, end)/jevreel transcript <id> --start 12:00 --end 13:00。 - 動画全体の質問。
ask_whole_video(video, question, kind, options)/jevreel whole <id> "これはチュートリアルですか?"。kind=choiceで選択肢を指定するか、kind=scoreでレベルを低い順に指定(最大10)します。
Lenses:動画全体で同じ質問を繰り返す場合
ユーザーが動画全体にわたって複数の要素(画面上の人物、安全ルール、ブランド、天気、スライドの有無など)を気にする場合、それぞれ個別に問い合わせるのではなく、lens を実行します。1分ごとに、1回のリクエストですべての質問に回答します。その後、必要なだけ無料で回答をフィルタリングできます。
- MCP
run_lens(video, lens)の例:{"name": "site", "questions": [{"name": "helmet_off", "type": "noul", "ask": "ヘルメットを着用していない作業員が見えますか?"}, {"name": "vehicle", "type": "choice", "ask": "最も目立つ車両は?", "options": ["車", "トラック", "なし"]}, {"name": "crowd", "type": "score", "ask": "混雑度は?", "levels": ["空いている", "少し", "混雑"]}]}。 CLI:jevreel lens <id> lens.toml。インデックス時に lens を含めるには、index_video(またはjevreel index --lens)に渡します。追加コストはほぼかかりません。 query_timeline(video, "helmet_off > 0.7")/jevreel query <id> "helmet_off > 0.7 and vehicle == truck"。 条件は列 演算子 値の形式で、andで結合します。値に "and" が含まれる場合は引用符で囲みます(place == 'books and a desk')。whereを省略すると、すべての分とその列が表示されます。 はい/いいえの質問では、<name>_at(その瞬間が最も顕著な秒)も得られます。- デフォルトのタイムライン列も利用可能:
people、talking_to_camera、screen_or_slides、text_on_screen、cut、setting、activity(0-3)、keyframe。
結果の読み取り
probabilityは Jev の「はい」確率です。strongは少なくとも 0.7 を意味します。verifiedヒットの場合、これはフルフレームから得られ、at/timeはそれを最もよく示したフレーム、screenedはその前のコンタクトシート確率です。未検証のヒットはシートのみから得られます。shownとsaidはそれぞれ画面とトランスクリプトの質問で、別々に問い合わせます。alsoは同じウィンドウ内の他の可能性のある瞬間をリストします。- 確率は順位付けには適していますが、較正されているとは限りません。確認していないことは述べる前に確認し、弱いヒットしかない場合はその旨を伝えてください。
- しきい値を超えるヒットがないというのも有効な回答ですが、まず
weakを確認してください。Jev が除外しなかったウィンドウ(検証で覆されたものを含む)です。「見つからない」と言う前に、それらのウィンドウをズームインしてください。 - 瞬間はその時刻(例:「12:04」)で引用し、ユーザーがそこにジャンプできるようにします。
コスト
Jev は入力トークンのみ課金し、同じリクエストの繰り返しは jevreel のキャッシュから無料で応答されます(結果の cached で確認可能)。各 ask は、範囲内の各シート(動画の1分あたり1シート)を1回送信し、検証済みウィンドウごとに1リクエスト追加されるため、start/end で範囲を絞ると ask のコストが下がり、高速化します。結果には requests、cached、input_tokens、estimated_usd が報告されます。