Convert MOV to GIF — Free Online Tool

Convert MOV files to animated GIF directly in your browser, encoding each video frame into GIF's palette-based 256-color format. Ideal for creating looping web animations from QuickTime footage without installing any software.

FFmpeg Command

Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg

Free — no uploads, no signups. Your files never leave your browser.

Estimated output:

Conversion Complete!

Download

How It Works

Converting MOV to GIF is a full re-encoding process — unlike container swaps, this conversion fundamentally changes how color and motion are stored. The MOV file typically contains H.264 or H.265 video with millions of possible colors, but GIF is limited to a palette of 256 colors per frame. FFmpeg analyzes each frame and maps it to the closest available colors using dithering, then encodes the result as a GIF bitstream. Audio is discarded entirely, as the GIF format has no audio support. The -loop 0 flag instructs the GIF to repeat indefinitely, which is the standard behavior for animated GIFs on the web. Because GIF uses LZW lossless compression on its already color-reduced frames, the output file can be surprisingly large for longer clips — GIF trades color fidelity for universal compatibility, not file size.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg tool. In this browser-based tool, FFmpeg runs locally via WebAssembly (FFmpeg.wasm) — your MOV file never leaves your device.
-i input.mov Specifies the input QuickTime MOV file. FFmpeg reads the container and detects the enclosed video stream (typically H.264 or H.265) and any audio streams, all of which will be processed for the GIF conversion.
-c:v gif Sets the video encoder to GIF, triggering a full re-encode of the MOV video stream into GIF's palette-based, LZW-compressed frame format. This is not a remux — every frame is decoded from the source codec and re-encoded into GIF.
-loop 0 Embeds a Netscape Application Block extension in the GIF that instructs players to loop the animation infinitely. A value of 0 means loop forever; any positive integer would limit the number of playback repetitions. This flag is what makes the output a continuously looping animated GIF rather than a single-play animation.
output.gif Defines the output filename and format. The .gif extension confirms to FFmpeg that the output container is GIF, which has no audio track support — any audio present in the source MOV is automatically discarded.

Common Use Cases

  • Turn a short QuickTime screen recording into a looping GIF to embed in a README, documentation page, or GitHub issue to demonstrate a UI interaction or bug
  • Convert a brief MOV clip from an iPhone or Mac camera export into an animated GIF for sharing in Slack, Discord, or messaging apps that auto-play GIFs inline
  • Extract a reaction or highlight moment from a MOV video file to create a shareable looping GIF for social media platforms like Tumblr or Reddit
  • Convert a short motion graphics or logo animation exported from Final Cut Pro as MOV into a GIF for use in email signatures or marketing materials
  • Turn a low-frame-rate MOV timelapse or cinemagraph into a GIF optimized for web embedding where video formats may not be supported

Frequently Asked Questions

GIF is limited to exactly 256 colors per frame, so the rich color space of your MOV's H.264 or H.265 video gets heavily quantized during conversion. FFmpeg builds a color palette and uses dithering to approximate the original colors, but gradients, skin tones, and complex backgrounds are particularly prone to banding artifacts. For better color reproduction, consider trimming your MOV to only the essential frames before converting, or reducing the resolution so each frame contains fewer distinct colors for the palette to represent.
This is a common and counterintuitive result. MOV containers with H.264 or H.265 video use highly efficient temporal compression — they only store the differences between frames. GIF stores each frame as a full image (or a diff rectangle), compressed only with LZW, which is far less efficient for video content. A 10-second MOV at 30fps might store 300 frames with modern inter-frame compression, while the GIF must encode all 300 frames individually. Reducing the frame rate (e.g., to 10–15fps) and scaling down the resolution are the most effective ways to control GIF file size.
GIF does support binary transparency (a single color in the palette can be designated as transparent), so if your MOV contains an alpha channel — for example, a ProRes 4444 or PNG-encoded MOV from a motion graphics export — FFmpeg can map that transparency to GIF's single transparent color index. However, GIF does not support partial or semi-transparency; pixels are either fully transparent or fully opaque. Any semi-transparent edges from your MOV will be rendered as either fully transparent or the nearest opaque color, which may cause jagged edges.
No — the GIF format has no audio support whatsoever, and FFmpeg automatically drops all audio streams during this conversion. This is not a limitation of the tool but of the GIF specification itself, which was designed purely for images and simple animations. If you need a looping animation with audio, consider converting your MOV to WebM or MP4 with the loop attribute set in HTML instead.
The standard ffmpeg -i input.mov -c:v gif -loop 0 output.gif command uses a single global palette, which limits quality. For significantly better color accuracy, use a two-pass palettegen approach on the command line: first run ffmpeg -i input.mov -vf palettegen palette.png to generate an optimized palette, then run ffmpeg -i input.mov -i palette.png -filter_complex paletteuse output.gif. This builds a palette tuned specifically to the colors in your MOV clip rather than using a generic 256-color palette, resulting in much less dithering and banding.
Yes — add -ss and -t flags to the FFmpeg command to trim your output. For example: ffmpeg -ss 00:00:05 -i input.mov -t 3 -c:v gif -loop 0 output.gif will start 5 seconds into the MOV and capture only 3 seconds of footage. Placing -ss before -i uses fast stream seeking, while placing it after -i decodes from the beginning for frame-accurate cuts. For GIF conversion, keeping clips under 5–10 seconds is strongly recommended to avoid excessively large output files.

Technical Notes

GIF uses the LZW compression algorithm on palette-indexed frames, meaning every pixel is assigned one of up to 256 color entries per frame. When converting from MOV — which commonly carries 8-bit or 10-bit H.264/H.265 video with millions of representable colors — FFmpeg performs color quantization and dithering to fit each frame into that 256-color constraint. The default dithering algorithm (Floyd-Steinberg) spreads quantization error across neighboring pixels to reduce visible banding, but it introduces a characteristic 'noise' pattern that is the hallmark of GIF compression. Frame rate is inherited from the source MOV unless explicitly overridden; a 30fps MOV will produce a 30fps GIF, which significantly inflates file size. GIF also stores frame delays in centiseconds (1/100th of a second), so frame rates that don't divide evenly into 100 (like 29.97fps) may result in slightly uneven playback timing. Metadata from the MOV container — including chapter markers, GPS data, creation timestamps, and multiple audio tracks — is entirely discarded, as GIF has no metadata specification beyond basic loop count and frame delay. The -loop 0 flag sets infinite looping per the Netscape Application Block extension, which is the standard expected by browsers and most GIF-compatible software.

Related Tools