Convert video
Convert video writes MP4 (H.264), WebM (VP8), or MOV. Same-family remux uses stream copy when it can; otherwise it re-encodes. Exotic inputs may decode and still fail an encode — I will show an error rather than a broken file.
Convert, trim, compress, GIF, extract audio, mute, resize, rotate, and merge video in the tab with FFmpeg.wasm. The clip is not uploaded.
Runs in your browser · Nothing uploaded
Video is the category upload sites love most: a 200 MB file, a progress bar, an email with a link. These pages load a local FFmpeg build once (about 30 MB, then cached) and do the work in the tab. First visit of a video tool pays for the encoder. Your file is still not POSTed.
Outputs I actually ship are MP4, WebM, and MOV for conversion, plus GIF and extracted audio. I am not advertising AVI, MKV, or FLV as first-class destinations. Long clips are slower here than on a rented GPU farm because they never leave the machine. That is the deal.
The encoder is GPL FFmpeg compiled to WebAssembly, single-thread, same origin. There is no COEP experiment that would break Analytics and the rest of the static site.
Convert video writes MP4 (H.264), WebM (VP8), or MOV. Same-family remux uses stream copy when it can; otherwise it re-encodes. Exotic inputs may decode and still fail an encode — I will show an error rather than a broken file.
Trim video cuts a start and end time. Re-encode keeps the cut close to the times you typed. A 30-minute source does not need a 30-minute wait if you set a short window.
Compress video uses CRF or a one-pass bitrate guessed from a target size. There is no multi-encode binary search in wasm; that would mean encoding the clip over and over in a browser tab.
Video to GIF runs the two-pass palette recipe at a width and frame rate you pick. Default 320px and 10 fps is a reaction GIF, not a film print. You can limit the time range so a 30-second source does not become a 30-second GIF by accident.
Extract audio drops the picture and writes MP3, WAV, or AAC. Same job as Audio from video; two URLs because people search both phrases. No audio stream means an error, not a silent success.
Mute video strips the soundtrack and keeps the picture, via stream copy when the container allows it. For a clip you can send without the room noise, that is enough.
Resize video scales to a width, with aspect locked by default (even height). 4K phone clips for a slide deck are the use. Unchecking aspect will squash on purpose.
Rotate video is 90, 180, or 270 for the phone clip that was sideways. 90 and 270 transpose; 180 flips. Not an arbitrary-angle 3D rotate.
Merge clips concatenates two or more files in order. Matching formats can stream-copy; mismatches re-encode. It will not auto-letterbox mixed resolutions into a pretty sequence.
No. After the page and the local encoder load from this origin, the bytes of your file stay in the tab. The network panel should show ffmpeg-core.wasm once, not a POST of the movie.
Those sites use someone else’s CPUs, which is also why they have your file. This page uses yours. A short 1080p clip is fine. A half-hour 4K dump belongs in HandBrake on the desktop.
FFmpeg compiled to WebAssembly, GPL. It runs in your tab; I did not relicense it. The rest of the site is still static files. If GPL is a problem for how you use the output, that is a conversation with a lawyer, not a badge I will fake.
There is no server to upload to. Each page is a static file, and the work happens in your browser. Your file is read from disk into memory, processed, and handed back as a download. Once the page has loaded you can disconnect from the network and it keeps working. The longer explanation