Media

Video to GIF

Turn a short part of a video into a GIF or animated WebP without uploading it. Pick the range, then set the frame rate, width, and quality; GIF uses a two-pass palette, while animated WebP is often much smaller.

  • Your file stays on your device; the engine downloads only after you choose it
  • A two-pass palette for GIF, with animated WebP as an alternative

Drop a video file here

The file stays on your machine — it is never uploaded

Reads MP4, MOV, WebM, MKV, AVI, M4V, and most other formats FFmpeg understands.

No video selected yet

Choose a video file to begin. The conversion engine is only downloaded once you do.

Output

Overview

A good GIF starts with a deliberate, short clip. These controls help you set that range and manage the final file size before encoding.

  1. 01

    Trim before anything is encoded

    Scrub the video, drag the two handles to the seconds you want, and press play to check the selection. Only the selected range is rendered, though seeking can read a short stretch from the preceding keyframe.

  2. 02

    Two-pass GIF palette

    The GIF made here uses one clip-specific palette of up to 256 colours, and those choices make or break the result. The clip is analysed first to build that palette, then encoded against it.

  3. 03

    Animated WebP as an alternative

    Animated WebP is often much smaller than the same GIF and is not limited to a 256-colour palette. The exact saving depends on the clip and settings; choose it when the destination supports it.

  4. 04

    The controls that actually change the file size

    Frame rate, width, colour count, and dithering, each on its own control, with the resulting frame count shown live. No mystery "quality" slider standing in for four separate decisions.

  5. 05

    Reverse, boomerang, and speed

    Play the clip backwards, bounce it forwards then backwards, or run it at half to double speed. Speed is applied before the frame rate is resampled, so the output is built from the sped-up timeline rather than by throwing frames away from the original.

  6. 06

    Local processing

    FFmpeg is compiled to WebAssembly and runs in the tab. Nothing is uploaded, there is no server-imposed size cap, no queue, no watermark, and no account.

How to use

From a video file to a finished animation in four steps.

  1. 01

    Drop a video onto the page, or use the file picker. The conversion engine starts downloading at this point — it is about 31 MB and only happens once.

  2. 02

    Drag the two trim handles to the part you want, then press Play selection to confirm you caught it. A long video opens with only the first ten seconds selected, so check the range even if you meant to keep everything. Shorter is almost always better.

  3. 03

    Choose GIF or animated WebP and set the frame rate and width. The line under them shows how many frames that adds up to, which is what the final size follows.

  4. 04

    Press Create. GIFs run a palette pass and then an encode pass; when it finishes, check the looping preview and download.

Details

Details that decide whether the result is usable.

  • Trim with a two-handle range and a playhead, with in-page playback of the selection
  • GIF output built from a per-clip palette in two passes
  • Animated WebP output with a quality slider from 10 to 100
  • Frame rates from 8 to 24 fps
  • Width presets from 240 to 800 px, or keep the source width
  • Palette size of 256, 128, 64, or 32 colours
  • Bayer, Floyd–Steinberg, or no dithering
  • Playback speed from 0.5× to 2×, plus reverse and boomerang
  • Loop forever or play once
  • Live frame count and output dimensions before you commit to a render
  • Real byte-level progress while the engine downloads, not a fake animated bar
  • Renders can be cancelled while they run

Use cases

Where a GIF is the right answer, and where doing it locally matters.

  1. Bug reports and pull requests

    A three-second GIF of the broken behaviour saves a paragraph of description and a round of "what exactly did you click?". GitHub, GitLab, Jira, and Linear all animate GIFs inline in a comment, so it plays where the discussion is.

  2. Screen recordings you should not upload

    A capture of an internal dashboard usually contains customer names, ticket numbers, or staging URLs. Converting it in the tab means it is never sent to a converter site whose retention policy you have not read.

  3. Product and release notes

    A short loop showing a new feature in motion communicates more than a screenshot and needs no player, no controls, and no hosting. Trim to the single interaction that matters and it stays small enough to inline.

  4. Documentation and READMEs

    A GIF drops into Markdown as an ordinary image and animates on npm, PyPI, and the major Git hosts. Keep the width at 640 or below so it does not blow out the page width on a phone.

  5. Chat and social posts

    Slack, Discord, and Teams all play GIFs inline, and most of them cap the upload well below what an untrimmed clip produces. Trimming and dropping to 12–15 fps is usually enough to clear the limit.

  6. Emails and slide decks

    An embedded video needs a player the recipient may not have. A GIF is a useful fallback where video is not accepted, but some email clients show only a still frame, so make that first frame meaningful on its own.

See also

The same engine covers the other half of a video file. When it is the sound you need rather than the picture, use Audio Converter. When a single frame would say as much as the loop, a still is far lighter — shrink one with Image Compressor. And when the animation is really a piece of interface rather than footage, an optimised SVG beats any GIF at it; clean one up with SVG Optimizer.

Best practices

Choices that keep the animation readable and the file small.

  • Trim first and trim hard — length costs more than any other setting, because every extra second is a whole extra set of frames
  • Start at 12–15 fps; below 10 the motion starts to stutter, above 20 you are usually paying for smoothness nobody notices
  • Match the width to where it will be shown: 480 px is enough for a chat message, 640 px for a README, and going wider mostly buys file size
  • For screen recordings, drop the palette to 64 colours before you touch anything else — flat interface colours barely use 256, and the saving is large
  • Leave dithering on Bayer for filmed content, switch it off entirely for flat interface captures, and reach for Floyd–Steinberg only when a gradient or a photo visibly bands
  • Choose animated WebP when the destination accepts it, and keep GIF for the places that still insist on it
  • Avoid reverse and boomerang on long selections: they hold every frame in memory at once, unlike a normal forward render

Limitations

What this tool deliberately does not do, and where it will struggle.

  • The engine is about 31 MB on first use. It is cached afterwards, but the first render in a fresh browser profile carries that download.
  • WebAssembly is 32-bit and the whole source file is held in memory while it is read, so videos beyond roughly a quarter of a gigabyte become unreliable.
  • Mobile browsers give a tab far less memory than a desktop one and will fail earlier, especially on reverse and boomerang.
  • Rendering is single-threaded here. That is deliberate: multi-threading requires cross-origin isolation, which would break other parts of the page.
  • This trims and converts; it does not edit. Cropping the frame, adding captions, drawing arrows, and joining clips are all outside its scope.
  • GIF has no sound, and animated WebP as produced here has none either. Audio is discarded — use the audio converter if that is the part you need.
  • Some AV1 videos may not decode in the current browser engine. If reading fails, convert the source to H.264, VP9, or WebM before using this tool.
  • Some containers that FFmpeg reads fine, such as MKV with HEVC, will not play in the browser preview. Trimming still works from the timecodes; only the moving preview is missing.
  • DRM-protected files cannot be read, in this tool or any other that does not break the protection.

FAQ

Questions that come up when making a GIF from a video.

How do I convert an MP4 to a GIF?

Drop the MP4 onto the page, drag the two trim handles to the section you want, and press Create. The defaults — 15 fps at 480 px wide — suit most screen recordings. The result appears on the right, looping exactly as the saved file will, with its size next to it.

Is my video uploaded anywhere?

No. The engine is FFmpeg compiled to WebAssembly and it runs inside your browser tab. The file is read from disk into the tab's memory and the result is written back out as a download. Nothing about the file crosses the network, which you can confirm by watching the network panel while a render runs.

Why is my GIF so large, and how do I make it smaller?

GIF compresses each frame separately and cannot throw away colour the way a video codec does, so size follows frame count and frame area almost linearly. In order of effect: shorten the clip, lower the frame rate, reduce the width, then cut the palette to 64 colours. Halving the width quarters the pixels and usually does more than any palette change.

What frame rate and width should I use?

12–15 fps and 480 px wide is a good starting point for a screen recording, and 640 px for something going into a README. Push to 20–24 fps only for fast motion such as a cursor flick or a scroll, and drop to 8–10 fps for a slow interface walkthrough where the file size matters more than smoothness.

Should I choose GIF or animated WebP?

Animated WebP is often much smaller than the same GIF and has better colour and transparency capabilities, although the final size depends on the clip and settings. Choose WebP for a modern browser destination. Choose GIF when a destination accepts only GIF, the platform is old or unknown, or email animation is uncertain; make its first frame meaningful either way.

Why does my GIF look grainy or banded?

GIF allows 256 colours per frame, so a gradient or a photograph has to be approximated. This tool builds a palette from your specific clip rather than using a generic one, which removes most of the problem. If banding remains, raise the palette back to 256 colours and switch dithering to Floyd–Steinberg; if it looks speckled instead, you likely want no dithering at all, which is common for flat interface captures.

How long a clip can I convert?

There is no fixed limit, but the tool warns past 30 seconds because GIF size grows with every frame. Beyond about 450 frames — say 30 seconds at 15 fps — you are usually better off with WebP, or with a real video file. Reverse and boomerang are the tightest constraint of all, since they hold every frame in memory before writing anything.

Why does the first render take so long to start?

The conversion engine is roughly 31 MB and is downloaded the first time you choose a file. It is cached with a long expiry afterwards, so later visits and later renders start immediately. The download is deliberately deferred until you actually pick a file, so simply reading this page costs you nothing.

Can I crop the frame or add a caption?

Not here. This tool trims in time, not in space, and it adds nothing to the picture. Cropping and captioning are editing decisions that need their own preview and undo, and bolting a weak version of both onto a converter tends to produce a tool that does neither well.

Can I use this on my phone?

Short clips usually work. Long ones often do not — mobile browsers allocate a tab far less memory than desktop ones, and the tab is killed when that runs out. Reverse and boomerang are the first things to fail. For anything beyond a few seconds, a desktop browser is the safer choice.

Related tools

More local, browser-only tools for working with media and images.