Your .mpg still plays. Here.
safe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQsafe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQ
An .mpg is the oldest video file most people still have: a
camcorder tape someone digitised, a DVD ripped before streaming, a video CD, a
CCTV export. It is an MPEG‑1 or MPEG‑2 program stream,
and the awkward fact about it is that no browser will play it. Chrome,
Safari and Firefox all decode H.264 and VP8 and AV1; not one of them has ever
shipped an MPEG‑1 decoder for <video>. Double-click your
file and you get a black rectangle.
So OmniViewer decodes it for you, in the tab. Drop the file, open PREVIEW, drag to a moment and press play: the toolkit cuts a few seconds out of the stream, decodes them into H.264 with a real FFmpeg build compiled to WebAssembly, and hands the browser something it understands. Nothing is uploaded. There is no server anywhere in that sentence.
The CONVERT tab is the one most people come for, and it offers
the seven things an .mpg is usually wanted as:
MP4 (H.264 + AAC — the universal answer),
MOV for Final Cut and iMovie, WebM for a web page
with no H.264 licence in the picture, an animated GIF built from a
palette measured off your own footage, MP3 or WAV
when it is the sound you were after, and a full-resolution PNG frame
from the exact moment on the scrubber. Set the start, the length and the width,
pick a quality, and press convert.
Every other "MPG to MP4" site uploads your file to a machine you have never seen,
converts it there, and gives you a link that expires. Since the files still in
.mpg in 2026 are overwhelmingly home video — weddings,
children, funerals, a grandparent talking — that is a strange thing to be
asked to do. Here the bytes never leave the page: no upload, no queue, no
watermark, no account, and no 100 MB cap.
An MP4 has a moov box. A ZIP has a central directory. A program
stream has nothing — it is a flat run of roughly 2 KB
packs, each opening with the four bytes
00 00 01 BA, and the only way to know what is at minute forty is to
have walked there. That is why so many tools either load the whole file into
memory or refuse it outright.
OmniViewer does neither. Every pack header carries a clock (the system clock reference), so seeking is arithmetic: interpolate a byte offset from the clock, read a quarter-megabyte there, measure how far off the guess was, and re-aim — four probes at most. The cut is then backed up to the pack carrying the next sequence header, because a program stream cut on a pack boundary is itself a program stream. That is the whole trick: previewing or converting thirty seconds out of a twenty-gigabyte capture reads about as much as converting thirty seconds out of a twenty-megabyte one. Read how an MPEG file is walked without an index.
PACKS shows the structure the way an engineer reads it: pack headers with their clock and mux rate, PES packets by stream id, group-of-pictures boundaries with their timecodes, and the twelve-byte sequence header decoded field by field — picture size, frame-rate code, the sample aspect ratio that everyone misreads as a display aspect ratio, the declared bitrate and the VBV buffer. STATS measures rather than reads: how many bytes each elementary stream actually takes, the I/P/B frame histogram that shows what compression strategy the encoder chose, and a duration that says where it came from — the pack clock, the timestamps, the frame count or, honestly labelled, a division by the bitrate.
They are the same family. .mpg and .mpeg are the program
stream; .m1v and .m2v are the bare video elementary
stream with no packs and no audio; .vob is a DVD Video Object, a
program stream carrying AC‑3, DTS or LPCM audio and subpictures in its
private streams, all of which the toolkit names. OmniViewer identifies the format
from the start codes, never the extension, so a renamed file is recognised for
what it is. Powered by the same engine as
fastjsonviewer.com and
hugecsv.com; OmniViewer opens
every file format.
No. OmniViewer is a static page with no server-side processing. Your .mpg is read directly by your browser, and the decoding and converting run inside the tab in WebAssembly. Nothing is transmitted, nothing is stored and there is no account.
Because no browser ships an MPEG-1 or MPEG-2 video decoder for the <video> element. They decode H.264, VP8, VP9 and AV1 instead. The format is thirty years old and its patents expired, but the decoder was never added, so an .mpg in a browser is a black rectangle. OmniViewer works around it by decoding a few seconds of the stream into H.264 locally and playing that.
A flat run of packs. Each pack starts with the four bytes 00 00 01 BA, carries a clock value called the system clock reference, and is followed by PES packets holding the coded video and audio. There is no index anywhere in the file — no moov box, no seek table, no directory. The container is the sequence of packs and nothing else.
Yes, and to MOV, WebM, animated GIF, MP3, WAV or a single PNG frame. Open the CONVERT tab, set the start and length, choose a width and a quality, and press the button on the format you want. The encode runs in your browser on a real FFmpeg build compiled to WebAssembly, so there is no upload, no queue and no watermark.
There is no cap on opening one. The parse reads a bounded two-megabyte prefix whatever the file size, and the raw and hex views read only the bytes on screen. Converting is bounded differently: the encoder is handed a pack-aligned window around the clip you asked for, typically a few megabytes, so converting a clip out of a twenty-gigabyte capture costs about what converting one out of a small file costs.
Through the pack clock. Every pack header carries a system clock reference, so a byte offset for a given moment can be interpolated, probed with one small read, corrected from the clock value actually found there, and re-aimed — four probes at most. The cut is then moved back to the pack that carries the next sequence header, so the window decodes cleanly from its first frame.
Somewhat, and the tab says so on every card. MPEG-1 and MPEG-2 are already lossy, so re-encoding to H.264 or VP8 is a second lossy pass. At the High quality setting the difference is not visible at normal viewing distance. WAV is the exception — it is uncompressed, so extracting audio to WAV adds no further loss at all.
A .mpg or .mpeg is a program stream: video and audio multiplexed together in packs. A .m1v or .m2v is a bare video elementary stream — coded frames with no packs, no PES packets and no audio at all. A .vob is a DVD Video Object, which is a program stream that also carries AC-3, DTS or LPCM audio and subtitle subpictures in its private streams. All of them open here.
It shows the compression strategy. I-frames are complete pictures and stand alone, P-frames reference what came before, and B-frames reference both directions. A stream that is mostly B-frames is compressing hard; one that is mostly I-frames is either very short on GOP length or was made for editing. It also explains seeking: a decoder can only start at an I-frame, which is why scrubbing lands where it does.
Not yet. A transport stream carries the same video and audio but frames it in fixed 188-byte packets addressed by PID, with tables mapping the programs — a different walk rather than a bigger one. It is listed as planned on the feature map.