video-to-gif

video-to-gif

将视频转换为多个具有不同质量/大小权衡的GIF变体。生成一组对比结果,让用户直观地选出最佳效果。

0Star
0Fork
更新于 2026/7/22
SKILL.md
readonly只读
name
video-to-gif
description

将视频转换为多个具有不同质量/大小权衡的GIF变体。生成一组对比结果,让用户直观地选出最佳效果。

技能:视频转GIF

将视频文件转换为多个不同参数的GIF变体,让用户直观比较并选出最佳效果。

前提条件:必须安装 FFmpeg 和 uv。gifsicle 可选(启用有损压缩变体)。


使用场景

用户想从视频片段创建GIF,但不确定合适的参数。GIF质量需要在以下方面权衡:

  • 文件大小——越小越便于分享/嵌入
  • 色彩准确度——颜色越少文件越小,但可能导致色带
  • 流畅度——FPS越高越流畅,但文件越大
  • 分辨率——宽度越大细节越清晰,但文件越大

与其猜测,不如用此技能生成多个变体,让用户决定。


默认工作流程

当用户提供视频文件时:

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

这将在 <input>_gifs/ 目录下生成使用 full 预设(18个变体)的GIF:

  • 3种FPS选项:10、15、20
  • 3种宽度:480px、640px、800px
  • 2种颜色数:128、256

输出包含一个排序对比表格,显示每个变体的文件大小、FPS、宽度和颜色数。


预设

预设 变体数 最佳用途
full ~18 通用——广泛探索参数空间
minimal ~4 快速对比——仅几个关键权衡点
lossy ~12 最小文件——包含gifsicle有损压缩级别
quality ~12 最佳画质——更高分辨率,包含拜耳抖动
# 快速对比,变体较少
uv run --python 3.12 .../video_to_gif.py input.mp4 --presets minimal

# 包含有损压缩(需要gifsicle)
uv run --python 3.12 .../video_to_gif.py input.mp4 --presets lossy

# 注重高质量
uv run --python 3.12 .../video_to_gif.py input.mp4 --presets quality

常用选项

标志 默认值 描述
-o, --output-dir <input>_gifs/ 所有GIF变体的输出目录
--start 开始时间(秒),用于裁剪源视频
--end 结束时间(秒),用于裁剪源视频
--presets full 预设配置:full, minimal, lossy, quality
--fps 预设 覆盖FPS值(例如 --fps 10 15 20
--width 预设 覆盖宽度值(例如 --width 480 640
--colors 预设 覆盖颜色数(例如 --colors 128 256
--lossy 预设 Gifsicle有损级别(例如 --lossy 0 30 80

示例

# 转换视频前10秒
uv run --python 3.12 .../video_to_gif.py demo.mp4 --end 10

# 提取特定片段
uv run --python 3.12 .../video_to_gif.py demo.mp4 --start 5 --end 15

# 自定义参数扫描
uv run --python 3.12 .../video_to_gif.py demo.mp4 --fps 12 15 --width 480 800 --colors 256

# 有损压缩对比(需要gifsicle)
uv run --python 3.12 .../video_to_gif.py demo.mp4 --lossy 0 30 60 100

如何选择

运行后,打开输出目录并比较:

  1. 从最小的文件开始——检查质量是否可接受
  2. 检查色带——如果可见,尝试256色或拜耳抖动(quality预设)
  3. 检查流畅度——如果太卡顿,提高到15或20 FPS
  4. 检查清晰度——如果文字难以辨认,提高到640或800px宽度

大多数屏幕录制的最佳平衡点通常是 640px、15fps、256色


重要说明

  • 宽度大于源视频分辨率的会自动跳过。
  • 脚本使用FFmpeg的双通道调色板生成以获得最佳GIF质量(远优于单通道)。
  • 通过gifsicle进行有损压缩可在30-60级别下将文件大小减少30-70%,视觉影响很小。
  • 对于非常长的片段,建议先用 --start/--end 裁剪——超过10秒的GIF会变得非常大。