Initializing... drag & drop files here
Supports: JPG, JPEG, JFIF
Motion JPEG is the format where every frame is a complete, independently decodable JPEG — no prediction between frames, no key-frame intervals, no group-of-pictures structure. Converting a still JPG into an .mjpeg file wraps your photo into that scheme as one or more full JPEG frames. It is a niche output with real users: machine-vision rigs, IP-camera test harnesses, and frame-accurate editing pipelines all expect footage where any single frame stands alone. This page explains what the format is, what the downloaded file actually contains, and the one thing about .mjpeg timing that catches everybody out.
.jpg, .jpeg, or .jfif onto the page, or click "Add Files". Several images can go into one job..mjpeg. No sign-up, no watermark.| Property | Value |
|---|---|
| Full name | Motion JPEG (M-JPEG) |
| Formal specification | None — no single document defines M-JPEG universally |
| Related standard | RFC 2435 defines the RTP payload format for JPEG video |
| Frame structure | Intraframe only; every frame is a full JPEG |
| Compression efficiency | Around 1:20 or lower, against 1:50 or better for interframe codecs like H.264 |
| Quality control | JPEG qscale, roughly 2–31, where lower is better; no CRF ladder |
| Usual containers | AVI, QuickTime/MOV, Matroska, or a raw stream as written here |
| Audio | Not part of the codec; audio is always a property of the container |
| Common uses | Surveillance and IP cameras, webcams, machine vision, editing intermediates |
The file this page produces is a raw MJPEG elementary stream: JPEG frames written one after another with no container around them. That has one consequence worth understanding before you convert, because it makes the Duration setting behave unlike every other video page on the site.
A raw MJPEG stream stores no timing information whatsoever — there is no header saying how fast the frames should play, and nothing in the format from which a player could infer it. Software therefore picks a number, and FFmpeg's long-standing fallback is 25 fps. Meanwhile the still-image encode on this page writes one frame per second of Duration. Put those together and Duration is a frame-count control, not a runtime control:
| Duration you pick | Frames written | Runtime a 25 fps player will show |
|---|---|---|
| 1/60s, 1/30s, 1/24s | 1 | A single still, effectively instant |
| 0.1s, 0.2s, 0.3s, 0.5s | 1 | Also a single still — all sub-second entries collapse to one frame |
| 1 second | 1 | One frame |
| 5 seconds (default) | 5 | About 0.2 seconds |
| 10 seconds | 10 | About 0.4 seconds |
Nothing is wrong with the file when this happens — the frames are all present and each one decodes perfectly. The stream simply has no place to record the pace you asked for. If you need a clip whose declared runtime matches the Duration you chose, use a format with a real container: JPG to MP4 stores timing properly, and MJPEG to MP4 will rewrap an existing stream if you already have one.
The output is also silent, and there is no setting to change that. A photograph has no audio, MJPEG carries no audio of its own, and a raw stream has no container in which an audio track could live.
Because a raw MJPEG stream carries no frame-rate information and your player is guessing. The encode writes one frame per second of Duration, so a 5-second setting produces five frames; a player that assumes 25 fps runs through five frames in a fifth of a second. Force the rate in your player or tool — most accept a frame-rate argument on input — or convert to a container that records timing, such as MP4.
Because MJPEG has no constant-rate-factor ladder for the preset to map onto. The preset works by scaling from a source bitrate, and a still photograph has no bitrate to scale from, so the encoder falls back to its built-in JPEG quality step regardless of which preset you pick. On this page the control that genuinely changes output size is Video resolution: halving the pixel dimensions roughly quarters the pixel count, and MJPEG file size tracks pixels closely because there is no interframe compression to hide behind.
Because there is no interframe compression at all. Every frame is a complete JPEG, so a ten-frame stream is roughly ten copies of the picture rather than one picture plus nine small deltas. Motion JPEG achieves efficiency around 1:20 or lower where interframe codecs such as H.264 reach 1:50 or better — that inefficiency is the whole point of the format, since it is what lets an editor cut, scrub, or extract any single frame without decoding its neighbours.
Neither. One JPG is one picture, so the stream holds that picture repeated for the frame count you chose — there is no animation, pan, or transition. There is also no audio: MJPEG defines only how pictures are compressed, sound is always a function of the container, and this output has no container.
No. No single document defines a format universally recognised as a complete specification of Motion JPEG. Individual vendors documented their own implementations — Microsoft for AVI, Apple for the MJPEG-A and MJPEG-B variants in QuickTime — and RFC 2435 specifies an RTP payload format for JPEG video over networks, but none of these covers every context. That fragmentation is why MJPEG support differs so much between tools.
.mjpeg file?VLC and ffplay handle raw streams, and most non-linear editors — Premiere Pro, DaVinci Resolve and similar — decode Motion JPEG natively, which is the main reason the format survives in post-production. Camera and machine-vision viewers read it too. Browsers do decode M-JPEG, but historically in the context of a live multipart HTTP stream from a camera; a downloaded .mjpeg file dropped into a tab is generally treated as a download rather than played.
Only if something downstream specifically asks for Motion JPEG. For anything you plan to watch, post, or send, the format is a poor fit: files are large, playback support is uneven, and the missing timing metadata causes exactly the confusion described above. Convert straight to MP4 for those uses. MJPEG earns its size when you genuinely need every frame to be a self-contained JPEG — frame-accurate editing, machine vision, or feeding a rig that already expects it.
It is uploaded over an encrypted connection, encoded on our servers, and deleted automatically a few hours afterwards. No sign-up, no watermark, and nothing is shared or made public. On a large batch the practical constraint is upload size and time rather than the conversion itself.