我知道我可以使用ImageMagick的爆炸GIF动画到其要素帧如何提取GIF的第N个帧与累计胶片考虑
convert my.gif my.png
的问题是,除了所有帧首先包含了很多的透明度,我假设因为某种差异压缩。
我希望第N帧作为单独的文件,因为在第一帧应用后的所有透明图层之后,它会出现在最终的渲染中。这是一个非常大的(千兆字节)文件,1080p帧,所以我不想全部提取它们,只有N个。
我该怎么做?我需要一个非交互式解决方案。
我知道我可以使用ImageMagick的爆炸GIF动画到其要素帧如何提取GIF的第N个帧与累计胶片考虑
convert my.gif my.png
的问题是,除了所有帧首先包含了很多的透明度,我假设因为某种差异压缩。
我希望第N帧作为单独的文件,因为在第一帧应用后的所有透明图层之后,它会出现在最终的渲染中。这是一个非常大的(千兆字节)文件,1080p帧,所以我不想全部提取它们,只有N个。
我该怎么做?我需要一个非交互式解决方案。
知道你如何想到这个工作,因为有可能是对应于每1080帧以上的GIF帧,所以你的N
计算将有可能从N
ImageMagick的的概念,不同的不是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
我不知道你的数据 - 试试看看。
谢谢。你能解释一下你的意思吗?“可能有多个GIF帧对应每个1080p帧”? – spraff
作为GIF优化的一部分,ImageMagick决定从1080p帧N到1080p帧N + 1的最佳方式。它可能只是将差异存储在单个GIF框架中,或者可能会将左上角作为一个“GIF”操作清除,然后将该左上角的一部分重新绘制为另一个“GIF”操作,然后在顶部绘制一些东西右键另一个“GIF”操作,然后在另一个“GIF”操作中画一些东西。对于单个1080p帧,现在有4个GIF *“帧”*,因此帧号可能不匹配。 –