Video Codecs Explained
Sep 12, 2026 • 10 min read
A codec (coder-decoder) is the algorithm that compresses raw video into a file and decompresses it for playback. Your browser must support the codec to extract frames — no codec support = no extraction.
🎯 TL;DR — Codec Support in Our Tool
| Codec | Browser Support | Container | Action |
|---|---|---|---|
| H.264 / AVC | ✅ Universal | MP4, MOV | Works everywhere — recommended |
| HEVC / H.265 | ⚠️ Varies | MP4, MOV | Safari ✅, Chrome/Edge need HW, Firefox ❌ |
| VP8 | ✅ Universal | WebM | Works everywhere (legacy WebM) |
| VP9 | ✅ Modern | WebM | Chrome/Firefox/Edge/Safari 14+ ✅ |
| AV1 | ⚠️ Modern | WebM, MP4 | Chrome/Firefox/Edge ✅, Safari 16+ ⚠️ |
| ProRes 422/4444 | ❌ None | MOV | Transcode to H.264 first |
| DNxHD/DNxHR | ❌ None | MOV | Transcode to H.264 first |
Codec Deep Dives
H.264 / AVC — The Universal Standard
Status: ✅ Works everywhere — Chrome, Firefox, Safari, Edge, iOS, Android, Smart TVs.
- Mature, hardware-accelerated on every device since ~2010.
- 8-bit 4:2:0 (standard), 10-bit 4:2:2 (Hi10P) — browser support for 10-bit varies.
- Baseline/Main/High profiles — High profile is standard for HD.
- Best practice: Encode at CRF 18–20, preset medium/fast for extraction source.
HEVC / H.265 — The Efficiency Upgrade
Status: ⚠️ Hardware-dependent. ~50% better compression than H.264.
| Platform | HEVC Support | Notes |
|---|---|---|
| Safari (macOS/iOS) | ✅ Native | Full hardware decode since 2017 |
| Chrome (Windows) | ⚠️ With HW | Needs Intel 7th gen+ / AMD RDNA / Nvidia Pascal+ |
| Chrome (Mac) | ✅ Via VideoToolbox | Apple Silicon / T2 / AMD dGPU |
| Firefox | ❌ No | Licensing refusal — no HEVC support |
| Edge (Windows) | ⚠️ With HW | Same as Chrome — needs HEVC extensions |
Our tool: Falls back to software decode if hardware missing — slower, may fail on high-res. Transcode to H.264 for guaranteed extraction.
VP9 — Google's Web Codec
Status: ✅ Excellent modern support. Royalty-free, used by YouTube, Netflix.
- Native in Chrome, Firefox, Edge, Safari 14+.
- Supports alpha channel (VP9 with alpha) — perfect for transparent WebM.
- Hardware decode on most devices 2016+.
- Best for: WebM screen recordings, web delivery, transparency.
AV1 — The Next Generation
Status: ⚠️ Cutting edge. ~30% better than HEVC, royalty-free.
- Chrome 70+, Firefox 67+, Edge 79+, Safari 16.4+ (partial).
- Hardware decode: Intel 11th gen+, AMD RDNA2+, Apple M1+, Nvidia RTX 30-series+.
- Supports alpha, HDR, 10/12-bit.
- Note: Safari support still evolving — test before relying on it.
ProRes / DNxHD — Professional Intermediates
Status: ❌ Zero browser support. These are editing codecs, not delivery codecs.
- ProRes 422/422 HQ/4444/4444 XQ — 10-bit, 4:2:2 or 4:4:4, alpha in 4444.
- DNxHD/DNxHR — Avid equivalent, similar profile structure.
- File sizes: 100–500 Mbps (vs 5–20 Mbps for H.264).
- Must transcode before extraction.
Transcoding for Extraction — Quick Commands
FFmpeg — Universal Transcoder
# ProRes MOV → H.264 MP4 (high quality, fast) ffmpeg -i input.mov -c:v libx264 -crf 18 -preset fast -pix_fmt yuv420p output.mp4 # ProRes 4444 (with alpha) → WebM VP9 with alpha ffmpeg -i input.mov -c:v libvpx-vp9 -auto-alt-ref 0 -pix_fmt yuva420p -b:v 0 output.webm # DNxHR → H.264 MP4 ffmpeg -i input.mov -c:v libx264 -crf 18 -preset fast output.mp4 # HEVC → H.264 (if browser can't decode) ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset fast output.mp4 # Any → H.264 MP4 (safe universal) ffmpeg -i input.* -c:v libx264 -crf 18 -preset fast -pix_fmt yuv420p -movflags +faststart output.mp4HandBrake — GUI Alternative
- Open HandBrake → Load source file
- Preset: "Fast 1080p30" or "HQ 1080p30"
- Video tab: H.264 (x264), RF 18–20, Fast or Medium preset
- Dimensions: Keep source resolution (or downscale if 4K+)
- Start Encode → Save as .mp4
Shutter Encoder — Pro Alternative
Free, powerful, supports ProRes/DNxHR input → H.264/HEVC/VP9/AV1 output. Good batch queue.
Common Extraction Errors & Fixes
❌ "Worker/Decoder Failed to Start"
Cause: Codec not supported by browser WebCodecs (ProRes, DNxHR, HEVC without HW).
Fix: Transcode to H.264 MP4 using FFmpeg/HandBrake above.
❌ "SEEK_TIMEOUT: Video seeking timed out"
Cause: Corrupted file, non-standard container, or codec browser can't seek in.
Fix: Remux with FFmpeg: ffmpeg -i input.mov -c copy output.mp4 (no re-encode, fixes container).
❌ "ZIP_FAILED: Could not create ZIP archive"
Cause: Too many frames / too large → browser OOM.
Fix: Lower FPS, use WebP/JPG, chunk video, close other tabs.
❌ "CODEC_UNSUPPORTED"
Cause: Browser can't decode the codec at all (ProRes, DNxHR, obscure codecs).
Fix: Transcode to H.264. That's it — H.264 always works.
❌ Black frames / green frames / corrupted output
Cause: Variable frame rate (VFR) confusing seek, or hardware decoder bug.
Fix: Force CFR in transcode: ffmpeg -i input -vsync cfr -c:v libx264 ...
How to Check Your Video's Codec
FFprobe (CLI)
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_long_name,profile,pix_fmt,width,height,r_frame_rate -of csv=p=0 input.mp4MediaInfo (GUI)
Free, cross-platform. Drag file → shows codec, profile, bitrate, frame rate, color space.
Browser DevTools
- Open video in new tab (or our tool)
- Right-click video → "Show video info" (Chrome) / "Video stats for nerds" (YouTube)
- Shows codec, resolution, frame rate, bitrate