Video to GIF Locally — Trim a Clip, Set FPS, No Upload
Turn a video into a GIF inside your browser: pick a start/end range, choose 1–60 fps, resize, and tune palette colors and dithering. Files are never uploaded. GIF only, one file at a time.
What this local video-to-GIF tool actually does
Your file never leaves the browser
A chosen, dropped or pasted video is decoded and encoded on your machine. No upload, no account. The tool itself still downloads the FFmpeg.wasm core (about 30.6 MB) or the JavaScript encoder worker from a CDN on first use, so it is not fully offline-capable.
Trim to the exact seconds you need
Set start and end with 0.01 s precision on the timeline, or mark the current playback position as start/end. Speed is adjustable from 0 to 10× in 0.25 steps, so a long shot can become a short loop.
Frame rate and size under your control
Frame rate runs from 1 to 60 fps (default 12). Width and height accept -1 to keep the source aspect ratio; setting either side scales the other automatically. The output dimensions are shown before you convert.
Palette and dithering instead of a quality slider
GIF colors can be limited to 255, 128, 64, 32, 24, 16, 8 or 4, and dithering can be none, sierra2_4a, bayer or floyd_steinberg. There is no bitrate or compression slider, and no target-size estimate.
Two encoders, progress and a stoppable job
By default frames are encoded with FFmpeg.wasm (palettegen + paletteuse); you can switch to a pure JavaScript encoder. Conversion shows a progress bar and a Stop button, then reports the finished GIF size with a direct download.
Video to GIF: common questions
Which video formats and browsers are supported?
The file picker accepts anything the browser labels as video/*, and drag-and-drop also accepts .mp4 and .mov. The fast path is MP4/MOV through MP4Box plus WebCodecs (Chrome/Edge class browsers). If that fails it falls back to seeking an HTML video element frame by frame, then to decoding with FFmpeg.wasm. Other containers depend on those fallbacks, so results differ by browser and codec.
Is my video uploaded anywhere?
No. The video bytes stay in the tab. On first use the tool does fetch the FFmpeg.wasm core (about 30.6 MB) or the modern-gif worker from unpkg, so you need a network connection to start; after that the conversion itself is local and cannot work fully offline.
Is there a file-size or duration limit?
There is no hard limit in the code. Memory is the real ceiling: frames are buffered as raw RGBA, roughly width × height × 4 bytes × frame count. A 600×600 clip at 250 frames is about 343 MB. The UI warns above 600 px and above 250 frames, and an allocation failed error means you should lower size, frame rate or duration.
Why is conversion slow, or why does the page stutter?
Frame grabbing, resizing and RGBA assembly run on the main thread, and the default FFmpeg core is single-threaded (it does not use SharedArrayBuffer). High resolution and high frame rates make this worse. Encoding itself runs in a worker, but the UI can still feel busy; switching to the JavaScript encoder may help on some machines.
Can I estimate or cap the GIF file size?
No. The tool reports the actual size after conversion but does not predict it beforehand. To shrink the result, trim a shorter range, lower the frame rate, downscale width/height, reduce the palette to fewer colors, or change the dithering mode.
Which output formats are available? Can I batch convert?
Only animated GIF, one file at a time. There is no MP4, WebP or APNG output, no audio, no batch queue and no multiple files in one run. The result is a single download link plus an inline preview.
Does it work on phones and tablets?
It can, but it is risky: mobile browsers have tighter memory limits and uneven WebCodecs support, so long or high-resolution clips often fail. If you must use mobile, keep clips short, output small and frame rate low; desktop Chrome or Edge is the most reliable path.

