Turning a DVR Recording into a JPEG Frame Sequence
A .mjpeg file is not a container — it is a run of complete JPEG images written back to back with nothing between them. Convert a five-second 25 fps DVR recording and you get exactly 125 JPEGs in one file; we counted the FF D8 FF start-of-image markers in our own test output to check, and cutting the file at the second marker yields a perfectly valid 640×480 .jpg. That property is the whole reason to pick this target: every frame is independently decodable, so frame-grabbing tools, analysis scripts and machine-vision pipelines can walk the file without a codec that understands prediction.
It also means two things go missing. There is no audio stream anywhere in the output, and there are no timestamps, so nothing in the file records what frame rate the recording ran at.
First: What Is Actually Inside Your .dvr File?
.dvr is not one format. It is an extension various set-top boxes, security recorders and PVR applications put on their recordings, and what is inside varies by manufacturer. Our converter does not trust the extension — the file is probed by its actual bytes, so a recording that happens to be an MPEG transport stream is handled as one regardless of what it is called.
| What the recorder wrote | How it is detected | Typical streams inside |
|---|---|---|
| MPEG-2 transport stream (most set-top boxes and DVB/ATSC tuners) | Sync bytes at 188-byte intervals | MPEG-2 or H.264 video, MP2 or AC-3 audio |
| MPEG program stream (older DVD-style recorders) | Program stream pack headers | MPEG-2 video, MP2 or AC-3 audio |
| ASF-derived recordings (Windows-era PVR software) | ASF header GUID | WMV or MPEG-2 video, WMA audio |
| A proprietary CCTV wrapper | Vendor-specific; often not decodable at all | Varies; some need the vendor's own player |
If a recording comes back with an error rather than an output, it is almost always the last row — a closed CCTV format with no public demuxer. Playing the file in VLC is the quickest test: if VLC cannot open it either, no general-purpose converter will.
How to Convert DVR to MJPEG
- Upload Your DVR Recording: Drag the
.dvrfile onto the page or click "+ Add Files". Several recordings can be queued and each is converted independently with the same settings. - Switch File Compression to Constant Quality: This is the control that matters. Open Advanced Options; File Compression starts on Quality Preset, but MJPEG is driven by a JPEG quantizer rather than a bitrate, and the preset leaves that quantizer at its default value. Selecting Constant Quality reveals a slider running 2 to 31 and opening at 5.
- Set Video Resolution or Trim: Video resolution offers Keep original, Resolution Percentage, Preset Resolutions, or an exact Width x Height — halving both dimensions cuts the per-frame data to roughly a quarter. Trim starts at "Unchanged" and can export a single Start time / Duration range.
- Convert and Download: Click Convert and save the
.mjpegfile. No sign-up, no watermark.
What the Quality Slider Really Does
The slider is labelled CRF because that label is shared across the whole video option set, but MJPEG has no CRF. The value you pick is remapped onto JPEG's own quantizer scale, where 2 is the finest quantization and 31 the coarsest, and the remapping compresses the slider's 2–31 range into a narrower band of real quantizer values. Sizes below are from a 5-second 640×480 recording whose source was 2.9 MB.
| Slider position | JPEG quantizer used | Output size (5 s, 640×480) |
|---|---|---|
| 2 (leftmost) | 3 | 3.27 MB |
| 5 (opening value) | 4 | 2.88 MB |
| 10 | 7 | 2.24 MB |
| 15 | 10 | 1.85 MB |
| 20 | 13 | 1.57 MB |
| 25 | 16 | 1.38 MB |
| 31 (rightmost) | 19 | 1.25 MB |
Two things follow. The extremes of JPEG's own quantizer scale are not reachable from the slider — you cannot get quantizer 2, and you cannot get 31 — so both the very best and the very worst JPEG settings are off the table. And because the mapping is not linear, the visible difference between slider positions is largest in the first third of the travel.
Frequently Asked Questions
The Audio Codec dropdown offers seventeen codecs — which one should I use?
None of them, because none reaches the output. A raw .mjpeg file has no structure in which to store an audio stream: it is JPEG images and nothing else. The Audio Codec group renders on this page because it is shared across every video target, and it does show MP3 preselected, but the setting has no effect here. We verified it by converting the same recording twice, once with an audio codec selected and once with audio explicitly disabled — the two outputs were byte-for-byte identical. If you need the sound from your recording, convert to a real container instead: DVR to MOV and set the Video Codec to MJPEG gives you the same intraframe JPEG frames with the audio track and correct timing.
Why does my MJPEG play at the wrong speed?
Because there is nowhere in the file to record the frame rate. A raw Motion JPEG stream has no header, no index and no timestamps, so a player or a tool like ffprobe falls back to an assumed rate — often 25 fps — no matter what the DVR recorded at. A 29.97 fps recording written to .mjpeg and read back will run slightly fast or slow depending on the reader. This is a property of the bare stream, not a setting you can change; if frame timing matters, use a container.
Is the MJPEG file bigger than my original recording?
Almost always, and often by two to three times. DVR recordings are typically MPEG-2 or H.264, both of which use interframe prediction: a static corridor with nothing moving costs almost nothing per frame. MJPEG stores the entire scene again on every frame regardless, so security footage of an empty room — the worst case for MJPEG and the best case for prediction — balloons the most. In our 5-second test the source was 2.9 MB and the default-quality MJPEG was 2.88 MB at the same resolution; push the slider left and it grows past the source immediately.
Will interlaced DVR footage be deinterlaced?
No. There is no deinterlacing filter anywhere in this pipeline, so if the recorder captured 1080i or 480i material, the comb artefacts on moving edges are baked into every JPEG frame exactly as they appear in the source. This can actually be useful when you are extracting frames for analysis — you get the fields as recorded rather than as an algorithm guessed them — but it looks wrong if you are eyeballing the frames. Deinterlace in a local tool before uploading if you need clean progressive frames.
Can I split the .mjpeg back into individual image files?
Yes, and that is one of its genuine advantages. Every frame in the file begins with the standard JPEG start-of-image marker FF D8 FF and ends with the end-of-image marker FF D9, so any tool that can scan for those boundaries can cut the stream into numbered .jpg files — ffmpeg -i clip.mjpeg frame%05d.jpg does it in one line, and so does a ten-line Python script. Nothing else about the file needs to be understood to do this, which is why MJPEG persists in inspection and archival workflows.
What software opens a raw .mjpeg file?
VLC, ffmpeg-based utilities and most professional editing and inspection software will read it. Phones, browsers, smart TVs and general-purpose media apps generally will not, because they expect a container with headers and timing rather than a bare frame sequence. If the file has to open somewhere you do not control, MJPEG in raw form is the wrong choice — put the frames in a MOV or convert to DVR to MP4 instead.
Why is MJPEG the only entry in the Video Codec dropdown?
Because a .mjpeg file is defined by its codec, not by a container that could hold several. The extension means "these bytes are Motion JPEG"; there is no header in which to declare that they are anything else, so no other codec is a legal choice for this output. That is different from a target like MOV or MKV, where the container is codec-agnostic and the dropdown genuinely offers you a choice.
Should I use Quality Preset or Constant Quality?
Constant Quality, on this target specifically. MJPEG is a quantizer-driven codec, and the Quality Preset path is built around scaling a bitrate — a concept a fixed-quantizer encoder largely ignores — so leaving the preset alone parks the quantizer at its default and the preset dropdown does not move the picture the way it does on an H.264 or VP9 target. Switching to Constant Quality exposes the slider that actually drives per-frame JPEG quality, and the table above shows what each position produces.
What happens to my recording after the conversion?
It is uploaded over an encrypted connection, converted on our servers, and both the upload and the .mjpeg output are deleted automatically after a few hours. There is no sign-up, no watermark, and files are never shared or made public. The recording on your own machine is untouched. Because MJPEG output is large, the practical constraint on a long recording is upload and download time over your connection — trimming to the section you need before converting is the single most effective thing you can do.