在线视频转GIF工具

将视频片段转换为动画GIF。自定义开始时间、时长、帧率和宽度。所有处理都在您的浏览器中进行,文件不会上传到服务器。

您的文件永不离开您的设备

将视频拖放到此处

或点击选择视频文件

视频转 GIF 转换究竟做了什么

把视频转为 GIF 涉及三种同步变换:帧提取(视频的连续时间线以固定速率采样,通常 10 至 24 fps),调色板量化(每帧从 1600 万种颜色减少到选定调色板中最多 256 种,因为 GIF 每帧只能存 256 色),以及 LZW 压缩(用 GIF 自 1987 年起就使用的同一无损算法压缩索引调色板帧)。结果是一个包含所有帧、调色板和时序信息的单一文件,可在任何支持 GIF 的设备上播放(这基本上是过去 30 年内制造的每个设备)。

调色板步骤是质量得失之所在。朴素的单调色板方法挑选 256 种颜色来近似整个剪辑,这对灰度内容有效,但在色彩丰富的素材上失败(肤色出现色带,渐变出现色阶)。本工具使用的两遍调色板方法先运行 FFmpeg 的 palettegen 滤镜分析每一帧并构建优化的 256 色调色板,然后运行 paletteuse 加抖动把每帧每个像素映射到最近的调色板颜色。结果是在相同文件大小下质量显著更好,尤其是在面孔、夕阳和高色彩内容上。

GIF 压缩效率比起现代视频差很多。5 秒的 480p 短片在相同尺寸下作为 MP4(H.264)可能 500 KB,但作为 GIF 是 8 至 15 MB。这是格式的基本问题,不是编码器:1987 年的 LZW 无法与 H.264 或 VP9 竞争。要让 GIF 变小,有三个杠杆:降低帧率(10 fps 对比 24 fps 大约减半大小)、缩小尺寸(480px 宽对比 800px 宽超过 2 倍小)、缩短时长(5 秒对比 10 秒正好一半)。三者都在本工具中作为控件暴露。

本工具的工作原理

与其他视频工具相同的 ffmpeg.wasm 引擎:通过 Emscripten 编译为 WebAssembly 的 FFmpeg,约 30 MB 浏览器侧二进制,通过 SharedArrayBuffer 多线程完全在标签内运行。当您拖入视频时,文件通过流式读取器读入 WebAssembly 虚拟文件系统。

两遍转换作为两次独立的 FFmpeg 调用运行。第一遍:-i input.mp4 -ss 0 -t 5 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png。这裁剪到所选范围,以目标帧率采样,用 Lanczos 滤波缩放到目标宽度,并生成优化的调色板。第二遍:-i input.mp4 -i palette.png -ss 0 -t 5 -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=bayer:bayer_scale=5" output.gif。这应用相同的裁剪/fps/缩放然后用 Bayer 抖动把每帧的像素映射到调色板以获得更平滑的渐变。

Bayer 抖动模式是一个确定性的 8x8 有序抖动矩阵,把量化误差分布到邻近像素上,让色带不那么明显,代价是淡淡的交叉纹理。其他抖动模式(Floyd-Steinberg、Sierra)产生更平滑的结果,但代价是文件大小略大。进度消息从 FFmpeg 的 stderr 流出并实时更新屏幕上的进度条。生成的 GIF 在内存中构建,并通过浏览器的 blob API 提供下载。

GIF 格式简史

如何将视频转换为GIF

  1. 加载视频拖放或点击选择视频文件。
  2. 设置范围和质量选择开始时间、时长、FPS和宽度,以平衡文件大小和质量。
  3. 转换并下载生成GIF并保存到您的设备。

为什么要将视频转换为GIF

GIF便于在文档、社交媒体、支持工单和通讯应用中分享,它们自动播放和循环播放,无需音频即可传达信息。它们非常适合教程、演示和趣味动画,并且几乎在所有平台上都能运行。

主要功能

真实世界的 GIF 转换工作流

常见陷阱及其含义

隐私:您的视频从不离开您的设备

云视频转 GIF 服务(Giphy 的上传转换器、ezgif.com、Convertio 等数十个)都上传您的完整视频,在他们的硬件上运行 FFmpeg,并发回生成的 GIF。一段 200 MB 的手机视频通过他们的基础设施意味着 200 MB 上传加 5 至 30 MB 下载。视频内容常包含面孔、地点、对话音频(GIF 会丢弃但运营商仍持有)、私人界面的屏幕录制。大多数运营商发布隐私政策,承诺在 1 至 24 小时内删除上传并在传输中加密,大型运营商持有 ISO/IEC 27001 认证。他们有强烈的商业动机来履行这些政策。但「一小时内删除」不等于「从未被看见」。在那个窗口里文件就在运营商基础设施上,对任何拥有正确权限的进程或人员可访问,并按运营商保留政策出现在日志和备份中。

本工具从不上传任何内容。完整流水线(文件选择、通过浏览器原生读取器解码、通过 ffmpeg.wasm WebAssembly 进行调色板生成和 GIF 编码、通过浏览器 blob API 下载)在您的浏览器标签内运行。没有上传,没有携带视频数据的网络请求,没有日志条目。您可以在转换前打开浏览器开发工具的「网络」标签来验证:没有任何带视频内容的请求离开。只有页面本身的初始加载和 ffmpeg.wasm 约 30 MB 的一次性下载(后续访问缓存)会触及网络。页面加载后把浏览器切到飞行模式,转换器仍能在本地文件上工作。

何时另一个工具才是正确选择

常见问题

最大视频文件大小是多少?

由于处理在浏览器内存中进行,这取决于您设备的性能,但较短的片段(少于10秒)转换效果最好。

支持哪些视频格式?

我们支持浏览器支持的所有主要视频格式,包括MP4、WebM、MOV和AVI。

生成的GIF会包含声音吗?

不会,GIF根据其规范不支持音频,因此转换后的GIF将是静音的。

其他常见问题

我应该使用什么帧率?

10 至 15 fps 是大多数 GIF 的甜点:流畅到可读为运动,小到保持文件大小可管理。24 fps 给出更流畅的运动,但与 12 fps 相比大约把文件大小翻倍。5 fps 适合慢内容(脱口秀、慢演示)并最小化大小。人眼在 10 fps 及以上感知运动;以下看起来像幻灯片。

为什么我的 GIF 与视频相比看起来有色带?

GIF 每帧只存 256 色,视频中有 1600 万色。平滑渐变(天空、肤色、夕阳)被色带成可见台阶。本工具使用的两遍调色板方法相比朴素的单遍转换显著减少了这一点,但无法完全消除色带。要获得最佳结果,对比强烈、平滑渐变少的源内容转换干净;富含平滑渐变的内容即使在最佳调色板下也保持不完美。

我应该用 MP4 替代 GIF 吗?

通常是。带 autoplay+loop+muted 的 MP4 在文件大小小 5 至 10 倍的同时给出相同的循环体验,并具有完整的 1600 万色保真度。问题:并非每个平台都像支持 GIF 那样支持内联 MP4 循环。Twitter、Reddit、Discord、GitHub Issues 和大多数现代网站支持;某些遗留电子邮件客户端、聊天应用和论坛只支持 GIF。如果您的目标受众使用现代平台,请选择 MP4;为了最大兼容性,请选择 GIF。

为什么第二遍比第一遍慢?

第一遍(palettegen)只分析颜色统计;它不写最终输出,只构建 256 色调色板。第二遍(paletteuse)实际把每帧每个像素映射到最近的调色板颜色,应用抖动,并编码 GIF 流。像素映射步骤是花费最多 CPU 时间的部分,尤其在启用抖动时。对 5 秒 480p 10fps GIF,期望根据您的 CPU 总处理时间 5 至 30 秒。

有桌面或命令行的等效工具吗?

有。FFmpeg CLI 是正典工具,使用相同的两遍方法:ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png 然后 ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif。Gifski 是一个基于 Rust 的工具,使用每帧调色板产生比 FFmpeg 更高质量的 GIF(文件更大,质量更好)。Photoshop 的 Save for Web (Legacy) 用于 GIF 是图形设计师的经典 GUI 工作流。

GIF 支持透明度吗?

支持,但只是二进制(1 位)透明度:每个像素要么完全不透明要么完全透明,没有部分 alpha。这就是为什么边缘平滑的 GIF 标志和图标在不同背景下看起来「锯齿状」。对于平滑 alpha 混合动画,请使用 APNG(动画 PNG)或动画 WebP,两者都支持每像素 8 位 alpha。本工具的输出默认不保留源透明度;如果您的视频有透明区域,它们会用选定的背景颜色填充。

相关工具

视频修剪器

视频压缩

视频转换器

图像转换器