What it means to convert a file inside the browser
Why the file never goes to a server, what that makes fast and slow, and where the limits were measured, in order.
What not uploading means
The usual conversion site takes your file onto its own server, processes it there and hands back the result. That is why there are free quotas, queues, and a period during which your file sits on their disk. For a meeting recording, a lecture, a family clip, the structure itself is the problem.
This tool goes the other way. It downloads the conversion engine once (FFmpeg compiled to WebAssembly, 31 MB) and runs it inside the browser. The file you pick is loaded only into browser memory, the result is produced there and downloaded directly. What our server receives is the name of a step, such as page opened or conversion pressed.
In exchange, the computer doing the work is yours. Speed and the size you can handle depend on your device. The rest of this guide puts numbers on those limits.
Re-encoding versus copying
A video file is a container (mp4, mkv, mov, webm) holding a video stream (a codec such as H.264) and an audio stream (AAC, mp3). Changing only the container, pulling out only the audio, or cutting by time means moving the streams without unpacking them. That takes about as long as reading and writing the file.
Shrinking a file or making a GIF is different. Every frame of the video stream has to be unpacked and compressed again. That is called re-encoding, and it is where a computer works longest.
The engine here runs on one core. A multi-core build exists, but it needs special security headers in the browser, and with those headers on, the ad slot on this site is blocked. Ads are what pays for the site, so the single-core build was chosen. Re-encoding is therefore slow, and the screen says so before you start.
What this tool actually does
This section lists what the code does, in order. Extract audio drops the video stream and writes the audio stream in the format you chose: mp3 with LAME at 192 kbps, m4a with AAC at 160 kbps, wav as 16-bit lossless. If the source is already mp3 it is still re-encoded.
Trim takes a start and an end time and copies that range. Because the streams are not unpacked, cuts land on keyframes. The start can move up to a few seconds earlier, and the quality is untouched.
Shrink computes a video bitrate from the target size in MB and the file's length: 95% of the target minus 96 kbps for audio, divided by the length. If that comes out below 150 kbps it is raised to 150 and the screen says the target may be exceeded. The height is limited to 720 and the video is re-encoded to H.264 in one pass.
GIF takes a segment, a width and a frame rate. The two-pass palette method doubles the time, so it is not used; colors can be a little rough instead.
Change container moves the streams as they are into another container. mp4 accepts H.264, H.265 and AAC or so; if a stream does not fit, ffmpeg refuses and its message is shown as is.
Subtitle conversion works on text only, without the engine. The file is read as UTF-8; if that fails it is read as EUC-KR. For smi, each SYNC gives a start time and the next SYNC is the end. If there are several language classes only the first is converted, and the screen says so.
The ceiling was measured. In Chromium on a computer with 16 GB of RAM, a 1.5 GB wav file could be loaded and copied out again; 2 GB failed because the browser could not allocate the memory. Other devices differ. On failure the engine is reset and you are told.
Speed was measured the same day on the same PC. Converting 60 seconds of wav to mp3 took 0.6 seconds; re-encoding a 10-second 720p video down to 480p took 11.0 seconds. Changing the container and trimming took under 0.1 seconds. Count on re-encoding taking about as long as the video.
The result is saved as a file when you press Download. It disappears when you leave the page. Nothing stays on the server, so to get it again you convert again.
Tips for input
If you need only part of a long video, trim first and feed the result back in. Trimming is fast, and a shorter file makes Shrink and GIF proportionally quicker.
Times are seconds or minutes:seconds. 30 is thirty seconds, 1:05 is one minute five, 0:02:10 is two minutes ten. The end must come after the start; past the file's length it stops at the length.
For a lecture where only the sound matters, Extract audio is the answer. It does not re-encode video, so even an hour-long file finishes in about the time it takes to read it, and one mp3 is a fraction of the video's size.
On a phone, a large video runs out of memory first. The browser may close the tab or the engine may stop. Files past a few hundred MB are better handled on a PC.
Size targets and subtitle encodings
There are three presets and a custom size. Gmail 25 MB was confirmed in Google's Help page. KakaoTalk 300 MB and Naver Mail 10 MB were not found in official documentation; they are the numbers users keep repeating, and the screen marks them as not confirmed. The real limit is whatever that service shows you.
The lower the bitrate, the blurrier the picture. Fitting ten minutes into 10 MB leaves about 40 kbit per second for video, which is not enough for readable text. The only fixes are a larger target or a shorter length, and this tool calculates that ahead of time and says so.
Old smi subtitles are often saved as EUC-KR. Saving them straight to srt produces broken characters in the player. This tool detects the encoding when reading and always writes UTF-8. The reverse, a UTF-8 smi in an old player, can fail on the player's side, and that is a player setting.
srt and vtt are nearly the same format. The time separator is a comma in one and a period in the other, and vtt starts with a WEBVTT line. The video tag on a web page only accepts vtt.
Where people get stuck
If downloading the engine takes long, it is the connection, not the file. Once downloaded, the browser keeps it and later runs start at once. Private windows do not keep it.
If Change container says no, the codec does not fit that container. VP9 inside webm, for example, cannot go into mp4. Shrink re-encodes to H.264, which mp4 accepts.
If a trimmed file starts earlier than the time you entered, that is the keyframe. When the exact position matters you would re-encode while cutting; this tool does not offer that combination, but feeding the trimmed result into Shrink does the same job.
If you are told the engine ran out of memory, the file is too big for this device. Split it with Trim or use a PC. This tool has no path that sends the file to a server to be processed there.
The result's file name is the original name followed by one word for what was done. On the English screen the word is English.
Sources and measurements
- ffmpeg.wasm documentation, license and input size limit (2026-09-07)
- FFmpeg legal notice, GPL when x264 is used (2026-09-07)
- npm @ffmpeg/core, license GPL-2.0-or-later (2026-09-07)
- Cloudflare docs, default cached file extensions (2026-09-07)
- Google Help, Gmail attachment limit 25 MB (2026-09-07)
- MDN browser compatibility, iframe credentialless (2026-09-07)
- MDN, navigator.deviceMemory (an approximation) (2026-09-20)