MJPEG to BMP Converter

Convert MJPEG files to BMP format online. Free, fast, no watermarks.

Initializing... drag & drop files here

Supports: MJPEG

OptionsAdvanced Options - Our defaults are optimized for the best results. We recommend you keeping the defaults unless you have a specific need.
Image Compression
Quality preset
Higher quality settings preserve more detail but result in larger files. Lower settings reduce file size by increasing compression.
Image resolution
Frame Selection
Time (seconds)
Capture a single frame at the specified time. For example, 2.100 means 2 seconds and 100 milliseconds into the video.

Extract a BMP Frame from a Raw MJPEG Stream

A .mjpeg file is Motion JPEG with no container around it — a run of complete JPEG images written end to end, which is what IP cameras, surveillance recorders and machine-vision hardware produce when they dump frames straight to disk. This page pulls one of those frames out and writes it as a Windows Bitmap. BMP is the format you choose when a legacy Windows application, an imaging SDK or an industrial inspection tool refuses everything else; for anything else, PNG is smaller and more faithful. Two quirks of raw MJPEG make this page behave differently from other frame grabs, and both are covered below.

How to Convert MJPEG to BMP

  1. Upload Your MJPEG File: Drag the .mjpeg onto the page or click "+ Add Files" to browse. Several streams can be queued and each is processed with the same settings.
  2. Choose Frame Selection: Frame Selection opens on Specific Frame with Time (seconds) at 0, which gives you the first frame in the stream. On this source, leave that number alone and read the next section before changing it — Multiple Screenshots with a Capture Rate is the mode that works reliably here.
  3. Pick the Quality Preset and Image resolution: Quality preset offers exactly three entries on a BMP target — High, Medium and Low — and they select entirely different writers rather than nudging a quality dial. Image resolution opens on Keep original.
  4. Convert and Download: Click Convert and save the .bmp. Files upload over an encrypted connection, are processed on our servers, and are deleted automatically after a few hours — no sign-up, no watermark, never shared or made public.

Frame Selection on a Stream With No Timeline

A raw MJPEG stream stores no frame rate, no duration and no timestamps — probing one returns N/A for all three. That has two effects on this page, and we measured both.

Seeking to a timestamp does not work. The Specific Frame mode seeks into the input before decoding, and the demuxer that reads a raw JPEG stream cannot seek. We ran a five-second stream at every timestamp from 0.5 through 4.9 seconds: 0 returned the frame, and every non-zero value returned nothing at all. So on this source, Specific Frame is a first-frame grabber and nothing more.

Multiple Screenshots does work. That mode reads the stream from the beginning and samples it with a filter instead of seeking, so it never runs into the same wall. We pulled five stills out of a five-second stream at one frame per second without trouble. This is the mode to use whenever you want a frame that is not the first one.

One thing to keep in mind when you set the Capture Rate: because the decoder has to assume 25 frames per second on a stream that declares none, "one frame per second" means every twenty-fifth image in the file, not every second of real recorded time. On footage captured at 5 or 10 fps — normal for surveillance and inspection systems — the samples land further apart in real time than the label suggests. If you want every frame, pick the fastest rate on the list.

What Each Quality Preset Writes

BMP has no quality dial in the JPEG sense — it is a raw pixel container, so the only thing a quality setting can change is how many colours a pixel is allowed and how the file is packed. On this target the preset therefore selects a completely different writer per rung. Note also that only three rungs exist here: the Highest, Very High, Very Low and Lowest entries you see on other image targets are not offered for BMP. We ran one 1280 x 720 frame through each and read the headers back:

Preset What the writer produces Header reports Measured size, one 1280 x 720 frame
High 16-bit RGB 555 — five bits per channel, uncompressed 16-bit, TrueColor, no compression 1,843,254 bytes
Medium 256-colour palette with Floyd–Steinberg dithering, written as a BMP3 file 8-bit, Palette, RLE compressed 162,820 bytes
Low 86-colour palette with Floyd–Steinberg dithering 8-bit, Palette, RLE compressed 125,918 bytes

The High figure is not an estimate — an uncompressed 16-bit bitmap is exactly width x height x 2 bytes plus its header, so 1280 x 720 always lands on 1,843,254 bytes whatever the picture contains. At 1920 x 1080 the same arithmetic gives 4,147,254 bytes. The Medium and Low sizes do move with content, because RLE compresses runs of identical palette entries.

The ceiling is worth noting too: even the High preset writes a 16-bit bitmap, not a 24-bit truecolour one. On flat gradients that can show faint banding a truecolour file would not. If you need every colour the frame actually held, extract it as MJPEG to PNG instead.

BMP or PNG for a Machine-Vision Frame

BMP (this page) PNG
Colour depth available here 16-bit RGB 555, or a 256/86-colour palette Full 24-bit truecolour
Compression None at High; RLE at Medium and Low Lossless, and far more effective
Size of the same 1280 x 720 frame 1,843,254 bytes at High Typically a fraction of that
Faithful to the decoded frame Close, but limited by 5-bit channels Exact
Alpha channel Not from this conversion Yes, though a video frame has none to carry
Read by old Windows software and imaging SDKs This is its entire reason to exist Usually, but not always
Choose it when Something specifically demands an uncompressed Windows bitmap Every other time

Frequently Asked Questions

Why does my timestamp return nothing?

Because a raw MJPEG stream cannot be seeked. There is no index, no timestamps and no container to hold either, so the seek that Specific Frame performs simply finds nothing to decode. We tested a five-second stream at half-second intervals: 0 produced a frame and every other value produced an empty result. Set Time (seconds) back to 0, or switch Frame Selection to Multiple Screenshots, which samples the stream from the start rather than seeking into it and works normally.

Why are there only three quality presets here?

Because the BMP writer only implements a handful of behaviours, and the page hides the entries that have no meaning for a bitmap. High, Medium and Low each select a genuinely different writer — a 16-bit uncompressed encode, a 256-colour RLE palette, and an 86-colour RLE palette respectively. Highest and Very High would have nothing extra to give over the 16-bit ceiling, and the bottom rungs would not save enough to be worth offering. On other image targets, where the format has a real quality scale, all seven appear.

Which frame do I get if I leave everything alone?

The first image in the file. Frame Selection starts on Specific Frame with Time (seconds) at 0, so converting without touching anything captures the opening frame. On a camera stream that is often useful — the first frame is a complete JPEG like every other — but if the recorder started before the scene was lit or in focus, it will not be the frame you want. Use Multiple Screenshots to get a spread and pick from them.

Why is one BMP bigger than the whole MJPEG stream sometimes?

Because of how differently they store pixels. Each frame inside the MJPEG is a compressed JPEG, typically a few tens of kilobytes. A BMP at the High preset stores every pixel as raw bytes with no compression at all: 1280 x 720 pixels at two bytes each is 1,843,200 bytes before the header. On a short stream that single bitmap can genuinely outweigh several seconds of source. The Medium and Low presets use a reduced palette plus RLE, which is why they come back roughly ten times smaller.

Do the Medium and Low presets look speckled on purpose?

Yes. Both reduce the frame to a small palette and use Floyd–Steinberg dithering to approximate the colours that are no longer available, scattering the remaining colours in patterns that read as intermediate shades from a normal viewing distance. Up close that pattern looks like speckle. It is the standard trade for palettised formats and it is not a fault. If you cannot live with it, stay on High or use PNG.

Can I get a 24-bit BMP out of this page?

Not directly — the High preset writes 16-bit RGB 555, which is the most colour this converter puts into a bitmap. If your workflow specifically requires 24 bits per pixel, extract the frame as PNG here, then re-save it as a 24-bit BMP in an image editor. The PNG is a lossless copy of the decoded frame, so nothing is lost by taking that route.

Does the extracted frame look better than the video?

No. The frame is decoded out of the stream exactly as it was stored, then written into the bitmap — nothing is added and nothing is restored. MJPEG compresses each frame as an independent JPEG, so whatever blocking, softness or noise that JPEG contains comes through into the BMP, just stored far more expensively. What genuinely helps is choosing a well-lit, static moment rather than one mid-motion.

Can the bitmap hold transparency?

No. The frames in a Motion JPEG stream are opaque — JPEG has no alpha channel — and the bitmaps written here are 16-bit RGB or palettised, neither of which stores alpha either. If you need a still with genuine transparency, start from a PNG so the format can hold the alpha channel once you cut the subject out in an editor.

What happens to my stream after the conversion?

It is uploaded over an encrypted connection, decoded on our servers, and both the upload and the bitmaps it produced are deleted automatically after a few hours. Files are never shared or made public, there is no sign-up and no watermark, and your original .mjpeg is never modified — every still is written as a new file for you to download.

Rate MJPEG to BMP Converter Tool

Rating: 4.8 / 5 - 102 reviews