Initializing... drag & drop files here
Supports: PPM
frame0001.ppm through frame9999.ppm) and they will be encoded in filename order.1/24s, 1/30s, and 1/60s give true 24/30/60 fps playback for simulation or animation frames..mpeg program-stream video — no sign-up, no watermark, no installed toolchain.PPM (Portable Pixmap) is the colour member of the Netpbm family — a deliberately simple, uncompressed raster format created by Jef Poskanzer in 1988 and maintained as part of Netpbm since 1993. A P6 PPM file is just a magic number, width, height, max sample value, then raw RGB bytes — trivial to write from any program, which is exactly why it shows up as the output of so many image-processing pipelines and simulations. The downside is size: a 1920×1080 PPM frame is roughly 6.2 MB, so a one-minute 30 fps sequence is ~11 GB on disk before you do anything with it. Encoding to MPEG turns that pile of frames into a single video file an ordinary player can open.
imwrite("frame.ppm", img)), ROS image_pipeline, and many academic CV projects log PPM frames during runs. Stitching them into MPEG produces a debug video you can scrub.--output-ppm-stream writes a raw PPM stream that's almost always piped into a video encoder; the dev.to Gource pipeline walkthrough is a representative example.ppmtompeg toolchain — Netpbm's ppmtompeg originated in 1995 and only emits MPEG-1 video CDs; it's still in Debian and Homebrew but is fiddly to drive. This page covers the same workflow without installing Netpbm..mpg/.mpeg, this is the format it expects.| Property | PPM (Netpbm P6) | MPEG (program stream) |
|---|---|---|
| Type | Single uncompressed raster image | Multiplexed audio + video container |
| Spec | Netpbm ppm(5), magic P6 (binary) or P3 (ASCII) |
ISO/IEC 11172-1 (MPEG-1 PS) and ISO/IEC 13818-1 (MPEG-2 PS / H.222.0) |
| Compression | None — width × height × 3 bytes per pixel (8-bit), ×6 for 16-bit | Lossy, inter-frame (I/P/B), typically 50-200× smaller than raw frames |
| File extension | .ppm |
.mpg, .mpeg, .m2p, .ps |
| Carries audio | No | Yes — typically MP2 (MPEG-1 Layer II) for MPEG-1/2 PS |
| Frames per file | 1 | Many (a full video) |
| Typical use today | Pipeline intermediate; scientific frame dumps | DVD-Video, broadcast capture, legacy archives, set-top playback |
| Year created | 1988 (Pbmplus); Netpbm fork 1993 | MPEG-1: 1993; MPEG-2: 1995 |
| Mode | What it controls | Best for |
|---|---|---|
| Quality Preset | Encoder picks bitrate from Highest → Lowest | Quickest path; "Very High" is the default |
| Target File Size % | Output ≈ N% of input frame total bytes | Hitting a rough size budget |
| Specific File Size (MB) | Encoder targets an exact MB output | Email caps, upload limits, fixed media |
| Constant Bitrate (CBR) | Fixed Mbps end-to-end | Streaming, broadcast, DVD authoring |
| Variable Bitrate (VBR) | Bitrate flexes with scene complexity | Best size/quality balance for archive |
| Constant Quality (CRF) | Fixed perceptual quality, size varies | Mixed-content sequences, simulations |
By default the encoder produces an MPEG-2 program stream with MP2 audio — this is the DVD-Video coding standard (ISO/IEC 13818). Older .mpg decoders that only handle MPEG-1 (ISO/IEC 11172, the Video CD standard) may need a different target; in that case use the PPM to MPG or PPM to MPEG-2 variants, or pick H.264 from the Video Codec dropdown for modern players.
Trim is a video-input control — it cuts existing video frames. PPM is a still-image input, so there is no timeline to trim. To control video length, change Image Duration and the number of uploaded frames. Total output length = number of PPMs × Image Duration. 720 frames at 1/24s = 30 seconds; 1,800 frames at 1/30s = 60 seconds.
Yes — that's the canonical use case. Number your PPM files in upload order (step0001.ppm, step0002.ppm, …), upload them all, set Merge Strategy to "Merge images", and pick Image Duration of 1/24s, 1/30s, or 1/60s for true 24/30/60 fps playback. Use Constant Quality (CRF) so quiet timesteps don't waste bitrate.
Anything that wants a "just write the pixels" output path: Netpbm's own pnmtopnm/anytopnm chain, ImageMagick (convert image.png image.ppm), POV-Ray, Gource (--output-ppm-stream), OpenCV's imwrite, MATLAB's imwrite(...,'ppm'), plus a long tail of academic graphics, CFD, and CV projects. Many course assignments require students to write a PPM by hand because the format is short enough to fit in one page of code.
Yes. Files process on our servers; the practical limits are your machine's RAM and upload time, not a server quota. For very long sequences (tens of thousands of frames) it's faster to first compress each PPM with a pnmtopng or similar step locally, then upload the PNGs through PNG to MPEG — or compress the input with Compress PPM before encoding. The output bitrate, not the input format, controls the final video size.
Yes — frames are encoded in filename sort order, so use zero-padded names (frame0001.ppm, not frame1.ppm). If you upload frame1.ppm, frame2.ppm, …, frame10.ppm, they will be sorted as 1, 10, 2, 3, … because that's how lexicographic sorting treats unpadded numbers — the same gotcha that bites ffmpeg -pattern_type glob and ppmtompeg.
MPEG-2 with MP2 audio is the native pairing for the MPEG program stream container — it's what DVD-Video players and most legacy .mpeg decoders expect. If your target is YouTube, modern phones, or web playback, change Video Codec to H.264 (or convert directly with PPM to MP4). The container will still be a .mpeg program stream; only the video codec inside changes.
The PPM-to-MPEG path is image-sequence-to-video and doesn't take an audio input. The output is encoded with a silent MP2 track so the file is a valid program stream. To add music or narration, encode here first, then run a second pass through a video editor or ffmpeg -i video.mpeg -i track.mp3 -c:v copy -c:a mp2 out.mpeg.
ppmtompeg locally?Netpbm's ppmtompeg (originated 1995) is the classic Unix tool for exactly this conversion, but it only emits MPEG-1 video and requires installing Netpbm plus writing a parameter file by hand. This page produces MPEG-2 by default, supports H.264/MPEG-4 inside the program stream, gives you a UI for bitrate/CRF/preset control, and runs without a local toolchain. For one-off conversions it's faster; for batch pipelines ffmpeg or ppmtompeg is still the right answer.