2017-02-27 10 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 *「幀」*,因此幀號可能不匹配。 –