Video to GIF

Set width, frame rate and palette size; frames are processed sequentially.

Choose a section of the video, a width (320, 480 or 640 px, or the original), a frame rate (10, 15 or 24 fps) and, if you like, speed, loop, reverse, a crop ratio or a size to fit under, and Nerulio decodes those frames and writes a GIF. GIF holds at most 256 colours per frame and stores each frame's delay in hundredths of a second, so size and smoothness are a trade: width × height × frame count decides the size. The default is 480 px at 15 fps, each frame gets its own palette, and dithering is optional.

Drop video files hereProcess many files at once
No upload · processed on this device

What a GIF can store, and why it gets big

A GIF frame is a grid of palette indexes, one byte per pixel before LZW compression, with a colour table of at most 256 entries; the GIF89a specification allows a local table for every image. Nerulio builds a palette for each frame from that frame's own colours, so a new shot does not have to share colours with the previous one.

Video has far more than 256 colours, so smooth gradients (sky, skin, shadows) turn into bands. Dithering at 50 % or 100 % spreads the rounding error with Floyd–Steinberg diffusion, so bands become fine grain instead. Grain is noise to the LZW compressor, so dithered GIFs are larger. Fewer colours (128, 64, 32) shrink the file and make banding worse.

GIF has no sound and none of the motion compression a video codec has, so its size grows with every pixel of every frame. Delays are stored in 1/100 s: 15 fps (66.7 ms) cannot be stored exactly, so Nerulio alternates 70 and 60 ms and keeps the average right. Speed changes which moments are sampled, not the delay: 2× makes the GIF half as long at the same smoothness.

Palette (colour table)
Up to 256 colours a frame can use; each pixel stores an index into it.
Dithering
Mixing neighbouring palette colours in a pattern to imitate colours the palette lacks.
Frame delay
How long a frame stays on screen, stored in hundredths of a second.

Example: 6 seconds of 1920 × 1080 video at the defaults

The default section for a GIF is the first 6 seconds:

Frame size       480 × 270 px = 129,600 pixels
Frames           6 s × 15 fps = 90 frames
Delays           70, 60, 70, 70, 60, 70 … ms   (3 frames = 200 ms)
Index data       129,600 × 90 = 11.7 million bytes before LZW compression
At 24 fps        144 frames, delays 40, 40, 50 … ms, 18.7 million bytes of index data
At 640 px        640 × 360 × 90 = 20.7 million bytes of index data

LZW then shrinks the index data by an amount that depends on the picture, which is why the size estimate encodes three real frames of your clip instead of guessing. At speed 2× the same 6 seconds become 45 frames and a 3-second GIF.

Settings and their effect on size

SettingChoicesEffect on size
Width320, 480, 640 px or originalPixels per frame grow with the square of the width
Frame rate10, 15, 24 fpsFrame count grows in proportion
Colours (Advanced)256, 128, 64, 32Fewer colours compress better, with more banding
Dithering (Advanced)Off, 50 %, 100 %Smoother gradients, larger file
Speed0.5×, 1×, 2×2× halves the frames and the length
CropNone, 1:1, 4:5, 16:9, centredFewer pixels per frame
Fit under (MB)Any valueUp to four measured passes

Check the result

  • Before running, the summary shows the frame count and a size estimate measured from three encoded frames.
  • After running, the result box shows width × height, frame count and size and, with a target, whether it was met.
  • Open the GIF in a browser and in the app you will post it to, and check that it loops (or stops after one play if you turned Loop off).

Troubleshooting

SymptomLikely causeHow to checkFix
Sky and skin show bands256 colours per frame are not enough for smooth gradientsLook at the widest gradient in a frameTurn dithering on at 50 % or 100 %, and keep 256 colours
The GIF is far too largeWidth and frame count multiply: 640 px at 24 fps is 2.8 times the pixels of 480 px at 15 fpsCompare the estimate before runningLower the width or fps, shorten the section, crop, or set Fit under (MB)
A size target was met but the GIF looks worse than setTo fit, the passes first cut colours to 64 (then 32), then width and fps togetherThe result box shows the final width and frame countRaise the target, or shorten the section instead
A long clip is slow, or Reverse stops with a memory messageEvery frame is decoded, quantised and compressed; Reverse also keeps all frames until the end, capped at 64 MB of index dataProgress shows frame n of the totalShorten the section or lower width or fps; turn Reverse off for long clips
A phone video stops with a decoder errorThe browser cannot decode the video codec, often HEVCSee the MOV guide for reading the codecUse a browser that decodes it, or record in H.264

Other ways to do it

OptionWhen it is the better choice
FFmpeg with the palettegen and paletteuse filtersOne palette optimised for the whole clip and five dithering methods (Sierra-2-4A by default), scripted; command line only.
A short MP4 or WebM instead of a GIFWhere the platform accepts video: far smaller at the same quality, and with sound. See video compression.
Sprite sheet to GIFFor pixel-art animation frames rather than filmed video.

What this page does not cover

  • No transparent GIFs: every frame is opaque.
  • No text or sticker overlays, and the palette is built per frame, not shared across the clip.

Versions and sources

Checked in tests/media-browser.mjs in Chromium 153 and Firefox 155: 2 s at 640 px and 12 fps gave 24 frames 640 px wide; a 0.25 MB target was met by measured passes; a reversed, 2× speed, 1:1-cropped GIF kept its planned 5 frames and a square size; and the three-frame estimate was within 25 % of the real size. Frames are decoded with Mediabunny 1.58.1 and WebCodecs and encoded with gifenc 1.0.3. The GIF limits are from the GIF89a specification.

Official documentation used

Video to GIF

Set width, frame rate and palette size; frames are processed sequentially.

How it works

  1. Open a video and select a short range
  2. Set width, frame rate and palette size
  3. Export a GIF and check motion, colors and file size

Supported formats

MP4 / WebM / MOV → GIF — Input decoding and output encoding depend on browser support.

What this tool does

Decode one frame at a time; choose GIF width, FPS, palette size and dithering.

Implementation and verified quality

advanced · WebCodecs sequential frames / gifenc adaptive palettes / measured size targets. Quality qualification is in progress. Pro/Flagship quality has not been established.

Before you export

Fast cut shrinks to inner keyframes. Precise mode re-encodes; codec availability varies. Temporary outputs use local browser storage when available. Compatibility recording retains its short-clip limits.

Frequently asked questions

What determines the supported size?

Actual device memory, storage and codec support. Tested examples are evidence, not a guarantee for every file.

Are my files uploaded?

This tool processes the files you open on your device without uploading them. Images you explicitly attach to community posts are uploaded separately. Optional engines and models are downloaded from third parties; those requests expose connection information such as your IP address.

Will my work be saved automatically?

No. Images and editing state stay in this tab; media output can use local temporary storage. Changing language preserves your work; reloading, closing the tab, or following a link to another page can clear it.