No Upload
FFmpeg runs via WebAssembly in your browser tab. Your file never touches a server.
FFmpeg runs 100% in your browser via WebAssembly. No file upload. No signup. No size limit. Private by design.
↓Drop your file below
// Converter
LOADING ENGINE
Initialising…
FFmpeg runs via WebAssembly in your browser tab. Your file never touches a server.
Not a wrapper. Actual FFmpeg compiled to WASM — every codec, every flag.
No account. No watermarks. No throttling. No subscription.
MP4 → MKV, AVI, MOV, or re-encoded MP4. Stream copy = instant, lossless.
Pass any FFmpeg CLI argument. Full control over codec, bitrate, filters.
Watch FFmpeg output stream in real time. See exactly what is happening.
Drag and drop your MP4 file, or click to browse. Stays on your device.
Select MKV, AVI, MOV, or re-encoded MP4. Add custom FFmpeg args if needed.
Hit CONVERT. Watch the logs. File downloads automatically when done.
| Ext | Full Name | MIME | Best For |
|---|---|---|---|
| .mkv | Matroska Video | video/x-matroska | Best for archiving. Supports any codec, multiple audio tracks, subtitles, chapters. |
| .avi | Audio Video Interleave | video/x-msvideo | Maximum compatibility with older players and legacy software. |
| .mov | QuickTime Movie | video/quicktime | Native for macOS and iOS. Best for Apple ecosystem. |
| .mp4 | MPEG-4 Part 14 | video/mp4 | Re-encode with custom settings. Universally compatible. |
// Long read
A useful explanation of how browser-based video conversion works, why we use FFmpeg, when each common container format makes sense, and answers to the questions readers ask most often. If you only came here to convert a file, skip back up — none of this is required reading.
When you drop a video onto the converter at the top of this page, nothing leaves your device. The browser reads the file into memory using the standard File API, hands it to a WebAssembly build of FFmpeg, and waits. FFmpeg parses the container, pulls out the video and audio streams, and either copies them into a new container as-is or re-encodes them into a different codec — the same thing the command-line version of FFmpeg does, executed by the same C code, just compiled to a binary format your browser can run.
Most format changes — MP4 to MKV, MOV to MP4, MKV to MP4 — are container swaps, not codec changes. The video data inside is usually already H.264 or H.265. In that case FFmpeg performs a stream copy: it lifts the encoded video and audio out of one container and drops them into another without touching the actual frames. This is almost instantaneous, even on long files, and produces output that is bit-identical to the source in everything but its wrapper.
Re-encoding is different. If you ask for compression, a resolution change, or a different codec (say, H.265 to H.264 so an older device can play the file), FFmpeg has to decode every frame and encode every frame anew. That work is bounded by your CPU. A modern laptop will re-encode a ten-minute 1080p clip in a few minutes; a phone will take longer. Either way it happens locally, which is why a slow conversion never freezes for you — you can watch the FFmpeg log scroll in real time and see exactly what it is doing.
The conventional model for "free online tools" is server-side: you upload a file, a server processes it, the server sends back a download link. The site monetizes by showing ads while you wait, and many also retain uploads to train models, sell to data brokers, or simply hold for as long as their privacy policy says they can. Even the well-intentioned ones are a breach waiting to happen — once a file is on a server you do not control, the question is no longer if it can leak but whether anyone bothers.
Client-side conversion eliminates the question entirely. There is no upload endpoint, no server-side queue, no temporary file directory holding your video while it waits its turn. The FFmpeg.wasm binary is downloaded once to your browser cache, and from then on every conversion happens inside the same browser tab that loaded this page. You can verify it: open your browser's developer tools, switch to the Network tab, convert a file, and watch — no outbound request carries your video. This works for a one-megabyte phone clip and for a forty-gigabyte raw capture equally well.
These four names refer to containers, not codecs. A container is a wrapper that bundles a video stream, one or more audio streams, optional subtitle tracks, and metadata into a single file. The actual compression — H.264, H.265, AV1, VP9 — lives inside the container. That is why you can have an MP4 and an MKV with identical video and audio quality and nearly identical file size: the wrapper is mostly bookkeeping.
MP4 is the universal format. Every phone, every browser, every social platform, every TV from the last decade accepts it. If you are uploading to YouTube, posting to Instagram, sending a video by message, or embedding into a webpage, MP4 is the right answer almost every time. Its downsides are mostly invisible to people who just want a video to play: it has limited support for multiple audio tracks and subtitle streams compared to MKV, and it is encumbered by a patent pool that some open-source projects try to avoid.
MKV (Matroska) is the format for keeping things. It is open, royalty-free, and accepts almost any codec combination. It can carry a dozen subtitle tracks, a dozen audio languages, chapter markers, and attached fonts in one file. If you are archiving a movie for a home media server, ripping a disc, or storing footage long-term, MKV is the better wrapper. Its only meaningful downside is that some consumer devices refuse to play it.
MOVis Apple's QuickTime container, and the default for video shot on iPhones and edited in Final Cut. On Apple hardware it is interchangeable with MP4 for most purposes — the two are technically siblings — but on Windows, Android, and the open web, MOV sometimes runs into compatibility quirks. Converting MOV to MP4 is usually a no-op stream copy and the right move whenever the file needs to leave the Apple ecosystem.
AVI is the old container, the one your dad used. It was the dominant format on Windows in the 1990s and early 2000s, and it shows its age in how it handles modern codecs, variable frame rates, and B-frames. Convert out of AVI when you can. The only good reason to convert into AVI is to placate a piece of legacy software or hardware that refuses to read anything else.
FFmpeg is the engine. It is an open-source project, started in the year 2000, that has quietly become the substrate of the entire video industry. When you watch something on YouTube, a server somewhere ran FFmpeg to transcode the upload. When VLC plays your file, it leans on FFmpeg's libraries to decode it. When Chrome plays an HTML5 video, the same libraries are in the chain. It is one of those pieces of free software whose absence would visibly break the modern internet.
We use FFmpeg here for two reasons. First, it can read and write essentially any format that has ever existed — there is no edge case you can throw at it that has not already been handled by someone else with the same problem. Second, the FFmpeg.wasm project compiles it to WebAssembly so it can run in a browser without any installation. That means we get professional-grade conversion for free, and you get it without having to download anything beyond a web page. The only thing this site does on top of FFmpeg is wrap it in a UI and make a few sensible defaults easy to choose.
No. The page itself loads from a server (this is the web), but your video file is read locally, processed locally, and saved locally. You can confirm this in your browser's Network tab.
The FFmpeg WebAssembly binary is roughly thirty megabytes. The first time you visit, the browser downloads it once and caches it. Subsequent visits skip the download entirely and start instantly.
On Android with Chrome or Firefox, yes. On iOS, support is more limited because Safari has historically restricted the WebAssembly threading features FFmpeg uses. Container swaps tend to work; heavy re-encoding may not.
Because it is genuinely hard work. Every frame has to be decoded from one codec and re-encoded into another. There is no shortcut. Desktop FFmpeg using a hardware encoder is faster, but in the browser you are limited to software encoding, which means it is bounded by your CPU.
There is no imposed limit. The practical ceiling is your browser's memory, which is usually a few gigabytes. Files up to about 2 GB are routine; multi-gigabyte files are possible if you close other tabs and have enough free RAM.
Yes. The converter exposes an advanced field where you can enter any FFmpeg argument string. If you know the CLI flag you want — -crf 23, -vf scale=1280:-2, -c:v libx264 — it works the same way it does on the command line.
For container changes (MP4 ↔ MKV, MOV → MP4 when the codec is already H.264) the answer is no — stream copy preserves every bit. For re-encoding, quality depends on the parameters you choose. A CRF value of 18 produces visually lossless output; 28 is noticeably compressed; 35 is for when you need a file to be small at the cost of looking it.
Email the address on the contact page. A short description of the source file, the chosen output format, and what the FFmpeg log said is usually enough for me to figure out what happened. There are also longer guides in the blog that may already answer your question.