DEV Community

videocompress
videocompress

Posted on Edited on

Your .webm or .mov keeps getting rejected — convert it to a smaller MP4 in the browser

A screen recording lands as .webm. An iPhone clip lands as .mov. Both play fine on your machine — then Slack, an email form, a Windows laptop, or a CMS says the file type isn't supported, or the upload is simply too big.

The fix that usually works is boring and universal: turn the file into an MP4 with H.264 video and AAC audio, and shrink it while you're at it. That is what most uploaders and players actually expect.

I ran two real clips through videocompress.dev in Chrome — nothing uploaded off the machine — and measured the downloads with ffprobe afterwards.

Source Container / codecs Size (tool) Target Output Reduction Encode time
Tears of Steel clip → WebM WebM · VP8 + Vorbis · 1920×800 · 1:15 91.4 MB 15 MB 13.9 MB MP4 H.264+AAC 85% smaller ~4 min 19 s
Same clip → MOV MOV · H.264 + AAC · 1920×800 · 1:15 113.1 MB 20 MB 15.0 MB MP4 H.264+AAC 87% smaller ~13 s

Both outputs stayed 1920×800. The footage is a 75-second cut of Tears of Steel (Blender Foundation open movie), re-encoded with ffmpeg into a VP8/Vorbis .webm and an iPhone-style H.264/AAC .mov so the demo matches the formats people actually send around.

Why .webm and .mov trip up uploads

They fail for different reasons:

  • WebM (often VP8/VP9 + Opus/Vorbis) is great in Chrome and for browser screen recordings, but plenty of desktop apps, email gateways, and older players still want MP4.
  • MOV is Apple's QuickTime container. iPhones write H.264 or HEVC into it. Many Windows tools and web forms accept the codecs but reject the .mov extension — or they accept MOV but choke on the size.

If you only need a container swap and the video is already H.264+AAC, the dedicated MOV to MP4 page can rewrap without re-encoding. When the file is also too large, or the codec isn't MP4-friendly (VP8/VP9 WebM, ProRes, PCM audio), you want the compressor on the homepage: it re-encodes to H.264+AAC and can aim at a megabyte budget. Background on that path: video compressor with no upload and WebCodecs vs ffmpeg.wasm.

1. Open the compressor and drop the file

Go to videocompress.dev. The drop zone accepts MP4, MOV, WebM, MKV, AVI, WMV, FLV and more. No account, no watermark.

Empty drop zone on videocompress.dev

Drop the .webm or .mov (or click Choose file). When it is ready you should see the filename, size, resolution, and duration, plus Quality / Target size controls and a Compress video button. The file stays in the tab — the lock line under the controls is literal.

Here is the WebM after load — 91.4 MB · 1920×800 · 1:15:

WebM loaded in the local workspace

And the MOV — 113.1 MB · 1920×800 · 1:15:

MOV loaded in the local workspace

2. Switch to Target size (skip the quality presets for a hard cap)

Quality mode (High / Balanced / Small file) is fine when you only care about “smaller.” When Slack, Discord, email, or a form has a hard megabyte limit, click Target size instead and type the budget in MB.

For the WebM I set 15. The estimate under the button read ≈ 14.1 MB before I pressed Compress:

WebM with Target size set to 15 MB

For the MOV I set 20 (estimate ≈ 18.8 MB):

MOV with Target size set to 20 MB

Leave Advanced settings → Resolution on Original unless the encode is starving and you truly need more headroom — dropping resolution on a clip that already fits the target just throws pixels away. More on picking a number: compress video to a target size. Screen recordings with UI text are the hard case; see compress a screen recording if that is your source.

3. Compress the WebM → MP4

Press Compress video. Keep the tab in the foreground; browsers may pause the encode if you switch away.

On this machine the VP8 WebM took about 4 minutes 19 seconds. The result card:

91.4 MB → 13.9 MB · 85% smaller

WebM compression finished — 13.9 MB MP4 ready

ffprobe on the download:

  • Container: MP4
  • Video: H.264 1920×800 ~1.4 Mbps
  • Audio: AAC stereo 44.1 kHz
  • Duration: still ~75 s
  • Bytes: 14,552,715 (13.9 MB as the tool reports)

So the awkward WebM is now a normal MP4 under a 15 MB cap.

4. Compress the MOV the same way

Same page, Change video, drop the .mov, Target size → 20, Compress video.

This one finished in about 13 seconds (H.264 source + WebCodecs path is much faster than decoding VP8 in the tab):

113.1 MB → 15.0 MB · 87% smaller

MOV compression finished — 15.0 MB MP4 ready

ffprobe again: H.264 + AAC, 1920×800, ~75 s, 15,713,740 bytes. Same codecs the tool always aims for — which is why compress MOV files and a plain “make it MP4 and smaller” goal are the same button once you need a size cap.

5. Download and spot-check

Click Download compressed video. Quick checks before you re-upload anywhere:

  1. Extension is .mp4.
  2. Size is under your destination limit (for Discord free uploads that means ≤ 20 MB; server boosts raise it — see compress MP4 for Discord).
  3. It plays on a second device or in a private window.
  4. If it is still over the limit, lower the target a few MB and run again — or drop resolution one step in Advanced only if the picture is already soft.

Bitrate vs resolution tradeoffs are covered in the video compression guide.

If the file is so large the tab runs out of memory, use vidsmaller.com (cloud exact-size compressor from the same maker) instead of forcing the browser job.

Checklist

  • [ ] Source is WebM, MOV, or another browser-decodable file
  • [ ] Opened videocompress.dev and saw the file listed locally
  • [ ] Chose Target size with a real destination budget
  • [ ] Downloaded an MP4 that ffprobe (or any media info tool) shows as H.264 + AAC
  • [ ] Confirmed the byte size against the place you are sending it

Two formats in, one boring MP4 out — and in these runs, 85–87% smaller without the file ever leaving the browser.

Related: Discord rejected your video? Shrink it under 20MB in the browser (Medium) · The 25MB email limit is smaller than it looks (Medium) · Your bug repro is 89 MB and GitHub takes 10 (Hashnode)

Top comments (0)