Shell

將 gif 上的 png 與 shell 合併

  • January 19, 2022

我正在嘗試將 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,則在執行此命令時它將被覆蓋。

-iflag 是輸入 url(在這種情況下只是一個文件名)。所以你正在傳遞兩個輸入文件。layer2.giflayer1.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.

-mapflag 是一種將輸入指定為輸出源的方法。在這種簡單的情況下可能沒有必要,您可以這樣做:

ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0 mergedLayers.gif

引用自:https://unix.stackexchange.com/questions/686870