Initializing... drag & drop files here
Supports: OGV
This walks through turning an Ogg Theora video into a raw Motion JPEG stream — every frame stored as its own independent JPEG, one after another, with no container around them. That structure is why people want MJPEG: it is trivially frame-accurate, decodes on almost any hardware, and survives being cut anywhere. It is also why the file gets much bigger and loses the soundtrack entirely. Both of those are covered below so nothing about the result comes as a surprise.
.ogv onto the page or click "+ Add Files". These are usually Theora video with Vorbis or Opus audio in an Ogg container — old Wikipedia media, early HTML5 test clips, screen recordings from Linux tools.HH:MM:SS.sss. Both are worth using here — see the size table..mjpeg. Files are uploaded over an encrypted connection, processed on our servers, and deleted automatically after a few hours — no sign-up, no watermark.With no bitrate modes available, the quality slider and the frame size are the entire toolkit. The scale runs 2 to 31 and behaves like JPEG quality inverted — 2 is near the encoder's best, 31 is its worst. Here is the same six-second 720 × 480 Theora clip encoded across the range on this pipeline, against a 1,108,085-byte source:
| Quality value | Output size | Multiple of the OGV source |
|---|---|---|
| 2 | 4,959,543 bytes | 4.5× |
| 5 (the default) | 3,621,881 bytes | 3.3× |
| 10 | 2,651,261 bytes | 2.4× |
| 20 | 1,806,945 bytes | 1.6× |
| 31 | 1,396,326 bytes | 1.3× |
Notice that even the worst setting is still larger than the Theora source. That is not a fault in the conversion — it is what happens when you throw away inter-frame compression. Theora describes each frame as a difference from its neighbours; MJPEG describes every frame from scratch. If your source has a static background, the gap is much wider than this test pattern suggests.
Practical patterns:
.mjpeg output; the audio is simply not carried. If you want independent JPEG frames and the sound, use OGV to AVI and set its Video Codec to MJPEG — AVI is a real container, so it can carry an audio track alongside the same frames..mjpeg" — many players decide from the extension and do not have .mjpeg on their list. VLC, mpv and ffmpeg-based tools read it directly; others may need it renamed or wrapped in a container.If your goal is simply to make an old .ogv playable again, MJPEG is a detour — the file grows several times over, the sound disappears and the playback speed becomes a guess. Convert to OGV to MP4 instead and the clip plays on every phone, browser and TV with the audio intact. MJPEG earns its place in a narrower set of jobs: feeding a machine-vision or scientific-imaging pipeline that expects independent frames, editing on a system that struggles with long-GOP video, or supplying hardware whose only video decoder is a JPEG decoder. If none of those describes you, one of the container targets is the better answer.
| If you want… | Use | Audio | Frame rate recorded | Independent frames |
|---|---|---|---|---|
| A single stream of JPEG frames | This page, .mjpeg |
No | No | Yes |
| The same frames plus the soundtrack | OGV to AVI with Video Codec set to MJPEG | Yes | Yes | Yes |
| One image file per frame | OGV to JPG with Multiple Screenshots | No | Not applicable | Yes |
| Something that just plays | OGV to MP4 | Yes | Yes | No |
Because the output format has nowhere to put audio. The dropdown, with its long list from AAC through to WMA, is shared across all video targets on the site and renders before the conversion knows what the container can hold. A .mjpeg file has no container at all — it is JPEG frames written back to back — so when the encode runs, the audio stream is simply not selected for output. We confirmed this by requesting MP3 audio explicitly and getting a single video stream back. There is no setting that changes it.
Yes, at every quality setting, and usually by several times. Theora is a modern-style codec that stores one full frame and then a long run of differences; MJPEG stores every frame independently as a complete JPEG. On our test clip the default quality setting produced a file 3.3 times the size of the source, and even the worst quality value was still 1.3 times larger. Static content widens the gap further, because that is exactly the case inter-frame compression handles best and MJPEG cannot exploit at all.
MJPEG is lossy — each frame is a JPEG. And yes, this is a second generation of loss: the Theora frames were already compressed, they are decoded back to pixels, and then re-compressed as JPEGs, so JPEG artefacts land on top of Theora artefacts. Quality 2 keeps that nearly invisible at the cost of a large file. There is no lossless path here; if you need one, extract the frames as PNG instead.
It is a quantiser running from 2 to 31 where lower is better, which is the inverse of the familiar 0-100 JPEG quality slider. Roughly, 2 corresponds to a very high JPEG quality, 5 to a good one, 10 to a noticeably compressed one, and anything above 20 to visible blocking. It is not a CRF scale, so a number remembered from an H.264 workflow will be badly wrong. The control opens at 5, which is a sensible starting point for most footage.
No. Browsers do not play raw MJPEG files from a <video> element — the closest thing they support is a multipart MJPEG stream served with a specific content type, which is how IP cameras deliver live video, and that is a server behaviour rather than a file format. For browser playback convert to MP4 or WebM instead.
Not in the file. The frames come out in order and at the right count, but the raw MJPEG format has no field in which to record the rate, so any player has to assume one. Convert to a container target if the frame rate must survive — every real container records it.
That is often the better move, and it is essentially the same data organised differently. A raw .mjpeg is one file containing all the frames; extracting to individual JPGs gives you one file per frame, which is easier to browse, edit and feed to most software. Use .mjpeg when a downstream tool specifically wants a single stream, and a per-frame export when you want to work with the pictures.
The library is, even though the format is finished. The Theora I bitstream was frozen in June 2004 and has not changed since, but libtheora is still released — version 1.0 arrived in November 2008, 1.1.1 in January 2010, and 1.2.0 as recently as March 2025. What has changed is browser support, which is now effectively gone. That combination — decodable by tools, undecodable by browsers — is exactly why converting an .ogv out to something else has become worthwhile. See the OGV converter hub for the full set of targets.