Video To Gif

by zc277584121959680e17acfNo licenseListed Oct 8, 2026Updated Oct 8, 2026Repository updated 5 weeks ago

Convert a video to multiple GIF variants with different quality/size tradeoffs. Generates a comparison set so the user can visually pick the best result.

Includes scriptsDesign & Creative
AI-generated overview

Converts a video into multiple GIF variants with different quality and size settings for visual comparison.

What it does
Runs a Python script that uses FFmpeg to produce a set of GIF variants from a video file, varying FPS, width, color count and optional gifsicle lossy compression. It writes the GIFs to an output directory and prints a sorted comparison table of file size, FPS, width and colors. Presets (full, minimal, lossy, quality) and flags allow trimming and custom parameter sweeps.
When to use it
Use when a user wants a GIF from a video clip but is unsure which parameters give the best tradeoff between file size, color accuracy, smoothness and resolution. It suits screen recordings and short clips where several variants should be compared side by side.
Requirements
Requires FFmpeg and uv; gifsicle is optional for lossy compression variants. Ships an executable Python script (scripts/video_to_gif.py) run via uv with Python 3.12. No credentials or network access are described.

Skill: Video to GIF

Convert a video file into multiple GIF variants with different parameters, so the user can visually compare and pick the best one.

Prerequisite: FFmpeg and uv must be installed. gifsicle is optional (enables lossy compression variants).


When to Use

The user wants to create a GIF from a video clip but isn't sure about the right parameters. GIF quality involves tradeoffs between:

  • File size — smaller is better for sharing/embedding
  • Color accuracy — fewer colors = smaller but may cause banding
  • Smoothness — higher FPS = smoother but larger
  • Resolution — wider = sharper detail but larger

Rather than guessing, this skill generates multiple variants and lets the user decide.


Default Workflow

When the user provides a video file:

bash
uv run --python 3.12 /path/to/skills/video-to-gif/scripts/video_to_gif.py <input.mp4>

This generates GIFs in <input>_gifs/ directory with the full preset (18 variants):

  • 3 FPS options: 10, 15, 20
  • 3 widths: 480px, 640px, 800px
  • 2 color counts: 128, 256

Output includes a sorted comparison table showing file size, FPS, width, and colors for each variant.


Presets

PresetVariantsBest For
full~18General use — broad exploration of the parameter space
minimal~4Quick comparison — just a few key tradeoff points
lossy~12Smallest files — includes gifsicle lossy compression levels
quality~12Best visuals — higher res, includes bayer dithering
bash
# Quick comparison with fewer variantsuv run --python 3.12 .../video_to_gif.py input.mp4 --presets minimal
# Include lossy compression (requires gifsicle)uv run --python 3.12 .../video_to_gif.py input.mp4 --presets lossy
# Higher quality focusuv run --python 3.12 .../video_to_gif.py input.mp4 --presets quality

Common Options

FlagDefaultDescription
-o, --output-dir<input>_gifs/Output directory for all GIF variants
--startnoneStart time in seconds (trim source)
--endnoneEnd time in seconds (trim source)
--presetsfullPreset config: full, minimal, lossy, quality
--fpspresetOverride FPS values (e.g., --fps 10 15 20)
--widthpresetOverride width values (e.g., --width 480 640)
--colorspresetOverride color counts (e.g., --colors 128 256)
--lossypresetGifsicle lossy levels (e.g., --lossy 0 30 80)

Examples

bash
# Convert first 10 seconds of a videouv run --python 3.12 .../video_to_gif.py demo.mp4 --end 10
# Extract a specific segmentuv run --python 3.12 .../video_to_gif.py demo.mp4 --start 5 --end 15
# Custom parameter sweepuv run --python 3.12 .../video_to_gif.py demo.mp4 --fps 12 15 --width 480 800 --colors 256
# Lossy compression comparison (needs gifsicle)uv run --python 3.12 .../video_to_gif.py demo.mp4 --lossy 0 30 60 100

How to Choose

After running, open the output directory and compare:

  1. Start with the smallest files — check if quality is acceptable
  2. Look for color banding — if visible, try 256 colors or bayer dithering (quality preset)
  3. Check smoothness — if too choppy, go up to 15 or 20 FPS
  4. Check clarity — if text is unreadable, go up to 640 or 800px width

The sweet spot for most screen recordings is usually around 640px, 15fps, 256 colors.


Important Notes

  • Widths larger than the source video resolution are automatically skipped.
  • The script uses FFmpeg's two-pass palette generation for optimal GIF quality (much better than single-pass).
  • Lossy compression via gifsicle can reduce file size by 30-70% with minimal visual impact at level 30-60.
  • For very long clips, consider trimming with --start/--end first — GIFs over 10 seconds can get very large.

Source and attribution

Source:zc277584121/marketing-skillsinskills/video-to-gifat commit959680e

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal