將 gif 上的 png 與 shell 合併
我正在嘗試將 png 與 gif 合併(將 png 放在 gif 之上),然後將結果作為 gif。
我玩過
convert
,但不能完全按照我需要的方式工作。到目前為止,我已經嘗試過這些命令:
convert layer1.png layer2.gif -append mergedLayers.gif convert-im6.q16: memory allocation failed `layer2.gif' @ error/gif.c/ReadGIFImage/1303.
有人有想法嗎?
您可以使用以下方法執行此操作
ffmpeg
:
ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0[out] -map [out] -map 0:a? mergedLayers.gif
-y
標誌表示無需詢問即可覆蓋輸出文件。因此,如果您已經有一個名為的文件mergedLayers.gif
,則在執行此命令時它將被覆蓋。
-i
flag 是輸入 url(在這種情況下只是一個文件名)。所以你正在傳遞兩個輸入文件。layer2.gif
和layer1.png
。
-filter_complex
從某種意義上說,標誌是在輸入上完成以產生輸出的功能。在這種情況下,函式是[0]overlay=x=0:y=0[out]
。[0]
表示您想使用第一個輸入文件作為被覆蓋的對象。如果您要使用[1]
而不是[0]
最終將 png 作為底層。overlay=x=0:y=0
告訴放置覆蓋對象的位置。您可以通過更改中的 x 和 y 值來調整 png 在圖像上的顯示位置[0]overlay=x=0:y=0[out]
。x=0:y=0
是圖像的左上角。增加 x 的值會將圖像向右移動。增加 y 的值將向下移動圖像。如果=x=0:y=0
省略,則overlay
預設為x=0:y=0
.
-map
flag 是一種將輸入指定為輸出源的方法。在這種簡單的情況下可能沒有必要,您可以這樣做:
ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0 mergedLayers.gif