Free Video Compressor
Reduce video file size with quality presets or custom settings.
Drag & drop a video file here
or click to browse · MP4, WebM, MOV, AVI, MKV (max 2 GB)
What video compression actually does to your file
Raw video is a torrent of pixel data. A 1080p (1920x1080) 60fps clip is roughly 1920 x 1080 x 3 bytes per pixel x 60 frames per second, around 370 MB per second of uncompressed footage. Even 720p 30fps uncompressed is about 80 MB/s. Compression makes video shareable by exploiting two redundancies: spatial redundancy within a frame (neighboring pixels are often similar) and temporal redundancy across frames (most pixels barely change frame to frame). Modern codecs encode key frames (full pictures) every few seconds and only the differences in between. Those differences are then DCT-transformed, quantized (the lossy step that throws away high-frequency detail your eye notices less), and entropy-coded. The CRF (Constant Rate Factor) value you pick controls how aggressively the quantization step discards information. CRF 18 is visually lossless; CRF 23 is the x264 default (transparent for most viewers); CRF 28 is acceptable web quality; above CRF 30 you start to see blocking in dark scenes and mosquito noise around text.
Resolution, framerate, and bitrate are three independent dials. Halving resolution from 1080p to 720p cuts raw data by 4x (each axis halved). Halving framerate from 60fps to 30fps cuts data by 2x. Both reductions are visually obvious on detailed content but often invisible on talking-head footage, screen recordings of mostly static UI, or social-media clips watched on a phone-sized screen. Bitrate is the third dial: a 1080p 30fps clip at 5 Mbps looks great; the same clip at 1 Mbps shows blocky artifacts. The tool's quality presets pick CRF values that target typical web-acceptable bitrates: High preset is roughly CRF 23 (around 5 Mbps for 1080p), Medium is around CRF 28 (around 2 Mbps), Low is around CRF 33 (around 800 kbps), and Custom lets you drag the slider yourself.
Audio matters too. A 10-minute video with PCM (uncompressed) audio carries 100 MB of audio alone. The tool re-encodes audio to AAC at 128 kbps by default, dropping to around 10 MB for the same 10 minutes with no audible loss for most content. The container (the MP4 wrapper around video and audio tracks) is mostly bookkeeping: track indexing, seek tables, codec headers. MP4 with H.264 video plus AAC audio is the universal lingua franca of 2026: it plays on every browser, phone, smart TV, console, and embedded player you'll encounter. WebM with VP9 plus Opus compresses about 30% better but is still rejected by some legacy ecosystems.
How this tool works under the hood
The compression engine is FFmpeg, the same C-based tool that powers Netflix's encoding farm, YouTube's transcoding pipeline, and almost every video tool you've ever used. The browser version is FFmpeg compiled to WebAssembly via Emscripten (started by Jerome Wu in 2019, currently at version 4.x), producing a roughly 30 MB binary that runs entirely in the browser tab. When you drop a video, the file is read into the WebAssembly virtual filesystem via a streaming reader so even 1 GB files don't blow up browser memory at upload time.
Once the file is in the WASM filesystem, the tool spawns FFmpeg with arguments like -i input.mp4 -c:v libx264 -preset medium -crf 28 -c:a aac -b:a 128k output.mp4. FFmpeg decodes the source frame by frame, applies any resize or framerate change you requested, hands frames to libx264 for video encoding, encodes audio in parallel via AAC, and muxes the result into a new MP4 container. Progress messages stream from FFmpeg's stderr through a JavaScript event listener and update the on-screen progress bar in real time.
ffmpeg.wasm uses SharedArrayBuffer for multi-threaded encoding so the encoder can use multiple CPU cores in parallel, just like desktop FFmpeg. SharedArrayBuffer requires the page to be served with two HTTP headers (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp) for security reasons stemming from the Spectre vulnerability. This site sets those headers, so encoding uses all your available cores. The download blob is built in memory and handed to the browser as a synthesized <a download> link.
Brief history of video compression
- MPEG-1, 1993. First widespread digital video standard. Used in Video CD (the format that briefly competed with VHS in 1990s Asia). Target bitrate 1.5 Mbps for 352x240 video. Quality was marginal by modern standards, but it proved digital video at consumer bitrates was possible.
- MPEG-2, 1995. Used in DVD (1996 launch), digital broadcast TV (ATSC in North America, DVB in Europe), and standard-def satellite. 4 to 8 Mbps for SD video. Patent licensing was complex from the start, foreshadowing later codec wars.
- H.264/AVC ratified, 2003. Joint effort of ITU-T and ISO/IEC, this codec doubled the efficiency of MPEG-2 and became dominant within five years. Blu-ray Disc (2006), iPhone (2007), YouTube transition (2007 to 2010), and HTTP streaming (HLS in 2009, MPEG-DASH in 2011) all built on H.264. As of 2026 it's still the most-compatible codec on Earth: every browser, every phone, every smart TV plays it.
- H.265/HEVC, 2013. Another roughly 50% efficiency gain over H.264 in exchange for 5 to 10x more encoding compute. Adoption was crippled by patent licensing chaos: three competing patent pools (MPEG-LA, HEVC Advance, Velos) with overlapping claims discouraged hardware and software vendors. Apple committed in 2017 (iPhone 7 plus HEIC/HEVC), but YouTube, browsers, and the open web mostly skipped H.265 in favor of VP9 and AV1.
- VP9 and AV1, 2013 and 2018. Google open-sourced VP9 in 2013, then partnered with Mozilla, Cisco, Microsoft, Netflix, Amazon, Intel and others in the Alliance for Open Media to design AV1 (ratified 2018). Both are royalty-free. AV1 matches or beats H.265 in compression while being free to use. YouTube serves AV1 to capable clients, Netflix uses it for premium tiers, and hardware decoders shipped in flagship chips starting 2020.
- ffmpeg.wasm, 2019 to 2026. Jerome Wu published the first ffmpeg.wasm in 2019 by compiling FFmpeg to WebAssembly via Emscripten. Early versions were around 50 MB and slow. The 4.x line stabilized at roughly 30 MB with SharedArrayBuffer multi-threading, making browser-side compression practical for files up to 1 to 2 GB. As of 2026 the approach is mature enough that tools like this one can replace cloud-based services for most personal compression needs.
How It Works
- Upload your video: Select or drop a video file you need to compress.
- Set compression settings: Choose a target quality level or file size, and optionally reduce the resolution or frame rate.
- Compress and download: Click Compress and download the smaller video file when processing completes.
Why Use Video Compressor?
Large video files are slow to upload, expensive to store, and cause poor playback on mobile connections. Social media platforms, email attachments, and website hosting all impose size limits. Video compression reduces file size by adjusting bitrate, resolution, and codec efficiency, often achieving 60-80% size reduction with minimal visible quality loss. This browser-based compressor handles the technical details so you just set your desired quality and download the result.
Features
- Quality presets: Choose from High, Medium, Low, and Custom quality settings with estimated output sizes.
- Resolution downscaling: Optionally reduce to 1080p, 720p, 480p, or 360p to further reduce file size.
- Frame rate reduction: Lower the frame rate from 60fps to 30fps or 24fps to reduce data.
- File size comparison: Shows original and compressed file sizes with the compression ratio achieved.
- Local processing: Compression runs entirely in your browser, no cloud upload required.
Real-world compression workflows
- Get under Discord's 25 MB limit. The most common reason to compress video. A 2-minute screen recording or phone clip is often 60 to 200 MB. CRF 28 plus an optional 720p downscale typically gets a 2-minute 1080p clip into 8 to 15 MB. CRF 30 to 32 with 480p downscale handles even high-motion content. The tool's Medium preset is calibrated for this exact use case.
- Email attachment size limits. Gmail and most corporate mail servers cap attachments around 20 to 25 MB. For sharing a quick walkthrough or how-to video to a non-technical colleague, dropping a 90 MB phone video to 15 MB MP4 with Medium quality preset is the path of least resistance.
- Web hosting cost and load time. A self-hosted video on a portfolio site or product page is much cheaper to serve at 5 MB than 50 MB (CDN bandwidth, mobile load times, Core Web Vitals). For background hero videos that loop silently, CRF 30 to 32 plus muted audio and a 720p downscale gives broadcast-quality look at portable file size.
- Personal archives. Old phone videos eat phone and cloud storage. Re-encoding a year of family videos at CRF 23 (visually lossless for most content) often cuts the archive by 50 to 70% with no perceived quality change. iCloud at the 50 GB tier suddenly becomes much more usable.
- Social media uploads. Instagram, TikTok, and X all re-encode whatever you upload, but starting with a compressed source under their suggested bitrates (typically 5 to 10 Mbps for 1080p) means faster uploads and avoids their algorithm trashing your video with their own aggressive re-encoding. The High preset keeps quality maximal while still cutting file size.
- Mobile data savings on cellular. Sending a video over cellular: 50 MB takes 20 to 40 seconds on 4G, eats meaningful data, and can fail on bad signal. Compressing to 5 to 8 MB sends in 2 to 3 seconds reliably, even on bad signal. Worth doing before texting clips to friends on metered plans.
Common pitfalls and what they mean
- Generation loss from re-compressing. Each compression pass adds quantization noise. Compressing an already-compressed video (a TikTok download, a screen recording app's already-encoded output, a phone export) gives smaller incremental compression for visible quality loss. Always start from the highest-quality source you have.
- Pushing CRF too high. Settings above CRF 30 produce visible compression artifacts: blocking in dark scenes, mosquito noise around text and sharp edges, banding in gradient skies. For preview clips at small screen sizes you can get away with CRF 32 to 35; for anything viewed full-screen on a TV or monitor, keep CRF at 28 or lower.
- Forgetting audio bitrate. A 10-minute video with uncompressed PCM audio carries 100 MB of audio alone. Many phone exports include uncompressed or lightly-compressed audio. Re-encoding to AAC 128 kbps drops audio to around 10 MB with no audible difference for speech and most music. The tool always re-encodes audio.
- Variable framerate sources. Screen recordings and some phone cameras output variable framerate (fps varies as motion changes). Some encoders handle this badly, producing duplicated frames or stutter. The tool normalizes to constant framerate to avoid this.
- HDR-to-SDR pipeline. Phone cameras now record 10-bit HDR (Dolby Vision on iPhone, HDR10 on Android). Dropping an HDR clip into an 8-bit SDR pipeline without proper tone-mapping produces washed-out or weirdly saturated output. For best results on HDR sources, tone-map on the device before compression, or accept that the SDR output will look different from the original.
- Browser memory wall at very large files. ffmpeg.wasm runs in browser memory. Files over roughly 2 GB often hit the browser's per-tab memory ceiling (typically 4 GB on desktop, less on mobile) and fail mid-encode. For larger files, use desktop HandBrake or FFmpeg CLI which can stream from disk.
Privacy: your video never leaves your device
Every cloud video compression service (FreeConvert, Clipchamp, OnlineConverter, CompressVideo.io, dozens more) follows the same pipeline: you upload your full video, their server runs FFmpeg or a similar tool, you download the smaller result. For a 200 MB phone video that's 200 MB up plus 50 MB down through their infrastructure. The video contents often include sensitive material: faces and locations of family or coworkers, audio of conversations and calls, screen recordings of private interfaces or work meetings, GPS-tagged scenes that reveal homes or workplaces. Most operators publish privacy policies committing to delete uploads within 1 to 24 hours and encrypt in transit, and major ones hold ISO/IEC 27001 certifications. They have strong business reasons to honor those policies. But "deleted within an hour" is not "never seen." During that window the file sits on operator infrastructure, accessible to any process or person with the right permissions, visible in logs and backups per the operator's retention policy.
This tool never uploads anything. The full pipeline (file selection, decoding via browser-native readers, encoding via ffmpeg.wasm WebAssembly, download via the browser's blob API) runs inside your browser tab. No uploads, no network requests carrying video data, no log entries. You can verify by opening browser dev tools on the Network tab before compressing: no requests leave with video content. The only network traffic is the initial page load itself plus the one-time roughly 30 MB ffmpeg.wasm download (cached for subsequent visits). Put the browser in airplane mode after page load and the compressor still works on local files.
When another tool is the right pick
- Files over 2 GB. Browser memory limits become a real wall above roughly 2 GB. Use desktop HandBrake (free, GUI, cross-platform) or FFmpeg CLI which can stream from disk and use all available system RAM. HandBrake's quality presets map directly to the same CRF values this tool uses, so your settings transfer.
- Batch compression of hundreds of files. For systematic re-encoding of a folder of files, the FFmpeg command-line tool with a shell loop or a Python script using subprocess is dramatically faster. One-liner:
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k "out_$f"; done. Can also use GPU encoders (NVENC, QuickSync) for 10 to 20x speedup. - Professional post-production workflow. Adobe Premiere, DaVinci Resolve, Final Cut Pro, and Avid Media Composer all include encoding alongside editing. If you're already editing the video, encoding on the way out is part of the workflow. Resolve's free tier handles up to 4K with all the same codecs.
- Need maximum speed via hardware encoders. GPU-accelerated encoders (NVENC on Nvidia, QuickSync on Intel, VCN on AMD, VideoToolbox on Apple Silicon) are 10 to 20x faster than CPU encoders at slightly lower quality per bit. Browser tools cannot access hardware encoders; for jobs where speed matters more than perfect quality, use desktop apps with hardware acceleration enabled.
Frequently Asked Questions
How much can video be compressed?
Typical compression ratios are 50-80% size reduction. A 100 MB video can often be compressed to 20-40 MB with minimal visible quality loss. The exact reduction depends on the original codec, content complexity, and your quality settings.
Will compression affect video quality?
At Medium quality settings, most viewers cannot distinguish compressed video from the original at normal viewing distances. High bitrate footage (from cameras or screen recordings) compresses well. Already-compressed video (from social media downloads) sees less gain.
What is the best format for compressed video?
MP4 with H.264 is the most compatible format for compressed video across all devices and platforms. For web use, WebM with VP9 offers better compression but lower compatibility on some devices.
Other frequently asked questions
Why does compression take longer than the video runtime?
Software video encoding is computationally expensive. A 5-minute 1080p clip might take 3 to 15 minutes to encode at high quality, depending on your CPU. The -preset flag in FFmpeg trades encoding speed for compression efficiency: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow. The tool uses medium by default (good balance). Hardware encoders in desktop apps can be 10 to 20x faster but produce slightly larger files at the same quality.
Should I pick H.264, H.265, or VP9?
For maximum compatibility (sharing to anyone on anything), pick H.264. For roughly 30% better compression with broad-but-not-universal support, pick H.265 (good on Apple devices and recent Windows) or VP9 (good on Android and Chrome). For the smallest file at modern compatibility, pick AV1. The tool defaults to H.264 because it plays everywhere.
Does compression affect frame timing or sync?
The tool preserves the source framerate and audio-video sync. If your source has variable framerate, the encoder normalizes to constant framerate during encoding, which can introduce tiny timing shifts (microseconds) but is invisible to playback. If you're noticing sync drift after compression, the source likely had drift already and the encoder is locking it in.
Can I compress without re-encoding (stream copy)?
Not with this tool. Stream copy (-c copy in FFmpeg) only changes the container (MP4 to MKV, for instance) without re-encoding. To actually reduce file size, the encoder has to re-encode pixel data at lower bitrate or with a different codec. If you only want to change container format without changing size, use a video format converter instead of a compressor.
Why does my compressed file sometimes look worse than the preset suggests?
High-motion content (sports, action, rapid scene changes) compresses much harder than static content. A 5 Mbps bitrate that looks great on a talking-head video might show artifacts on a soccer match at the same bitrate. CRF mode (which the tool uses) adapts: it allocates more bits to complex scenes and fewer to simple ones, so the output is consistent quality but variable file size. If file size matters more than consistent quality, switch to a target bitrate workflow in a desktop tool.
Is there a desktop or command-line equivalent?
Yes, several. HandBrake is the standard cross-platform GUI (free, open source, uses the same FFmpeg underneath). FFmpeg CLI is the canonical command-line tool. Shutter Encoder is a friendlier FFmpeg GUI. For mobile, VLC and CapCut have basic compression. For batch automation, FFmpeg in a shell script is unmatched. All produce essentially identical output to this browser tool because they share the same underlying encoder.