Initializing... drag & drop files here
Supports: WMV
.wmv or .asf containers all decode. Batch upload is supported.2.100 means 2 seconds plus 100 milliseconds. Use Multiple Screenshots to extract every N seconds (1/10s up to 10s) across the whole clip, producing a numbered PPM sequence you can feed straight into OpenCV, scikit-image, or a research pipeline.WMV is a compressed delivery format (Microsoft's Windows Media Video family, introduced with WMV 7 in 1999 and standardised as SMPTE 421M / VC-1 in 2006). PPM, by contrast, is the simplest practical container for raw RGB pixels — Jef Poskanzer's late-1980s Portable Pixmap from the Netpbm suite, with a four-token ASCII header (P6, width, height, Maxval) followed by raw red/green/blue triplets in big-endian byte order. Going from WMV to PPM strips every codec quirk out of the data so downstream tools see exactly what the decoder produced.
cv::imread, MATLAB's imread, and most C/C++ teaching toolchains accept PPM natively without any image-decoding library, so a folder of P6 frames is the canonical "just give me pixels" input for assignments, papers, and reproducible builds.0.500 for an OCR pass, or every second for object-detection labelling.head -c 40 in a terminal.| Property | WMV | PPM |
|---|---|---|
| Type | Compressed video container (ASF) | Uncompressed single-image raster |
| Introduced | 1999 (WMV 7) | ~1988 (Jef Poskanzer, Netpbm) |
| Codec / encoding | WMV1 / WMV2 / WMV3 / WVC1 (VC-1, SMPTE 421M) | None — raw RGB samples |
| Compression | Lossy DCT-based, 1–10 Mbps typical for 1080p | Zero compression |
| Color model | YUV 4:2:0 (4:2:2 in some profiles) | RGB triplets |
| Bit depth | 8-bit per channel | 8-bit (Maxval 255) or 16-bit (Maxval up to 65535) |
| Alpha channel | No | No (use PAM/PNG for alpha) |
| Audio | Yes (WMA, in same container) | N/A |
| Typical file size | ~2 MB per 10 s @ 1080p H.264-equivalent | ~6 MB per single 1920×1080 8-bit frame |
| Native CV-library support | Requires FFmpeg/DirectShow decode | cv::imread, imageio.imread, stb_image, no decoder needed |
| Best for | Streaming, archival playback | Pipeline intermediates, teaching, scientific imaging |
| You want… | Pick | Setting |
|---|---|---|
| One frame at an exact moment | Specific Frame | Time (seconds), e.g. 2.100 = 2.1 s |
| A frame every second | Multiple Screenshots | Drop every 1 Second |
| A dense capture (10 fps) | Multiple Screenshots | Drop every 1/10 Second |
| Sparse keyframes for ML labelling | Multiple Screenshots | Drop every 5 Seconds or 10 Seconds |
| Title-card grab from a long lecture | Specific Frame | Time (seconds), seek to slide change |
| HDR / scientific 16-bit output | Any frame mode + 16-bit (High Precision) | Doubles file size; Maxval becomes up to 65535 |
Output is P6 (raw binary) — the standard since the late 1980s and what every library expects by default. P6 stores each pixel as 3 bytes (or 6 bytes at 16-bit depth) in R, G, B order with big-endian byte order, prefixed by an ASCII header line of P6 width height maxval\n. P3 (ASCII) is ~3× larger because each sample becomes a decimal string with whitespace; we don't emit it because almost no production tool reads it faster.
Roughly width × height × bytes_per_sample × 3 plus a tiny header. A 1920×1080 8-bit PPM is about 6.2 MB per frame; 16-bit doubles that to ~12.4 MB. A one-minute WMV sampled at 1 frame per second therefore produces ~370 MB of PPM, which is why you almost always re-compress to PNG or TIFF after the analysis step. The Netpbm format spec describes the exact layout.
It's a deliberate design choice. PPM (and the rest of Netpbm — PBM for 1-bit, PGM for grayscale, PAM for arbitrary tuples) was created in 1988 for cross-platform image interchange — a format any C program can read or write in a dozen lines, with no library dependency. Compression would defeat that goal. If you need lossless compression of the same RGB data, convert the PPM to PNG afterwards.
You can, but it's expensive. A 30 fps WMV produces 30 PPMs per second; one minute at 1920×1080 is ~11 GB of 8-bit PPM. For exhaustive extraction it's usually wiser to convert WMV to a lossless image sequence in a compressed format first (WMV to PNG or WMV to JPG) and only re-render the specific frames you need to PPM for the analysis step. Our Multiple Screenshots mode tops out at one frame per 1/10 second, which is enough for most CV work.
Yes. WMV7, WMV8, WMV9, and the VC-1 Advanced Profile (WVC1) bitstreams all decode. WMV 9 was standardised by SMPTE as VC-1 (SMPTE 421M) in 2006 and used on HD DVD and Blu-ray, so a lot of older "WMV" downloads are technically VC-1 streams inside an ASF container — both work identically here.
WMV stores frames as YUV 4:2:0 (or 4:2:2) and applies a gamma curve at display time. Converting to PPM does a YUV-to-RGB matrix conversion (BT.601 for SD source, BT.709 for HD) and writes linear-encoded RGB samples. Tools that assume the file is sRGB will display it slightly differently from a colour-managed player. If exact colorimetry matters, set Bit Depth to 16-bit so quantisation rounding doesn't compound the difference.
Decimal seconds. 0 is the very first frame, 2.100 is 2.1 s (i.e. 2 seconds plus 100 ms), 90.5 is one and a half minutes plus 500 ms. There's no HH:MM:SS parsing — if your timestamp is in clock format, convert it to seconds first (1:30.5 → 90.5). The seek lands on the nearest decoded frame to the requested timestamp, which for VC-1 / WMV9 is typically within 1/30 s.
ffmpeg -i in.wmv -r 1 frame_%04d.ppm?Functionally no — both rely on FFmpeg-family decoders and emit valid P6 PPM. The xconvert tool runs the same decode pipeline on our servers and gives you the same output without a local ffmpeg install. If you already have FFmpeg working and need >10 fps extraction, the CLI is more flexible; for one-off extractions or larger batches without setup, this is faster. For shorter sub-clips before extraction, trim WMV in the video cutter first.
Yes — use the video cutter to trim first, then re-upload the shorter WMV here and run Multiple Screenshots. Doing it in two passes avoids producing thousands of frames you'll just delete.