Video to GIF Converter: Make Animated GIFs in Browser

Convert a video clip to an animated GIF in your browser using ffmpeg.wasm. Two-pass palette for better color.

First use downloads ~31 MB FFmpeg compiled to WebAssembly. Trims, crops, and re-encodes video files locally. The single-threaded build skips SharedArrayBuffer requirements so it loads on any modern browser. Cached after the first run.

Height scales automatically to preserve aspect ratio.

About Video to GIF

Upload an MP4, MOV, WebM, or MKV file, set a start and end time, choose a frame rate and output width, and get an optimized animated GIF back in seconds. A two-pass palette conversion runs entirely in your browser tab via ffmpeg.wasm, so your video never leaves your device. The palette pass captures the best 256 colors for the clip, and the render pass uses them to produce a sharper, less banded result than a single-pass conversion.

Video to GIF uses ffmpeg.wasm, the WebAssembly build of FFmpeg, to run a two-pass palette conversion locally. The first pass feeds the selected clip through a lanczos-scaled palette generator that picks the 256 colors that best represent the footage. The second pass feeds the same clip and the generated palette through the paletteuse filter, which dithers each frame against that palette. This two-pass approach produces noticeably better color accuracy and less banding compared to letting FFmpeg pick a generic palette.

GIF files can get large quickly. A 10-second clip at 24 FPS and 640 px wide can easily exceed 20 MB because GIF has no inter-frame compression for motion areas. The FPS and width controls are the main levers for keeping file size manageable. Dropping from 24 to 15 FPS roughly cuts file size by 37%, and halving the width roughly halves the file size. For sharing on chat apps or social platforms, 15 FPS at 320 or 480 px is a good starting point.

The tool reads the video duration from the browser's video element metadata after the file loads, so the start and end time fields always reflect the real clip length. The GIF preview renders inline after conversion, and the download uses the original filename with a .gif extension. Object URLs for both the source video and the result GIF are revoked when a new file is loaded and when the component unmounts.

How to use the Video to GIF
  1. 1

    Upload a video

    Pick an MP4, MOV, WebM, or MKV file. A preview plays inline and the total duration appears below the filename.

  2. 2

    Set timing and quality options

    Enter a start and end time in seconds, then choose frame rate and output width. Lower values produce smaller GIFs.

  3. 3

    Convert and download

    Click Convert to GIF. FFmpeg.wasm runs two passes locally, then shows the GIF inline with a download link.

Common use cases

Turn a screen recording into a GIF for docs

Clip the relevant seconds from a Loom or QuickTime capture and convert to GIF for embedding in a README or wiki.

Extract a reaction clip from a longer video

Pick a 2-3 second moment from a video, set a low FPS, and get a small GIF suitable for messaging apps.

Create a looping product demo

Convert a short UI walkthrough to GIF for use in a landing page or tweet where autoplay video is not supported.

Share a highlight from a tutorial

Trim a key step from a longer tutorial video, convert to GIF at medium width, and share it in a Slack channel or email.

Frequently asked questions
Is my video uploaded to a server?

No. The file is read into ffmpeg.wasm's in-memory filesystem and processed by WebAssembly running in your browser tab. Nothing is sent to a server.

Why do GIFs get so large?

GIF stores each frame as a full image with no motion compensation between frames. A 10-second clip at 15 FPS is 150 frames, each taking space proportional to width times height. Keep clips short and use a lower FPS and width to control size.

What do FPS and width settings do to quality?

Higher FPS gives smoother motion but increases file size proportionally. A wider output is sharper but also larger. For chat and social use, 15 FPS at 320 or 480 px is a reasonable balance.

Why does conversion take a while?

The tool runs two FFmpeg passes inside WebAssembly, without hardware acceleration. Load time on the first run includes downloading the ~30 MB ffmpeg.wasm core, which is cached for later visits.

What input formats are supported?

MP4, MOV, WebM, and MKV are the best-tested inputs. FFmpeg can read many formats, but support depends on which decoders are compiled into the WASM core build.

converterweb