页面代码没有启动。

直接从文件夹打开 index.html 会阻止 JavaScript 模块加载,所以选择一个 GIF后不会有任何反应。 请改用 http 方式提供此目录:

powershell -ExecutionPolicy Bypass -File serve.ps1

Then open http://localhost:8080/.

GIF 转 MP4

每一帧都带着 GIF 给它的延时,变成 MP4 里的 H.264。在你的机器上转,文件从不上传。

查看源码
你的GIF在你自己的浏览器里处理,不做任何上传。

你选的那个 GIF,解码、一帧一帧画出来、编码、写进 MP4,全都在这台机器的内存里完成,用的是你自己浏览器里的编码器,和从这个地址发来的代码。这里根本没有能做上传的东西,这一页的另一头也没有服务器可以接收。

实时检查: 核对中…

离线: 核对中…

别听我们说。打开开发者工具,盯着网络面板,然后转点什么。没有任何一条请求带着 GIF、一帧画面或者文件名。或者干脆断网,照样能转。

1 选那个 GIF

2 看看会写出什么

GIF 的每一帧变成视频的一帧,停的时间正好是 GIF 让它停的时间。不重采样、不丢帧、不翻倍,视频播多久 GIF 就播多久。画面尺寸不变。

透明的地方后面 视频不会像 GIF 那样自己循环:由播放器决定。下面的预览会循环;聊天软件和信息流通常也会。

512 MiB 是保留像素、合成和视频缓冲区的估算上限。编解码器内部还可能占用更多内存。取消会弃置当前任务,但原生读取或同步绘制仍可能完成。

3 转换

以 Markdown 查看

怎么把 GIF 转成 MP4

  1. 选那个 GIF。一次一个。浏览器直接从你的硬盘读它,页面会说它是什么:多大、多少帧、播多久、多少像素。
  2. 读那一行说明。一行:尺寸、帧数和它们的时间、时长、码率。没有什么要设的,除非 GIF 有透明的地方,那时会出现一个颜色框,问那里填什么。
  3. 转换,然后读那句写着「已核对」的话。每一帧画出来再编码,进度条会说到哪了。然后做好的文件会在这里重新打开,它必须跟 GIF 播得一样久,每一帧都在。它在下载按钮下面从内存里循环播放,你能看到接缝。

更完整的说明

如何把 GIF 转为 MP4,为什么会小得多 为什么同一动画的 MP4 只有 GIF 的十分之一,视频缺少哪些 GIF 能力,为什么时序易错,以及如何在浏览器中无需上传地转换。

有疑问?

为什么 MP4 小这么多?

因为 GIF 把每一帧都当成一张最多 256 色的图存起来,也不记得上一帧长什么样,而视频编码只存变化的部分。H.264 干这件事已经练了三十年。同一段动画通常出来只有十分之一大,常常更小,看起来还更好,因为它不再被限制在 256 种颜色,也不用再靠抖动来掩盖这一点。很小的 GIF,或者几乎不动的 GIF,转成视频可能反而变大;发生的时候页面会说。

时间会一样吗?

一样,一帧不差。GIF 没有帧率,只有每一帧各自的延时,视频把每一个延时原样保留:GIF 的每一帧就是视频的一帧,停的时间一模一样。不重采样,不翻倍,不丢帧。唯一的一点自作主张是每个浏览器都会做的那一点,不到两百分之一秒的延时按十来播,所以视频的时长跟 GIF 在浏览器里播的一样。做好的文件会重新打开核对这两点。

它会循环吗?

这由播放它的东西决定。GIF 自带循环的指令;MP4 没有这种东西,由播放器决定。大多数信息流和聊天软件会循环播放短视频,这一页的预览也循环,好让你看到接缝。桌面上的视频播放器通常只播一遍。

透明的地方怎么办?

会填一种颜色,因为视频是一整块实心的矩形。GIF 有透明的地方时,页面会显示一个颜色框,默认白色,因为大多数网页是白的;没有透明的地方就不显示。颜色在编码之前画在帧的底下,所以它是画面的一部分。

它会改画面尺寸吗?

H.264 要求偶数边,所以奇数宽度或高度会增加一行背景色,不进行重采样。如果最长边超过3840像素,GIF 会缩小到这个上限。页面会在开始前显示实际输出尺寸。缩小输出不会减小源画面的合成缓冲区。

要多久?

普通 GIF 使用硬件编码通常只需几秒,没有硬件编码会更久。进度条显示当前帧。取消会弃置编码器和输出,但原生支持检查、读取或同步绘制仍可能完成。迟到的任务不会替换较新的源文件或结果。

我的 GIF 会被上传到哪里吗?

不会。GIF 由你自己的浏览器在你自己的硬件上读取、解码、编码、写出,这一页的 Content-Security-Policy 列出了它可以联系的每一个地址,没有一个属于本站。最简单的自证办法是断开网络照样用。

手机上能用吗?

浏览器能编码视频的手机上能用,而且手机自带的硬件编码器很快。手机缺的是内存:GIF 的帧要先解码到内存里,所以很长的一个可能超出手机能装下的量。

有大小限制吗?要钱吗?

读取器最多保留5.12亿个已解码的局部图像像素,转换会拒绝已知缓冲区估算总量超过512 MiB的任务。这不保证编解码器内部内存或浏览器所有分配的上限。页面会说明拒绝原因。工具免费,无需账号、登录或试用期。广告维持网站运行,不会收到有关你的 GIF 的信息。

断网能用吗?

能。把页面加载一次,然后断开网络,它照样能用。这也是证明什么都没被上传的最简单的办法:一个把你的 GIF 发出去转换的工具,你一拔网线它就停了。