Skip to main content
Blog
Tutorial
Oct 25, 20268 min

How to Find Frames Worth Labeling in Long Videos

Hours of footage, a handful of rare scenes. Use natural-language video search to shortlist candidate timestamps, then label the frames that matter in LabelOp.

Most video datasets have the same shape. Hours of ordinary footage, and somewhere inside it, the few scenes your model actually struggles with.

Sampling one frame every few seconds and labeling all of it is the default. It is also how teams end up with 20,000 labeled images of an empty road and eleven of a cyclist at night.

This guide shows a different first step: search the footage for the scenes you need, then label those. The search part uses LabelOp Moments, a free in-browser app that finds moments in a local video when you describe the scene in your own words. The labeling part uses LabelOp.

One thing to be clear about up front: Moments finds candidate timestamps. It does not export frames, clips, or a dataset. You will extract the frames yourself and bring them into your labeling project. That step is small, and it keeps you in control of what goes into the dataset.

Short answer

  1. Write down the scenes your dataset is missing.
  2. Open each long video in Moments and describe those scenes.
  3. Preview the candidates, refine the good ones, and record their timestamps.
  4. Extract frames at those timestamps with a tool you already use.
  5. Upload the frames to a LabelOp project, label, review, and export.

Why uniform sampling is not enough

Uniform sampling (one frame every N seconds) gives you a fair picture of what the footage contains. That is exactly the problem. If 2% of the footage shows the condition you care about, roughly 2% of your sampled frames will too.

The usual symptoms:

  • a rare class with too few examples to learn from
  • edge cases (glare, occlusion, unusual poses) that only appear in failure reports
  • near-duplicate frames from long static shots eating labeling budget

These are not new problems. The class imbalance labeling strategy and long-tail class coverage guides cover them for image datasets. Video makes them harder only because finding the right frames means watching.

Where natural-language search helps

Moments samples a video at about one frame per second, turns each frame into an embedding with an on-device model (EmbeddingGemma 2 Text Vision), and ranks frames by how similar they are to your text description. You get up to five Closest moments, at least three seconds apart, each with a timestamp you can preview.

For dataset work, that means you can ask the footage questions like:

  • "a cyclist riding at night under street lights"
  • "a forklift with its forks raised next to a shelf"
  • "a person wearing a high visibility vest crouching"
  • "wet road with headlight reflections"

Instead of watching an hour of video, you check five candidates.

Because the video is analyzed in the browser and never uploaded, this also works for footage you cannot send to a third-party service.

Search is only as good as the list you bring to it. Start from evidence, not intuition:

  • Model errors. Which classes or conditions show up in false negatives and false positives?
  • Class counts. Which classes are underrepresented in your current labels?
  • Escalations. Which cases did annotators flag as ambiguous? An edge case escalation policy makes this list much easier to build.

Turn each item into one or two visual descriptions. Write them the way a single frame would look, because Moments matches single frames.

"Pedestrian partly hidden behind a parked truck" is searchable. "Pedestrian who steps out suddenly" describes an event, and a single frame cannot show "suddenly."

Step 2: Search each video

Open Moments in desktop Chrome or Edge, choose the MP4 (H.264 video), and allow the one-time model download (about 388 MB) on first use. After that the model is cached by your browser and reused.

You can search as soon as the first frames are analyzed. For long videos, a practical rhythm is:

  1. Let analysis run while you type the first descriptions.
  2. Run each description from your shortlist.
  3. When analysis has moved further, run the same descriptions again (or use Include newer footage) to cover the rest.

If you know roughly where a condition occurs, for example the night section of a dashcam recording, enable Search a time range and enter start and end times. Only analyzed frames inside that range are ranked.

Step 3: Triage the candidates

This is where human judgment does the work.

  • Preview plays up to three seconds either side of a candidate. Use it to confirm the scene and look for nearby frames that may be better examples.
  • Details shows the raw similarity score and Refine this moment, which rescans that candidate's window (up to six seconds) at two frames per second and returns the best local match.
  • Sort by Time to see candidates in timeline order, which helps spot clusters.

Two rules keep this honest.

Always verify. Moments always returns the closest moments, even when the scene is not in the video. In the project's own tests, every query for an absent scene still returned candidates. The similarity score is not a confidence score. A candidate is a lead, not a label.

Reject quickly. If none of the five match, rephrase once, narrow the time range once, then move on. Absence is useful information too: it tells you this video is not a good source for that scene.

Step 4: Record the timestamps

Use Save on candidates you want. Favorites keep each moment's timestamp and preview window, and History lets you rerun earlier queries.

Treat Saved as a working shortlist, not a dataset manifest:

  • It lives in this browser's local storage and holds at most 50 favorites and 20 recent searches.
  • It stores only compact metadata (file name, timestamps, query, range), never frames.
  • Browser storage can be cleared.

So copy the timestamps you keep into something durable: a spreadsheet or a small CSV with the video file name, timestamp, the description you searched for, and the class or condition it is meant to cover. That record also documents why each frame entered the dataset, which helps later when you write a dataset card.

Step 5: Extract the frames

Moments does not export frames or clips, so use whatever frame extraction tool you already trust. With FFmpeg, a single frame at a timestamp looks like this:

ffmpeg -ss 00:12:34 -i input.mp4 -frames:v 1 frame_000754.png

A few habits that save trouble later:

  • Name files after the source and timestamp, so every image traces back to a moment in a specific video.
  • Extract a small neighborhood when it helps. For a confirmed scene, one frame a second before and after can add useful variation. Do not extract dozens of near-identical frames.
  • Keep the original resolution. Moments analyzes downscaled frames internally for search; your training images should come from the source video.

Step 6: Label in LabelOp

Upload the extracted frames to a LabelOp project and label them like any other image set.

  • Smart annotation gives you click segmentation and similar-object search in the browser on compatible devices, plus zero-shot detection where you describe the objects you want to find.
  • Dataset management shows annotation counts and label statistics, so you can check whether the targeted frames actually moved your class balance.
  • Team review lets reviewers approve or reject with a note, which matters more for edge cases than for ordinary frames.
  • Export supports COCO, YOLO, Pascal VOC, and other formats when the batch is ready.

If your task needs object tracks across consecutive frames rather than individual images, that is video annotation, not frame curation. See the companion post on LabelOp Tracker.

Mix targeted frames with a random baseline

Targeted search is biased by design. That is the point, but it has consequences.

  • Keep a random sample too. A uniformly sampled slice of the same footage keeps your dataset representative and gives you an honest evaluation set.
  • Watch your splits. Frames found by search in the same video are often similar. Keep frames from one video in the same split so near-duplicates do not leak between train and test. The dataset split planning guide covers this.
  • Measure the effect. Compare model errors on the targeted condition before and after the new batch.

This is close in spirit to active learning, except the selection signal is your description instead of model uncertainty. The two combine well: model errors tell you what to search for, and search finds more examples.

Limits to plan around

From Moments' own documentation:

  • Visual frames only. No audio analysis, so sounds and speech are not searchable.
  • About one frame per second. Very short events can fall between samples.
  • Single-frame matching. Direction of motion and the order of events are not understood.
  • One MP4 (H.264) video at a time, and the analysis is cleared when you refresh the page.
  • No export. Timestamps are the output; frame extraction is up to you.

Measured results are encouraging but limited. On one animated film with 20 queries fixed in advance, the expected scene was in the top five for 19 of 20 on an RTX 5060 Ti. On three further videos it was 32 of 36 positive English and Turkish queries. The project itself states that a few test videos do not establish accuracy on arbitrary footage, so test it on a video you know before you build a process around it.

Try it on one video

Pick one long video from your backlog and three scenes your model gets wrong. Search for them in LabelOp Moments, extract what you confirm, and label that batch in LabelOp. If it finds in minutes what used to take an afternoon of scrubbing, add it to your curation routine.

FAQ

Can LabelOp Moments export frames or a dataset?

No. Moments finds and previews candidate timestamps. Extract the frames with your own tool, such as FFmpeg, then upload them to your labeling project.

No. The video is read and analyzed in your browser, and neither the video nor your queries are uploaded.

How many candidates does each search return?

Up to five closest moments, at least three seconds apart. They are always returned, even if the scene is absent, so preview each one.

No. Mix targeted frames with a random sample from the same footage so the dataset stays representative and your evaluation stays honest.

Can I label video tracks instead of single frames?

That is a video annotation task. LabelOp Tracker is the LabelOp family tool for video annotation and tracking; Moments is for finding the scenes.

Take the next step with your dataset.

Use local AI, managed cloud labeling, and team review in LabelOp. Export your work or train with your own Vast.ai account.

Start free