我正在尝试将 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
运行此命令时它将被覆盖。
-i
flag 是输入 url(在本例中只是文件名)。所以你正在传递两个输入文件。layer2.gif
和layer1.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
。
-map
flag 是一种将输入指定为输出源的方法。在这种简单的情况下可能没有必要,你可以这样做:
ffmpeg -y -i layer2.gif -i layer1.png -filter_complex [0]overlay=x=0:y=0 mergedLayers.gif