Chris Collins

Tools · graphics

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 atempo filters 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, +faststart so 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 veryfast is 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_aac and drawtext fonts) 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.

Runs entirely in your browser — network requests go only to the services named on this page.