Initializing... drag & drop files here
Supports: PPM
A PPM is a raw Netpbm pixmap — the uncompressed RGB dump a renderer, ray tracer or computer-vision script leaves behind — and no browser will display one. WebM is the open, royalty-free web video container that essentially every browser will play. This tool wraps your pixmap into a WebM clip that holds the picture on screen for a duration you pick, so a still from a pipeline becomes something you can embed, autoplay or loop on a page. It is a still-to-video tool: the output is silent, and it does not move unless you upload more than one image.
.ppm on the page or click "Add Files". Both P6 binary and P3 ASCII pixmaps decode. With more than one file the Merge strategy control decides the shape of the result — Merge images (the starting choice) chains them into one clip, Video per image writes one WebM per file.All three write a valid .webm, but they do not behave the same way when the source is a single still.
| VP9 (selected) | VP8 | AV1 | |
|---|---|---|---|
| Encoder used | libvpx-vp9 |
libvpx |
AV1 encoder |
| Constant Quality slider | Real CRF, 16–63 | Renders, but the value never reaches the encoder | Real CRF, 16–63 |
| Quality Preset | Works | Does not reach the encoder | Works |
| Constraint Quality | Works — CRF plus a bitrate ceiling | The only mode that sets an actual bitrate | Works |
| Compression on a static frame | Excellent | Noticeably weaker | Best, at the cost of encode time |
| Browser reach | Widest of the three inside WebM | Widest overall, oldest codec | Narrowest — needs a recent browser |
| Verdict for a still | Use this | Only for very old playback targets | Use when file size matters more than speed |
VP8 deserves the warning in that table. The encoder that handles it has no CRF mode at all, so neither the Quality Preset nor the 0–63 slider that renders next to it has any path into the encode — libvpx falls back to its own internal default and logs that it is doing so. What VP8 does honour is a quantiser range (it is bounded rather than targeted) and, if you select Constraint Quality, an explicit bitrate. If a control appears to do nothing on VP8, that is why. Switching to VP9 makes every control on the page live again.
These are properties of the conversion, not settings you can change on this page.
| Behaviour | Value |
|---|---|
| Audio | None. A pixmap has no audio, so the Audio Codec control is not shown at all |
| Encode frame rate | 1 fps — a still needs no more, and it keeps the file tiny |
| B-frames | Disabled; identical frames gain nothing from them and they add a start-time offset |
| Image Duration | Starts at 5 seconds per frame; range is 1/60 s to 10 s |
| Maximum frame edge | 4096 px — larger pixmaps are downscaled to fit that box before encoding |
| Letterbox / padding fill | The Background Color, White by default for image sources |
| Bitrate and target-size modes | Hidden on this page; only the three quality modes render |
| Re-encoding | Always. There is no passthrough — the image is decoded and re-encoded every time |
Neither, from a single file. A PPM is one raster with no frames and no audio track, so the output holds that one picture for the Image Duration you chose and writes video only — the Audio Codec control is hidden on this page precisely because there is nothing to encode. Uploading several pixmaps and leaving Merge strategy on Merge images gives you a fixed-dwell slideshow, which is motion of a sort, but there is still no audio and nothing moves within a frame. Pans, zooms and crossfades need a video editor.
Because VP8's encoder has no constant-quality mode. The Quality Preset and the CRF slider both render next to VP8 in the interface, but neither value has a route into libvpx — the encoder simply falls back to its own internal default and logs a line saying so. Only Constraint Quality produces an actual bitrate instruction for VP8. This is the single strongest argument for leaving the codec on VP9, where the preset, the CRF slider and the constraint mode all work as labelled.
Lower numbers mean higher quality on the 0–63 scale that VP9 and AV1 use. A still frame is unusually easy to encode — there is no motion to predict, so almost the whole budget goes on one keyframe — which means you can afford to be generous. Values in the high teens to mid twenties keep text and hard edges crisp; the high thirties and above start to show blocking around type and thin lines, which is where a slide or diagram falls apart first. If you would rather not think about it, the Quality Preset does the same job with named steps.
Barely. At 1 fps with an unchanging picture, every frame after the first is nearly free — the encoder stores a keyframe and then a run of essentially empty inter-frames. Going from a 1-second hold to a 10-second hold adds far less than ten times the bytes. What genuinely drives size here is frame area and quality: halving the resolution removes three quarters of the pixels, and that shows up immediately. If your WebM is too big, lower the Video resolution before you touch the duration.
Very widely. Per current caniuse data, WebM playback covers around 96% of tracked browser usage, with support from Chrome 25, Firefox 28, Edge 79 and Safari 16.0 onward; Internet Explorer never supported it. The gaps you are most likely to meet are older iOS devices, embedded players inside apps, and some smart-TV browsers. If you need something that plays essentially everywhere including old hardware, output PPM to MP4 instead — H.264 in MP4 is the safer universal target.
Not as a true frame-rate sequence. Uploading frame_0001.ppm, frame_0002.ppm and so on with Merge images plays them in order, but each is held for the same fixed Image Duration and the clips are concatenated — the shortest available dwell is a single frame at 60 fps, which is the closest this page gets to a timeline. That is fine for a slideshow or a step-through of a few states. For genuinely smooth playback of a simulation or render at 24 or 30 fps, encode the numbered sequence directly with FFmpeg, which reads a %04d pattern natively.
Because your pixmap's aspect ratio does not match the frame you asked for, and the converter pads rather than stretches — distorting the picture would be worse. The fill colour comes from the Background Color control, which starts on White for image sources; switching it to Black, or to any of the 23 other swatches, changes the bars. The other fix is to stop the mismatch happening: leave Video resolution on Keep original, or type a Width x Height that matches your source's proportions.
Practically, the limit is upload size and time rather than anything about the encode. PPM stores width x height x 3 bytes with no compression — doubled to six bytes per pixel when the header's maxval is 256 or higher — so a 4000 x 3000 pixmap is roughly 36 MB before it contains anything. There is also a hard ceiling inside the conversion: any image larger than 4096 px on its long edge is downscaled to fit that box before encoding, so uploading an enormous pixmap gains you no extra detail in the WebM.
Often, yes. If all you want is a picture that a browser or a colleague can open, PPM to PNG is lossless and far smaller than the raw pixmap, and it takes one step. Convert to WebM when the destination genuinely wants video — an autoplaying background, a looping hero element, a slot in an editing timeline, or a platform that accepts video uploads but not images. And if you have several pixmaps and want a short loop that also survives email clients and older chat apps, PPM to GIF is the more compatible, if far less efficient, target.