使用ffmpeg转换多帧png为透明gif

@hanq  2023年10月04日 16:09

最终指令

首先给出答案,方便后续操作↓

ffmpeg -i i.png -lavfi split[v],palettegen,[v]paletteuse o.gif

查找答案

RT,遇到了一个奇怪的现象,在macOS系统上打开客户的png图片可以看到类似gif图片多帧的效果,但是使用HEX工具打开文件后,显示的文件格式还是png,所以学习了一下:

  • GIF:图像互换格式(Graphics Interchange Format),是CompuServe公司在 1987 年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。GIF格式可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。
  • PNG:便携式网络图形(Portable Network Graphics)是一种无损压缩的位图图形格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。

妈耶,也就是PNG是可以完全具备GIF的功能而且可以无损压缩。可是受限于现在的软件不支持png的动画效果(PS,AE无法识别到动画的png,不知道是不是设置的问题),需要将png转换为gif格式后再处理。那如何将这种png图片转为gif呢?

方法

方法一

通过搜索引擎,找到一个网站png-to-gif,这个可以直接将png转为gif,但是你的原始文件需要传输到他的服务器上去

方法二

既然是图片,那么就有可能被我们的ffmpeg支持,随意试验了一下:

ffmpeg -i x.png x.gif

成功了,但是透明区域是黑色的,所以使用指令部分的参数来让透明区域保持

ffmpeg -i i.png -lavfi split[v],palettegen,[v]paletteuse o.gif

就这么搞定了,以上

扩展

那么如果想将上面的gif转为透明视频mov如何做呢?

ffmpeg -i i.gif -vcodec qtrle o.mov

再如果,将gif转为png序列帧该如何做呢?

ffmpeg -i i.gif -c:v png -pix_fmt rgba %04d.png

附录


添加新评论