Initializing... drag & drop files here
Supports: MJPEG
An .mjpeg file is about as bare as video gets: a raw Motion JPEG elementary stream, which is literally a run of complete JPEG images concatenated together, with no container around them, no audio, and no timing information. APNG is animated PNG — the same PNG container you already know, extended with an animation control chunk so a single file plays a sequence of frames. Converting between them is a natural fit, because both formats think in whole, independent frames. This page compares APNG against the obvious alternative, GIF, and covers the one quirk that catches people out: what happens to timing when the source never recorded any.
| Property | APNG (this page) | GIF |
|---|---|---|
| Colour depth | Full 24-bit — 16.7 million colours | 256 colours per frame, chosen from a palette |
| Transparency | 8-bit alpha, so edges can fade smoothly | Binary on/off only, which leaves hard fringes |
| Compression | Lossless PNG compression per frame, with interframe deltas | Lossless LZW over a quantized palette |
| Photographic footage | Looks correct — no banding or dithering artefacts | Visibly dithered; gradients and skin tones suffer |
| File size on photographic content | Often large, because lossless coding of photographic frames is expensive | Smaller, but only because the picture was reduced to 256 colours first |
| Browser support | Chrome 59+, Firefox, Safari 8+, Edge 79+, roughly 96% of traffic per caniuse | Universal, including ancient software |
| Fallback where unsupported | The first frame displays as a normal still PNG | Not applicable |
| Looping | Infinite by default here | Infinite by convention |
.mjpeg onto the page or click "Add Files". This page accepts the raw .mjpeg elementary stream. Files are uploaded over an encrypted connection, processed on our servers, and deleted automatically after a few hours..apng. The animation loops indefinitely. No sign-up, no watermark.This is the detail that explains most surprises. A raw MJPEG file has no container — no AVI, MP4 or Matroska wrapper — and therefore no place to record how fast the frames were captured. Decoders have to assume something, and ffmpeg's long-standing assumption for a timing-free MJPEG stream is 25 fps.
| Carried by a raw .mjpeg stream | Present? |
|---|---|
| Complete JPEG frames | Yes — that is the entire file |
| Frame timing or timestamps | No; 25 fps is assumed by the decoder |
| Audio | No; the format has no audio provision |
| Alpha channel | No; JPEG cannot store transparency |
| Duration, resolution or codec metadata | No container header exists to hold it |
| Interframe compression | No; every frame is independent |
Two practical consequences follow. First, if your stream was genuinely captured at some other rate — a webcam at 15 fps, a time-lapse at 1 fps — the assumed timeline is wrong, and no setting on this page can retroactively fix the real capture rate. Wrapping the stream in a proper container at the correct rate before uploading is the only clean fix. Second, because JPEG has no alpha channel, the resulting APNG is fully opaque even though APNG itself supports transparency; the format's alpha capability is there for you to use later in an editor, not something the conversion can invent.
It animates. The converter decodes the JPEG frames out of the stream and assembles them into a true animated PNG with an infinite loop. That is different from a converter that turns a video into a still image — here the whole point is the animation. Where a viewer does not understand APNG, it falls back to displaying the first frame as an ordinary PNG rather than failing.
10 FPS (Recommended) is a reasonable default that keeps files manageable, but the right answer depends on the content. Screen recordings and slow motion look fine at 10 or 12 FPS. Anything with fast movement needs 25 or 30 to avoid looking choppy. Lower rates keep fewer frames, so the file shrinks proportionally — dropping from 25 to 10 FPS removes well over half the frames. The setting controls both how many frames survive and how quickly the finished animation plays.
Because a raw MJPEG stream stores no timing at all. The decoder has to assume a rate, and 25 fps is the conventional assumption. If your capture was actually recorded at, say, 15 fps, everything downstream is scaled by that mismatch and the animation appears sped up. Nothing on this page can recover the true rate, because the information was never written to the file. Wrap the stream in a container with the correct framerate before uploading if timing accuracy matters.
Very possibly, yes. MJPEG compresses each frame with lossy JPEG, while APNG compresses each frame losslessly — and lossless coding of photographic content is expensive. APNG's interframe deltas help when large parts of the picture are static, such as a screen recording with a fixed background, but they do little for handheld camera footage where every pixel changes. If size is the priority, MJPEG to MP4 will beat both by a wide margin.
No. Every frame in an MJPEG stream is a JPEG, and JPEG has no alpha channel, so there is no transparency to carry over — the output is fully opaque. APNG's own support for 8-bit alpha is still useful afterwards: if you open the file in an editor and mask out a background, the format will store that transparency properly, which is exactly what GIF cannot do.
Because MJPEG sources are photographic, and GIF has to squeeze each frame into 256 colours. That quantization produces the dithering, banding and colour shifts that make converted video look cheap as a GIF. APNG keeps all 16.7 million colours, so gradients, skin tones and compression noise reproduce as they were. The trade is file size and a small compatibility gap — GIF opens in absolutely everything, whereas APNG needs a browser or viewer from the last decade.
Not from this page — the APNG is written with an infinite loop, which is what almost every use of an animated image on the web expects. If you need a fixed loop count, the file can be rewritten afterwards with a local APNG tool such as apngasm, which exposes a loop parameter directly.
Not more than usual, but it happens at a specific point: the frames are scaled while they are being extracted, before the animation is assembled, because the APNG assembler cannot resize an existing file. Every frame therefore gets the same resampling treatment, and the animation stays consistent. Choosing a preset height rather than an explicit Width × Height keeps the source aspect ratio intact.
Your MJPEG is uploaded over an encrypted connection, processed on our servers, and both the upload and the generated APNG are deleted automatically after a few hours. There is no account, no watermark, and nothing is shared or made public. If you later want the same animation as a GIF, APNG to GIF handles the second hop.