将 png 合并到 gif 上并使用 shell

将 png 合并到 gif 上并使用 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.

有人有主意吗?

答案1

您可以使用以下方法执行此操作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从某种意义上说,flag 是对输入执行以生成输出的函数。在这种情况下,函数是[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

相关内容