2017-02-27 9 views
1

我知道我可以使用ImageMagick的爆炸GIF动画到其要素帧如何提取GIF的第N个帧与累计胶片考虑

convert my.gif my.png 

的问题是,除了所有帧首先包含了很多的透明度,我假设因为某种差异压缩。

我希望第N帧作为单独的文件,因为在第一帧应用后的所有透明图层之后,它会出现在最终的渲染中。这是一个非常大的(千兆字节)文件,1080p帧,所以我不想全部提取它们,只有N个。

我该怎么做?我需要一个非交互式解决方案。

回答

0

知道你如何想到这个工作,因为有可能是对应于每1080帧以上的GIF帧,所以你的N计算将有可能从NImageMagick的的概念,不同的不是100%。例如,作为优化的一部分,ImageMagick可能会选择对帧进行2次部分清除,并进一步覆盖2次,以呈现单个1080p帧,这会使您的值在每次发生时有几帧相差。

无论如何,你可以尝试用-coalesce选项,迫使ImageMagick的重建所有必须呈现的全画幅的部分,然后删除包围框架的实验。

最少的资源密集型的选择可能是尝试并加载一个框架:

convert a.gif[784] -coalesce frame784.png 

下至少密集型可能是加载之前所有你想要的一个框架,而不是打扰装载后来者:

convert a.gif[0-784] -coalesce -delete 0-783 frame-784.png 

资源最密集的选项,而是最有可能的工作,可能是加载所有帧,然后删除不需要的:

convert my.gif -coalesce -delete 0-783,785--1 frame784.png 

我不知道你的数据 - 试试看看。

+0

谢谢。你能解释一下你的意思吗?“可能有多个GIF帧对应每个1080p帧”? – spraff

+0

作为GIF优化的一部分,ImageMagick决定从1080p帧N到1080p帧N + 1的最佳方式。它可能只是将差异存储在单个GIF框架中,或者可能会将左上角作为一个“GIF”操作清除,然后将该左上角的一部分重新绘制为另一个“GIF”操作,然后在顶部绘制一些东西右键另一个“GIF”操作,然后在另一个“GIF”操作中画一些东西。对于单个1080p帧,现在有4个GIF *“帧”*,因此帧号可能不匹配。 –