How to convert mov to mp4 in your browser
- Step 1Open the transcoder and drop your .mov — The picker accepts
.mov(plus mp4, mkv, webm, avi, m4v, ts). The file loads into the browser sandbox; it is never sent anywhere. - Step 2Set Container to MP4 — In the Output format panel, choose mp4 from the Container dropdown. This is the wrapper most players and editors expect.
- Step 3Set Codec to h264 — Pick h264 (FFmpeg's
libx264). It is the safe universal choice; an HEVC .mov from a new iPhone is transcoded down to H.264 so non-Apple devices can play it. - Step 4Choose a CRF — Leave 23 for a clean, well-sized result. Drop to 18-20 for near-transparent quality (larger file), or raise to 26-28 for a smaller share-friendly file.
- Step 5Run the conversion — FFmpeg.wasm decodes the MOV and re-encodes to H.264 with the
mediumpreset and AAC 128k audio. Progress streams in the dashboard; a phone clip is typically done in 20-60 seconds. - Step 6Download the MP4 — The result is written straight to disk. Verify it plays in your target app — if it does, the original .mov can be deleted.
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 MOV-to-MP4 situations and the exact settings that solve them.
iPhone HEVC .mov that won't play on Windows
Recent iPhones record .mov wrapped around HEVC (H.265). On Windows without the paid HEVC extension, Media Player shows audio-only or an error. Re-encoding to H.264 fixes it permanently.
Input: IMG_4821.mov (HEVC video, AAC audio, 1080p60)
Settings: Container=mp4 Codec=h264 CRF=23
FFmpeg.wasm runs (conceptually):
-i IMG_4821.mov -c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k out.mp4
Output: IMG_4821.mp4 (H.264 + AAC) — plays on Windows, Android,
old smart TVs, and every browser with no extra codec.Screen recording for a web embed
A QuickTime screen recording (.mov) needs to go on a landing page. H.264 MP4 plays inline in every browser; the .mov did not in some.
Input: Screen Recording 2026-06-10.mov Settings: Container=mp4 Codec=h264 CRF=22 Result: a clean MP4 you can drop into <video src> and that autoplays/inline-plays on iOS Safari and Chrome alike. If you also want it byte-optimised for streaming, run the result through /video-tools/web-optimizer for +faststart.
Smaller file for email/chat without HEVC
You want a smaller MP4 but the recipient is on Windows where HEVC fails. Stay on H.264 and lean on CRF instead of switching codecs.
Input: demo.mov (H.264 already, but high bitrate) Settings: Container=mp4 Codec=h264 CRF=27 Higher CRF = lower bitrate = smaller file, still H.264. For a hard size target (e.g. fit under Discord's 25 MB), use /video-tools/discord-compressor instead — it solves for a byte budget; the transcoder solves for a quality level.
Keep maximum quality for re-editing
The MP4 is going back into an editor, not to a viewer, so quality matters more than size.
Input: interview.mov Settings: Container=mp4 Codec=h264 CRF=18 CRF 18 is visually near-lossless for H.264. For an actual editing master with intra-frame scrub performance, prefer ProRes via /video-tools/prores-encoder instead of MP4.
Batch a folder of phone clips (Developer tier)
The UI takes one file at a time, but the same operation can be scripted against the local runner for a whole folder.
GET /api/v1/tools/video-transcoder → returns the option schema
(targetFormat, codec, crf)
Pair @jadapps/runner once, then for each .mov POST:
127.0.0.1:9789/v1/tools/video-transcoder/run
{ targetFormat: 'mp4', codec: 'h264', crf: 23 }
Everything runs on your machine; no clip is uploaded.Edge cases and what actually happens
iPhone HEVC .mov input
SupportedThe transcoder decodes HEVC and re-encodes to your chosen codec. Picking h264 output is the whole point for Windows/Android compatibility — the HEVC source is read fine even though Windows itself can't play it.
Expecting a fast remux (no re-encode)
By designThis tool always re-encodes the video; it does not stream-copy. If your .mov is already H.264 and you only want to change the wrapper, a remux would be faster — but the transcoder will still re-encode. There is no -c copy option in this tool's UI.
Source has a PCM or odd audio track
Preserved as AACAudio is always re-encoded to AAC 128k (Opus 128k for WebM output). A WAV/PCM track inside a MOV that some players rejected becomes a clean AAC track that plays everywhere.
Very long 4K MOV on a laptop
Slowlibx264 in WebAssembly is software-only — no GPU. A 30-minute 4K file can take many minutes and lots of RAM. For long files, lower CRF demand or output 1080p with /video-tools/video-resizer first.
File larger than your tier cap
RejectedFree stops at 1 GB per file. A long 4K .mov can exceed that. Upgrade, or trim it first with /video-tools/lossless-trimmer (no re-encode) to get under the cap.
Browser tab closed mid-encode
AbortedBecause everything runs in the tab, closing or refreshing it stops the job and discards the partial output. Re-run from the start; nothing was uploaded to recover.
Picking ProRes output here for editing
Use prores-encoderThe Codec dropdown includes prores, but it uses the default profile and ignores CRF. For 422/422HQ/4444 with 10-bit and PCM audio, use the dedicated /video-tools/prores-encoder.
Output won't play in QuickTime but plays elsewhere
Container mismatchMKV output won't open in QuickTime by design (Apple doesn't support .mkv natively). Re-run with Container=mp4 or mov for Apple apps.
DRM-protected / FairPlay source
RejectedEncrypted store-bought content can't be decoded. The transcoder only works on files you own and can already play locally.
Frequently asked questions
Does my .mov get uploaded anywhere?
No. The conversion runs entirely in your browser via FFmpeg.wasm. The file is read into the tab's memory, re-encoded on your CPU, and written back to disk. The only thing that ever touches a server is an anonymous 'one file processed' counter for signed-in dashboard stats — never the video itself.
My iPhone MOV is HEVC — will this work?
Yes. The transcoder decodes HEVC and re-encodes to whatever codec you choose. Picking h264 output is exactly how you make an HEVC iPhone clip play on Windows and Android, which can't handle HEVC without extra software.
Should I pick h264 or h265 for the output?
Pick h264 for compatibility — it plays on literally everything. Pick h265 only if you know the destination supports HEVC and you want roughly half the file size. For a MOV you're trying to make universally playable, h264 is the right answer.
What CRF should I use?
23 (the default) is a good clean balance. Use 18-20 when quality is paramount and you don't mind a bigger file; use 26-28 for a smaller share file. Lower CRF = better quality and bigger file.
Is this as fast as HandBrake?
Not for long files. HandBrake can use your GPU's hardware encoder (NVENC/QuickSync/VideoToolbox); this tool runs libx264 in software inside the browser, so it's slower on big files. For a typical phone clip it finishes in under a minute and needs no install.
Can I convert several .mov files at once?
The UI processes one file at a time (no drag-to-batch). To automate a folder, Developer tier can drive the same operation through the local @jadapps/runner — still 100% on your machine.
Does it keep the audio?
Yes — audio is re-encoded to AAC at 128k (or Opus 128k if you output WebM). Odd PCM tracks some MOV recorders write get normalised to a clean AAC track that web players accept.
Why is the output not byte-identical to a simple rewrap?
Because this tool re-encodes the video rather than stream-copying it. If you only wanted to swap the container on an already-H.264 file, a pure remux would be faster — but the transcoder always re-encodes, so expect a fresh (slightly different) bitstream.
How big a file can I convert for free?
Up to 1 GB on the free tier, one file per run. Pro raises this to 10 GB / 5 files, Pro + Media to 100 GB / 50, and Developer to 100 GB with unlimited file count. There is no minutes cap — only file size.
Will it play on an old TV or game console?
If you output MP4 + h264 + AAC, almost certainly yes — that's the lowest-common-denominator combo. MKV and WebM outputs are less universally supported on TVs; stick with MP4 for living-room playback.
What if the file is too long and too big?
Trim it first. /video-tools/lossless-trimmer cuts at keyframe boundaries with no re-encode, so it's instant and gets you under the size cap before you transcode the part you actually need.
Can I get a smaller file than H.264 gives me?
Yes — switch the Codec to h265 or av1 for the same quality at a smaller size. The trade-off is compatibility (h265 needs a capable player) and speed (av1 in software is slow). For a guaranteed size target instead of a codec change, use /video-tools/email-compressor or /video-tools/whatsapp-compressor.
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.