Media toolbox (ffmpeg)
ffmpeg compiled to WebAssembly, in your browser — convert, trim, crop, resize, rotate, re-time and watermark video; make GIFs and animated WebP; extract audio; split video into frames or build video from images; join clips; or run any ffmpeg command.
Added
How to use it
The real ffmpeg (version 5.1, built by the ffmpeg.wasm project) runs in a background worker on this page. Your files never leave your machine — the only download is the engine itself (about 31 MB from the jsDelivr CDN), the first time you press Run. After that your browser caches it.
Getting media in
Drop files on the Source panel, click it to choose, or paste. No file handy? Make a 5-second test clip records colour bars, a moving ball, a running timecode and a tone straight from the browser.
The preview player has frame stepping (, and .), play/pause (K), and in/out points
(I and O, or the Set [ / Set ] buttons, or type a time such as 1:02.5 or 90). The
in/out points apply to Convert, Audio and Frames → video jobs. Inspect streams with
ffprobe shows the container, codecs, resolution, frame rate, rotation and bitrate.
Jobs
- Convert & edit
-
Re-encode to MP4 (H.264 + AAC), WebM (VP9 + Opus), MOV, MKV, animated GIF or animated WebP, combining any of: trim, crop (Draw crop then drag on the video, with optional fixed aspect), fit within a maximum size, frame rate, playback speed (0.25×–8×; audio is re-timed with chained
atempofilters so pitch is preserved), rotation and mirroring, muting, and a watermark (text drawn in your browser in any font or emoji, or a logo image, overlaid at a chosen corner and opacity). Stream copy trims or mutes without re-encoding — instant, but cuts land on the nearest keyframe.Presets: Web / SmugMug (H.264 High profile, ≤ 1080p, CRF 20, AAC 160 kb/s,
+faststartso playback starts before the whole file downloads), small MP4 for sharing, tiny preview, WebM, a README-sized GIF and an animated WebP. - GIF and WebP
-
GIFs use a generated palette (
palettegen→paletteuse), which looks far better than ffmpeg’s default 256-colour web palette. Choose colours, dither (Sierra, Floyd– Steinberg, ordered Bayer, or none), palette mode (optimise for motion, whole frame, or a new palette per frame) and looping. - Audio
-
Extract or convert to MP3, AAC, Opus, Ogg Vorbis, WAV or FLAC, with bitrate, sample rate, mono, speed, fades, and EBU R128 loudness normalisation (−16 LUFS, −1.5 dBTP).
- Frames
-
Video → frames exports stills at a chosen rate (or every frame) as PNG, JPEG or WebP, shown as thumbnails with a ZIP download. Images → video turns the images in the source list (sorted by name) into an MP4, WebM or GIF — a quick way to make a timelapse.
- Join clips
-
Joins every video in the source list in order, scaling and letterboxing each to one size and frame rate so clips from different cameras can be combined.
- Custom command
-
Any ffmpeg arguments.
{input}is the selected file and{input2},{input3}… the others; the last argument is the output. Examples include reverse, deshake, sharpen, a waveform image and picture-in-picture.
The Command box always shows the exact ffmpeg command, so you can copy it and run the same job with ffmpeg on your own machine — useful for long videos.
Limits
-
WebAssembly ffmpeg runs single-threaded (GitHub Pages cannot send the headers that multi-threaded WebAssembly needs), so it is several times slower than native ffmpeg. VP9 is the slowest encoder; H.264
veryfastis a good default. -
Input and output files live in the page’s memory, and a WebAssembly page can address at most about 2 GB. Clips of a few hundred megabytes are fine; hour-long 4K files are not.
-
Cancel stops the worker immediately; the next job restarts it without downloading again.
-
Hardware codecs and a few libraries (for example
libfdk_aacanddrawtextfonts) are not in the WebAssembly build — which is why watermark text is drawn by the browser instead.
Sharing
Share link copies a URL that opens this tool exactly as configured. The job, not your media: output format and every option you changed, the frames direction, or the custom command (?cmd=). The person you share it with adds their own file and presses Run.
For example: media/?cmd=-i%20%7Binput%7D%20-vf%20vflip%20output.mp4.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser — network requests go only to the services named on this page.