pngをgifにマージし、シェルを使用します。

pngをgifにマージし、シェルを使用します。

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です(この場合はファイル名のみ)。したがって、2つの入力ファイルを渡しています。layer2.gifそしてlayer1.png

-filter_complexある意味では、フラグは、出力を生成するために入力で実行される関数です。この場合、関数は最初の入力ファイルを上書きオブジェクトとして使用することを[0]overlay=x=0:y=0[out]意味します。代わりに[0]、基本レイヤーとしてpngを使用します。オーバーレイオブジェクトを配置する場所を示します。でxとyの値を変更して、画像にpngが表示される位置を調整できます。は画像の左上です。 x 値を大きくすると画像が右に移動します。 y値を大きくすると、画像が下に移動します。省略すると、デフォルト値はです。[1][0]overlay=x=0:y=0[0]overlay=x=0:y=0[out]x=0:y=0=x=0:y=0overlayx=0:y=0

-mapフラグは、入力を出力ソースとして指定する方法です。この単純なケースでは必要ないかもしれません。次のようにできます。

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

関連情報