NEWVectors or files. Pick a path.Start →
    media

    Video
    Images
    Converter

    Find the scene changes in a video and save a frame from each, right on this page. The video plays from your device in your browser, nothing is uploaded, and every keyframe downloads as a JPEG with its timestamp. The page also covers doing this across a video library through an API.

    Max file size: No set limit; the video plays from your device
    Estimated: Up to about 30 seconds, in your browser
    3 input formats

    Find a video's keyframes here

    Runs in your browser. The file stays on your device and nothing is uploaded.

    Drop an MP4, WebM or MOV file here, or choose one from your device.

    Loading the reader.

    How It Works

    1

    Drop an MP4, WebM or MOV file onto the reader at the top of this page, or choose one. The video plays from your device in your browser.

    2

    The reader samples up to 240 frames spread evenly across the video, at least a quarter of a second apart.

    3

    Each sample is shrunk to a 32 by 18 pixel thumbnail and compared with the sample before it. When the average color difference reaches 20%, that sample becomes a keyframe.

    4

    Each keyframe is drawn at up to 640 pixels wide and saved as a JPEG you can download, labeled with its timestamp and how much the picture changed.

    5

    For a whole library, the API code below runs an extractor over every video in a bucket on Mixpeek's servers and stores the output as documents you can search.

    Code Examples

    import os, requests
    
    API = "https://api.mixpeek.com"
    H = {"Authorization": f"Bearer {os.environ['MIXPEEK_API_KEY']}",
         "X-Namespace": os.environ["NAMESPACE_ID"]}
    
    # 1. a bucket, with a schema that declares the field you will send
    bucket = requests.post(f"{API}/v1/buckets", headers=H, json={
        "bucket_name": "video-inputs",
        "bucket_schema": {"properties": {"video": {"type": "video"}}},
    }).json()
    
    # 2. land the file as an object. the URL goes in data, on the blob
    requests.post(f"{API}/v1/buckets/{bucket['bucket_id']}/objects", headers=H, json={
        "key_prefix": "run-1",
        "blobs": [{"property": "video", "type": "video",
                   "data": "https://example.com/clip.mp4"}],
    })
    
    # 3. a collection over that bucket, running the extractor
    collection = requests.post(f"{API}/v1/collections", headers=H, json={
        "collection_name": "video-to-keyframes",
        "source": {"type": "bucket", "bucket_ids": [bucket["bucket_id"]]},
        "feature_extractor": {"feature_extractor_name": "multimodal_extractor", "version": "v1"},
    }).json()
    
    # 4. run extraction over the bucket
    requests.post(f"{API}/v1/buckets/{bucket['bucket_id']}/batches", headers=H, json={
        "collection_ids": [collection["collection_id"]],
        "auto_submit": True,
    })
    
    # 5. read the output
    docs = requests.get(
        f"{API}/v1/collections/{collection['collection_id']}/documents", headers=H
    ).json()
    print(docs)

    Use Cases

    Build visual indexes for video libraries
    Generate storyboards for film and advertising review
    Create thumbnail galleries for e-learning platforms
    Power visual search across video catalogs

    Supported Input Formats

    MP4
    WebM
    MOV

    Quick Info

    Categorymedia
    Max File SizeNo set limit; the video plays from your device
    Est. TimeUp to about 30 seconds, in your browser

    Processing millions of hours of video?

    Run this as a managed pipeline over your entire video archive, no infrastructure to build or maintain. Talk to us about processing at scale.

    Run it over a library

    Mixpeek runs this conversion as a pipeline over a whole library in your object storage, with the output landing as queryable documents. The reader on this page handles one file at a time.

    Frequently Asked Questions

    Ready to convert video to images?

    Start using the Mixpeek Video to Keyframes in minutes. Sign up for a free API key and follow the documentation to get started.