Initializing... drag & drop files here
Supports: MJPEG
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.
.mjpeg onto the page or click "+ Add Files" to browse. Several streams can be queued and each is processed with the same settings.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..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.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.
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 (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 |
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.
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.
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.
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.
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.
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.
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.
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.
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.