静止画像からアニメーションGIFを作成するには(コマンドラインを使用するのが望ましい)。


78

.gif指定された一連の.jpg画像からアニメーション画像を作成します。

コマンドラインから実行したいので、コマンドラインツールは大歓迎です。


回答:


87

ImageMagickパッケージを使用できます。次のコマンドを使用してインストールします。

sudo apt-get install imagemagick

これで、次を使用しgifて多数の画像からを作成できますjpg

convert -delay 20 -loop 0 *.jpg myimage.gif

6
gifアニメーションのサイズを50%に変更する方法をここに含めてください。など-resize 50%
レオレオポルドヘルツ

Ubuntuの18.10は、これらの画像は、 "排出キャッシュリソース"で失敗しました:github.com/cirosantilli/media/blob/master/...関連:superuser.com/questions/1178666/...
チロSantilli新疆改造中心法轮功六四事件

ImageMagickユーザーは、次のものも必要になる可能性があります-deconstruct。ImageMagickは非常にメモリを消費することもわかりました。ベンチマークを参照してください:askubuntu.com/a/1102183/52975
Ciro Santilli新疆改造中心法轮功六四事件

convert -delay 0 -loop 0 *.tif myanimated.gif720 tifファイルでうまく動作しました
ron

46

@Maythux回答を完了するには:

非常に大きなファイルの生成を回避するには、-resizeオプションを使用できます。

私の場合、4608x3456の画像があり、32個の画像に対して生成されたgifは300M以上でした

convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif

または

convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif

* .jpgの世話をします

*.jpg 数値を扱うときは少し面倒ですが、ソートされていない写真でgifを生成できます。

$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg   // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg    // <--- should be here    
21-33-28_2.jpg
21-33-28_3.jpg
...

ショットは非常に高速(10 / s)で撮影されたため、すべて同じ修正時間でありls -t、たとえば、だまして使用することはできません。ubuntu ls -vでは、代わりに次のようなものを使用できます。

convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif

Mac OS Xでは数値によるソートは非常に難しいですが、カスタムスクリプトを作成する必要があると思います。


4
* .jpgの問題は、数字にゼロを前方に埋め込むことで回避できます。「1.jpg」ではなく「01.jpg」など。3桁になると、「001.jpg」、「010.jpg」など
-bigreddmachine

2
ファイル名シーケンスの問題を回避する方法はいくつかあります。含めfindsortブレース展開は、など。このlsツールは、この種のものには不適切であることで有名です。を使用しfindます。少し学習曲線がありますが、それだけの価値があります。

一部のユーザーは、massrenでファイル名を編集することに興味があるかもしれません:github.com/laurent22/massren
Graham P Heath

完了するには時間がかかります。詳細なオプションはありますか?
Ouranos

21

コメントするほどの評判はありませんが、ファイル名を変更する代わりに、グロビングを使用してシェルにファイル名を展開させることができます

convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif

11

GIMP

これはGIMPで簡単に行えます。まだインストールされていない場合は、最初にインストールします

sudo apt-get install gimp

gifを作成する

GIMPから[ファイル] -> [レイヤーとして開く]に移動して、独自のレイヤー上のすべてのpngを開きます。

レイヤーとして開く

ここからレイヤーの編集を実行し、完了したら[ファイル] -> [ 名前を付けてエクスポート]に移動します。ダイアログから、ファイルタイプをGIFに設定してください。

ファイルタイプをGIFに設定する

そこから、GIFエクスポートオプションに移動します。「As Animation」オプションにチェックマークを付け、必要に応じてパラメーターを設定します。

GIFエクスポートオプション


7

ffmegソリューション+テストデータ

Ubuntu 18.10、ffpmeg 4.0.2-2、ImageMagick 6.9.10-8の時点で、ffmpegの方がはるかに高速で、使用するメモリはるかに少ないことがわかりました。

最も簡単な変換コマンドは次のとおりです。

ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i '*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

次の方法でテストデータを取得できます。

wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle

テストデータは、https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292で生成され、256個の1024x1024 PNG画像が含まれています。

そして、今すぐブラウザで直接生成できる別のテストデータがあります!https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718

ここに画像の説明を入力してください

ffmpeg強調したい重要なオプションは次のとおりです。

  • -pattern_type glob:画像を選択する便利な方法

  • -framerate 60:入力画像で60 FPSを想定し、同じFPSを出力します。

    ffmpeg ビデオ形式にあるのと同じように画像にFPSデータがないため、そうでなければ知ることができません。

    256個の入力フレームが完了するまでに約4秒かかります。

    -r 15:オプション。4つの画像ごとに1つを選択して、サイズを小さくします(4 == 60 / 15)。

    これを使用するidentify out.gifと、GIFには64フレームしか含まれていません。

    再生にはまだ4秒かかります。そのため、遅延は、物事が一致するように変更されます。

  • -vf scale=512:-1:オプション。通常、サイズを縮小してスペースを節約するために、幅とスケールの高さを比例して設定します。

ImageMagickを機能させるには、https/etc/ImageMagick-6/policy.xml//superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pagesで説明されているように、最初にディスクとメモリの制限を変更する必要がありました

こちらもご覧ください:

ImageMagick対ffmpegベンチマーク

コマンドを比較しました:

/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i '*.png' \
  out-ffmpeg.gif \
;

コマンドは、比較を有効にするためにできるだけ近い出力を生成するように構築されました。

  • /usr/bin/time -vhttps : //stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-processで説明されているように、最大​​メモリ使用量を見つけるために使用されます

  • -deconstruct:GIFイメージには、GIFを小さくするために、前のフレームから最小限の変更された長方形のみを含めることができます。

    ffmpegデフォルトでこれらの差分を計算しますが、ImageMagick -deconstructは使用しない限り計算しません。

    基本的に、ImageMagickで毎回そのオプションを使用する必要があります。

    次のようにして違いを観察できます。

    identify out.gif
    

    圧縮バージョンでは、すべてのフレームのサイズが最初のフレームよりも小さくなります。例:

    out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
    

    この例では、2番目のフレームは516x516完全な1024x1024ではなく、のオフセットに配置されてい252+257ます。したがって、中央の三角形のみが含まれます。

    参照:ImageMagickを使用してアニメーションGIFファイルのサイズを変更するにはどうすればよいですか?

  • -delay:の60FPSに一致する値ffmpeg。変換のパフォーマンスには関係ありませんが、リスクを冒したくありません。

出力GIFのサイズはほぼ同じで、視覚的には同じように見えます。

ImageMagickを取得します。

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856

ffmpegの場合:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172

そこから私たちはそれを見ます:

  • ImageMagickは2.6GbのRAMを使用し、約1分かかりました
  • ffmpegは100MbのRAMを使用し、4秒かかりました

テストハードウェア:Lenovo ThinkPad P51ラップトップ、Intel Core i7-7820HQ、32GB(16 + 16)DDR4 2400MHz SODIMM、512GB SSD PCIe TLC OPAL2


賛成し、気に入った!、素晴らしい答え、1つの小さなフォローアップの質問があります。私はそれほど高品質の画像を持っていないし-r -vコマンドも使用しませんでしたが、出力gifは元のpngファイルよりもはるかに低品質です。与えられたpngファイルと同じ品質のgifを保持する方法は?
astro123

こんにちは@ astro123品質はどうですか?画像サイズが小さい、フレームが少ない、または何か(GIFは明らかにロスレスを使用しているため、圧縮率を下げることはできません)試してみてください-framerate 60 -r 60。生成されたGIFを検査し、ImageMagickツールで画像を入力identifyして、何が起こっているのかを試します。
Ciro Santilli新疆改造中心法轮功六四事件

4

imagemagickパッケージに含まれているconvertというプログラムを使用できます。コマンドライン駆動ですが、非常に使いやすいです。ソフトウェアセンターからインストールするか、コマンドプロンプトで次のように入力します。

sudo apt-get install imagemagick

次に、.gifを作成します。

convert -delay 100  -size 100x100 xc:SkyBlue \
          -page +5+10  balloon.gif   -page +35+30 medical.gif  \
          -page +62+50 present.gif   -page +10+55 shading.gif  \
          -loop 0  animation.gif

*上記の例はImage Magickの例から直接のものです。


1
ループGIFで40個のPNG画像を作成するにはどうすればよいですか?フォルダ/ home / fusion809 / Documents / Images内のすべて
BH2017 14

1
@ BH2017:convert -delay 20 -loop 0 *.png out.gifループGIFを作成します。
unutbu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.