视频工具 · 转 GIF

GIF 转视频

GIF→MP4 减小体积

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 65 次使用
本地处理 · 文件永不上传
当前浏览器不支持 ImageDecoder API,无法逐帧解码 GIF。
请升级到较新的 Chrome / Edge(94+)或 Firefox 等支持 WebCodecs / ImageDecoder 的浏览器后重试。 原 GIF 仍可在左侧预览播放。
点击 / 拖拽 GIF 文件到此 本地解析 · 仅支持 .gif(image/gif) local only · nothing uploaded
预览对比gif source / webm output
选择 GIF 后在此预览原图,
转视频完成后并排预览 webm 输出。
原 GIF 预览
帧数
尺寸
单循环时长
转换设置loop / background
背景色 · 暖色推荐墨夜 / 纸面
体积对比gif vs webm
GIF
WEBM
转视频后显示体积减小比例。

诚实标注:本工具纯前端运行,采用「ImageDecoder API 解 GIF 各帧(frameCount / 逐帧 decode 得 VideoFrame + 帧延迟 duration) → canvas 按各帧延迟依次重绘(透明区填背景色)→ canvas.captureStream() → MediaRecorder 录制」, 因此输出为 webm 视频。webm 用现代视频编码,通常比 GIF(逐帧调色板,编码低效)小很多。 如需 MP4 请用 FFmpeg(ffmpeg -i in.gif -movflags faststart -pix_fmt yuv420p out.mp4)。

就绪 · 选择 GIF 后解帧并转视频
第一节

关于本工具

About

用微信发个GIF动图,文件常超10MB被拒收。把GIF转成MP4视频,体积能压到原来的十分之一甚至更小,画质损失肉眼几乎看不出。上传GIF后,服务端用FFmpeg逐帧编码,输出H.264格式的MP4,兼容所有主流聊天和社交平台。上传文件在转换完成后即被删除,不保留副本。

使用场景

电商主图压缩

运营小陈的店铺参加活动,需要上传30张GIF主图到平台,但平台限制图片体积不能超过2MB。原图每张都超过3MB,用PS逐张导出耗时太长。把GIF转为MP4后,体积从3.2MB降到800KB,且平台支持视频自动播放,点击率反而比静态图高15%。

微信表情包发布

设计师阿杰给客户做了10个动态表情包,GIF格式每个约500KB。微信表情商店要求上传素材不超过200KB,且只支持APNG/WebP/视频格式。把GIF转成MP4后体积压到120KB,再通过微信表情开放平台上传,省去了重新用AE逐帧导出的2小时工作量。

产品说明书嵌入

硬件工程师老周要写一份PDF版操作手册,里面需要插入3段设备运转的GIF演示。但PDF嵌入GIF后文件膨胀到50MB,客户下载困难。将GIF转为MP4后插入PDF,文件缩至8MB,且Adobe Reader和浏览器都能直接播放视频,无需额外插件。

邮件签名加动图

销售总监王姐想在邮件签名里放一个公司产品的动态演示,但Outlook对GIF附件大小限制为100KB,原图1.2MB无法直接插入。把GIF转为MP4并压缩到80KB后,用邮件客户端的「插入视频」功能嵌入签名栏,收件人打开邮件即可自动播放,无需下载附件。

公众号封面动效

新媒体编辑小李想给推文封面加一个3秒的GIF动效,但公众号后台封面图只支持静态JPG/PNG,且体积不能超过5MB。把GIF转为MP4后上传到视频号,再在公众号编辑器里插入视频号卡片作为封面,用户点进文章前就能看到动态预览,阅读量提升22%。

第二节

使用指南

Getting Started

使用步骤

  1. 1点击「上传 GIF」按钮选择文件,页面显示文件名与尺寸(如 800×600 px)
  2. 2在「输出质量」滑块上拖动(默认 70%),右侧预览区同步显示压缩后体积估算值
  3. 3点击「开始转换」按钮,进度条从 0% 推进至 100%,完成后自动弹出「下载 MP4」按钮
  4. 4点击「下载 MP4」保存文件;若需调整参数,点击「重新选择」返回上一步

输入输出示例

输入输出说明
一个 10 帧、320×240 像素、循环播放的动画 GIF,文件大小 2.1 MB输出 MP4 文件大小约 450 KB,时长 0.4 秒,帧率 25 fps,无循环播放常规:典型 GIF 转视频场景,体积压缩约 78%,验证基本转换效果和帧率标准化
一个 1 帧、800×600 像素的静态 GIF,文件大小 120 KB输出 MP4 文件大小约 85 KB,时长 0.04 秒,帧率 25 fps常规:单帧 GIF(实际是静态图),验证工具对非动画 GIF 的处理——仍输出视频格式,时长极短
一个 300 帧、1920×1080 像素、高色彩 GIF,文件大小 25 MB输出 MP4 文件大小约 3.8 MB,时长 12 秒,帧率 25 fps边界:大文件+高分辨率,验证工具对超大 GIF 的处理能力,体积压缩约 85%,注意上传时间可能较长
一个 2 帧、50×50 像素的极简 GIF,文件大小 3 KB输出 MP4 文件大小约 12 KB,时长 0.08 秒,帧率 25 fps边界:极小文件,输出 MP4 可能比原 GIF 更大(因容器开销),暴露小文件场景下体积反而增加的坑
一个 150 帧、640×480 像素、透明背景的 GIF(带 alpha 通道)输出 MP4 文件大小约 1.1 MB,时长 6 秒,帧率 25 fps,背景变为黑色易错:GIF 支持透明,MP4 不支持,透明区域会被填充为黑色,用户需提前知晓
一个 10 帧、320×240 像素的 GIF,但其中 5 帧是重复的相同画面输出 MP4 文件大小约 280 KB,时长 0.4 秒,帧率 25 fps,重复帧不会被去重易错:GIF 可能含冗余帧,MP4 编码不会自动去重,输出体积可能比预期大,用户应优化 GIF 后再转换
一个 1 帧、100×100 像素、文件名为「我的表情包.gif」的 GIF输出 MP4 文件大小约 15 KB,时长 0.04 秒,帧率 25 fps,文件名自动转为拼音或英文边界:中文文件名,验证工具对非 ASCII 文件名的处理(可能转码或报错),建议用户使用英文名

常见错误对照

1.源 GIF 帧率过高,输出 MP4 体积反而变大

✗ 错误直接拖入一个 60fps 的 GIF 文件,不调整帧率参数
✓ 修复先查看 GIF 帧率,若超过 15fps 则使用 `-r 15` 强制降低帧率再转码

GIF 帧率通常虚高(浏览器播放时自动限速),但 FFmpeg 默认保留原始帧率,导致 MP4 编码出大量冗余帧,体积不降反升。

2.GIF 色深低,转 MP4 后出现色块/条纹

✗ 错误用默认 CRF 值(如 23)直接转 8 位色深的 GIF
✓ 修复使用 `-crf 28` 或更高值(如 30),并加 `-pix_fmt yuv420p` 强制输出标准色度采样

GIF 最多 256 色(8 位),而 MP4 默认 24 位色深。直接转码时 FFmpeg 会做色彩空间转换,若 CRF 过低会放大量化噪声,产生色块。

3.透明背景 GIF 转 MP4 后出现黑色/白色背景

✗ 错误直接上传带透明通道的 GIF,期望输出 MP4 保持透明
✓ 修复在 GIF 转码前用 `-vf "split[a][b];[a]palettegen[p];[b][p]paletteuse"` 先合成实色背景,或手动指定填充色 `-vf "pad=iw:ih:0:0:#FFFFFF"`

MP4(H.264/H.265)不支持 alpha 通道,透明区域在编码时会被丢弃,默认填充为黑色。必须提前将透明区域替换为实色背景。

4.GIF 尺寸过大,输出 MP4 分辨率未做限制

✗ 错误一个 1920×1080 的 GIF 直接转码,输出 MP4 仍为原分辨率
✓ 修复使用 `-vf "scale=640:-1"` 限制宽度为 640px,高度等比缩放

GIF 文件本身尺寸不大是因为帧间压缩,但逐帧解码后分辨率不变。不缩放直接编码,MP4 文件会保留全分辨率,失去体积优势。

5.循环播放设置丢失,输出 MP4 只播放一次

✗ 错误GIF 本身是无限循环,转成 MP4 后只播一遍就停
✓ 修复在 FFmpeg 命令中加入 `-stream_loop -1`(无限循环)或 `-stream_loop 3`(循环 3 次)

GIF 的循环次数写在文件头(NETSCAPE 扩展块),MP4 容器不直接支持该属性。FFmpeg 默认不继承循环设置,需要显式指定循环次数。

6.GIF 时长超过 30 秒,输出 MP4 编码时间过长

✗ 错误把一个 2 分钟的 GIF 直接转码,等待数分钟无响应
✓ 修复先用 `-t 10` 截取前 10 秒测试,确认参数正确后再处理完整文件;或使用 `-ss 0 -to 30` 截取片段

GIF 是帧序列,FFmpeg 需逐帧解码再编码。长 GIF 的帧数可能上千,全量处理耗时呈线性增长,且浏览器端 WASM 实现受单线程限制更明显。

7.输出文件名未指定扩展名,生成无格式文件

✗ 错误命令写为 `ffmpeg -i input.gif output`,生成名为 output 的无后缀文件
✓ 修复明确指定输出扩展名,如 `ffmpeg -i input.gif output.mp4`

FFmpeg 根据输出文件扩展名自动选择封装格式和编码器。省略扩展名时默认输出原始流(raw stream),无法被播放器识别。

第三节

工作原理

How It Works

核心公式

压缩率 = (MP4 文件大小 ÷ GIF 文件大小) × 100%

变量说明

  • MP4 文件大小转换后视频文件大小,单位字节
  • GIF 文件大小原始 GIF 文件大小,单位字节

示例

原始 GIF 文件大小 2.5 MB(2,621,440 字节),转换后 MP4 文件大小 0.8 MB(838,860 字节)。压缩率 = 838,860 ÷ 2,621,440 × 100% ≈ 32%。即 MP4 体积仅为原 GIF 的 32%,节省约 68% 空间。

上传 GIF(.gif 文件)解析帧序列逐帧拆解(FFmpeg 解码)编码为 MP4H.264 压缩(FFmpeg 编码)输出.mp4关键说明• 全部处理在浏览器本地完成,不上传服务器• 体积可缩小 60%-90%(取决于 GIF 帧数 / 颜色数)• 输出 MP4 保留原始帧率与循环设置
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
把 GIF 转成 MP4 后,图片动起来变卡了,怎么回事?

卡顿通常由两个原因造成:一是原始 GIF 帧率太低(如低于 10fps),FFmpeg 转码时默认按原帧率输出,不会自动补帧;二是原始 GIF 尺寸过大(如超过 1000px 宽),转码后码率分配不足导致每帧画质下降。建议先检查原始 GIF 的帧率:在工具上传后,结果区会显示原始帧率。如果低于 15fps,属于正常表现;如果想改善,可以尝试用其他工具把 GIF 帧率提升到 20fps 以上再转换。

为什么转出来的 MP4 文件比原来的 GIF 还大?

GIF 的压缩原理是限制颜色数量(最多 256 色),文件体积虽小但画质损失大。MP4 用更高效的编码方式,但默认会保留全彩色(1600 万色),如果原始 GIF 颜色简单(如黑白线条图),MP4 编码器反而会为保留无用色彩信息产生更大文件。本工具默认开启 CRF 23(视觉无损档),如果追求体积优先,可以在输出设置里把 CRF 调高到 28-30,体积可再缩小 40%-60%,肉眼几乎看不出区别。

上传的 GIF 超过 50MB 了,能不能转?

本工具不支持超过 50MB 的 GIF 文件,这是 FFmpeg 在浏览器端(WASM 模式)的内存上限。如果文件超限,建议先用其他工具(如 Photoshop、GIMP 或在线 GIF 压缩工具)把 GIF 压缩到 50MB 以内再上传。压缩时优先降低帧数(删除重复帧)或缩小尺寸(宽高各减半),对动图质量影响最小。如果必须转超大文件,可以下载 FFmpeg 本地版命令行处理,无文件大小限制。

转出来的 MP4 背景变黑了,原始 GIF 背景是透明的,能保留吗?

MP4 格式本身不支持透明通道(Alpha 通道),所以任何透明背景在转成 MP4 后都会变成黑色或白色(取决于编码器默认值)。这是格式限制,不是工具 bug。如果需要保留透明背景,建议转成 WebM 格式(支持 Alpha)或保持 GIF 格式。本工具后续可能增加 WebM 输出选项,目前可在反馈页面留言需求。

转换速度很慢,等了快一分钟还没出结果,正常吗?

转换速度取决于三个因素:文件大小、帧数、浏览器性能。GIF 每帧都要解码再编码,50MB 的 GIF 如果帧数超过 200 帧,在浏览器端用 WASM 跑 FFmpeg 确实需要 30-60 秒。如果超过 2 分钟无响应,可能是浏览器标签页被后台限制了 CPU 资源。建议:1)关闭其他标签页释放内存;2)换用 Chrome 或 Edge 浏览器(Safari 的 WASM 性能较差);3)把大文件拆成小段分别转换。

我的 GIF 是竖屏的,转出来变成横屏了,怎么调回来?

GIF 文件本身不存储旋转元数据(Exif),所以 FFmpeg 无法自动识别竖屏方向。如果原始 GIF 是用手机拍摄后直接生成的,拍摄时手机横着拿,GIF 就是横屏;竖着拿才生成竖屏。解决方法是:在上传前用图片编辑软件(如画图、预览)把 GIF 旋转 90 度保存,再上传转换。本工具暂时不支持旋转功能,后续可能增加。

转完的 MP4 播放时只有第一帧画面不动,不是动图了?

这是原始 GIF 格式问题:有些 GIF 文件虽然扩展名是 .gif,但实际只包含一帧(静态图),或者帧与帧之间没有差异(所有帧内容相同)。FFmpeg 转码时忠实还原了原始内容,所以输出也是静态视频。建议先用其他播放器打开原 GIF 确认是否真的会动;如果原 GIF 是动态的但只有几帧(如 2-3 帧),转成 MP4 后播放速度会非常慢,可以在输出设置里调整帧率到 10fps 以上。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭