How to convert webm to mp4 with no install
- Step 1Drop the .webm onto the transcoder — Accepts
.webmplus mp4, mov, mkv, avi, m4v, ts. The file loads into your browser tab and is not sent anywhere. - Step 2Set Container to MP4 — MP4 is what editors, TVs, and PowerPoint expect. Outputting WebM again would not solve the compatibility problem.
- Step 3Set Codec to h264 — H.264 (
libx264) is the universally accepted editing/playback codec. The WebM's VP9 video is decoded and re-encoded to H.264. - Step 4Choose a CRF — Use 18-20 if the MP4 is going into an editor and quality matters; use 23-26 if it's for sharing or web playback.
- Step 5Run the conversion — FFmpeg.wasm decodes VP8/VP9 + Opus and re-encodes to H.264 + AAC 128k. Screen captures with lots of motion take longer; this is CPU-only software encoding.
- Step 6Download and import — The MP4 carries video and AAC audio. Import it into your editor — the audio that 'disappeared' from the WebM will now be present.
Codec dropdown — what each option does
These are the five entries in the Codec selector. Every option is a software FFmpeg.wasm encoder running in your tab — there is no hardware/NVENC path in this tool. The CRF box drives quality for the rate-controlled codecs.
| Codec option | FFmpeg encoder | Best for | CRF behaviour |
|---|---|---|---|
| h264 | libx264 | Universal playback — every phone, browser, TV, editor | CRF 0-51, ~18-23 is visually clean; 23 is the default |
| h265 | libx265 | Roughly half the size of H.264 at matched quality; archives | CRF 0-51, ~24-28 matches H.264 CRF 18-23 |
| vp9 | libvpx-vp9 | Open, royalty-free; great for web/<video> playback | CRF 0-51 used as the quality target; slowest of the lot in WASM |
| av1 | libaom-av1 | Smallest files of all; long-term web/archival | CRF 0-51; software AV1 in WASM is very slow — short clips only |
| prores | prores_ks | Hand-off to editors; intra-frame, scrub-friendly | CRF box is ignored — ProRes is not a CRF codec (see the prores spoke) |
Input and output containers
The file picker accepts the input list below; the Container dropdown sets the output wrapper. Output is always a fresh re-encode (the transcoder does not stream-copy), and audio is re-encoded to AAC 128k — or Opus 128k when the output is WebM.
| Container | Accepted as input? | Selectable as output? | Default audio in output |
|---|---|---|---|
MP4 (.mp4, .m4v) | Yes | Yes | AAC 128k |
MOV (.mov) | Yes | Yes | AAC 128k |
MKV (.mkv) | Yes | Yes | AAC 128k |
WebM (.webm) | Yes | Yes | Opus 128k (forced for WebM) |
AVI (.avi) | Yes | Yes | AAC 128k |
MPEG-TS (.ts) | Yes | No (input only) | n/a |
Tier limits for the transcoder (video family)
Limits are per-file size and per-batch file count, not a duration cap — the encode streams to disk so a 90-minute file is bounded by file size, not minutes. The transcoder takes one file at a time (no drag-to-batch in the UI).
| Tier | Max file size | Files per run | Practical note |
|---|---|---|---|
| Free | 1 GB | 1 | Fine for a single phone clip or a short screen recording. A 4K 60fps file fills 1 GB in roughly 2-3 minutes of footage at high bitrate. |
| Pro | 10 GB | 5 | Covers most camera originals and longer recordings; run files one after another. |
| Pro + Media | 100 GB | 50 | Built for raw camera masters and long-form sources. Size, not length, is the gate. |
| Developer | 100 GB | Unlimited | Same 100 GB per-file ceiling, no cap on how many files you process. Pair with the @jadapps/runner for unattended batches. |
Cookbook
Real WebM-to-MP4 jobs from OBS, browser recorders, and the web — with the right settings.
OBS WebM that imports into Premiere with no audio
Premiere often imports VP9/Opus WebM with a video track but silent audio. Re-encoding to H.264/AAC fixes the audio in the editor.
Input: obs-capture.webm (VP9 video, Opus audio)
Settings: Container=mp4 Codec=h264 CRF=20
FFmpeg.wasm (conceptually):
-i obs-capture.webm -c:v libx264 -crf 20 -preset medium \
-c:a aac -b:a 128k out.mp4
Result: Premiere imports both video AND audio cleanly.Browser-recorded webcam clip for PowerPoint
PowerPoint won't embed WebM. An H.264 MP4 embeds and plays in the deck.
Input: webcam.webm Settings: Container=mp4 Codec=h264 CRF=23 Result: webcam.mp4 you can Insert > Video into a slide and that plays in PowerPoint on Windows and Mac.
Keep editing quality high
The clip is going through several editing passes, so a low CRF (high quality) avoids stacking compression artifacts.
Input: screencast.webm Settings: Container=mp4 Codec=h264 CRF=18 CRF 18 is near-transparent for H.264. For a true intra-frame editing master with snappy timeline scrubbing, use /video-tools/prores-encoder to make ProRes instead.
Make it stream well on the web after conversion
Going from WebM to MP4 for a web embed — add faststart so it plays before the whole file downloads.
Input: promo.webm → transcode to MP4 (Codec=h264, CRF=22) Then run the MP4 through /video-tools/web-optimizer for the +faststart (moov-atom-at-front) flag so it begins playing immediately when embedded with <video>.
Batch convert a session of OBS recordings (Developer)
OBS dumped a folder of .webm files. The UI is one-at-a-time, but the runner can loop them.
Pair @jadapps/runner once. For each .webm POST:
127.0.0.1:9789/v1/tools/video-transcoder/run
{ targetFormat: 'mp4', codec: 'h264', crf: 20 }
GET /api/v1/tools/video-transcoder returns the schema.
All local — recordings never leave the machine.Edge cases and what actually happens
VP9 + Opus WebM imports silently in editors
Fixed by AACMany editors ignore Opus audio in WebM. Converting to MP4 re-encodes audio to AAC 128k, which every editor reads — the 'missing audio' problem disappears.
Alpha-channel WebM (transparent video)
Alpha lostSome WebM exports carry an alpha channel for transparency. H.264 in MP4 has no alpha, so transparency is flattened. For transparency, keep WebM (VP9) or use a workflow that supports alpha — the transcoder can't preserve it.
Already want WebM out, not MP4
SupportedWebM is a valid output container (it forces Opus 128k audio). But if your goal is editor/TV compatibility, MP4 is the right target — WebM out won't fix those.
Long, high-motion screen capture
SlowVP9 decode plus libx264 encode in software is CPU-heavy. Long captures with lots of on-screen motion take a while and use significant RAM. Lower the resolution first with /video-tools/video-resizer if needed.
Variable-frame-rate (VFR) browser recording
NormalisedBrowser/OBS captures are often VFR. FFmpeg handles this on re-encode; the resulting MP4 plays correctly in editors that struggle with VFR WebM. Audio/video sync is preserved by the re-encode.
Re-encode (not remux) is mandatory
By designWebM and MP4 use incompatible codecs (VP9 vs H.264), so a remux isn't possible anyway — re-encoding is required and is exactly what this tool does.
File over the tier cap
RejectedFree is 1 GB per file. A long OBS session can exceed that; trim with /video-tools/lossless-trimmer or upgrade.
Picking AV1 output to shrink the WebM further
Very slowAV1 (libaom-av1) in WebAssembly is extremely slow. It's fine for a short clip but impractical for a long recording — H.264 or H.265 are the realistic choices for anything lengthy.
Tab closed mid-encode
AbortedClosing or refreshing the tab cancels the in-browser job and discards the partial MP4. Re-run from the start.
Frequently asked questions
Why does my OBS WebM lose its audio when I import it?
WebM usually stores audio as Opus, which several editors (including some Premiere versions) ignore. Converting to MP4 here re-encodes the audio to AAC 128k, which every editor reads — the audio comes back.
Is the WebM uploaded to convert it?
No. FFmpeg.wasm runs in your browser tab; the file is decoded and re-encoded on your CPU and saved locally. Only an anonymous processed-file counter is recorded for signed-in users — never the recording.
Do I need to install anything?
No. It's a web page — no HandBrake, no codecs, no admin rights. That's the point of 'no software install': it works on locked-down machines where you can't add apps.
Will my transparent (alpha) WebM keep its transparency?
No. H.264 in MP4 has no alpha channel, so transparency is flattened on conversion. If you need transparency, keep the file as WebM (VP9 with alpha); the transcoder can't preserve it in MP4.
What CRF should I use for editing?
18-20 for material going into an editor (keeps quality high through multiple passes). 23-26 is fine for sharing or web playback. Lower CRF = higher quality and larger file.
Should the output codec be h264?
For editor and player compatibility, yes — h264 in MP4 is the safe choice. Use h265 only when the destination supports HEVC and you specifically want a smaller file.
Is this fast?
For short clips, yes. For long captures, no — it's software (CPU) encoding in WebAssembly with no GPU. A GPU app like HandBrake will be faster on big files, but needs installing and uploading nothing here.
My browser recording is variable-frame-rate — will it sync?
Yes. FFmpeg re-encodes VFR captures into a clean MP4 with audio/video kept in sync, which also fixes editors that mishandle VFR WebM.
Can I convert a whole folder of OBS recordings?
The UI does one file at a time. For a batch, Developer tier can drive this transcoder through the local @jadapps/runner — still entirely on your machine.
How big a WebM can I convert for free?
Up to 1 GB per file on the free tier. Pro is 10 GB / 5 files, Pro + Media 100 GB / 50, Developer 100 GB / unlimited count. There's no length limit, only file size.
Can I make the converted MP4 stream faster on the web?
Yes — after converting, run the MP4 through /video-tools/web-optimizer to add the faststart flag, which moves the moov atom to the front so playback can begin before the whole file downloads.
My WebM is huge — can I make a tiny MP4?
Use h265 for about half the size at similar quality, or set a higher CRF. For a hard size budget (e.g. under Discord's limit), use /video-tools/discord-compressor instead, which solves for a target file size.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.