web-dev-qa-db-ja.com

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

.gif画像の特定のセットから.jpgアニメーション画像を作成したい。

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

73
Maythux

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

Sudo apt-get install imagemagick

これで、次を使用して、いくつかの写真(gif)からjpgを作成できます。

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

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

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

私の場合、4608x3456の画像があり、生成されたgifは32個の画像に対して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では数値による並べ替えが非常に難しいですが、カスタムスクリプトを作成する必要があると思います。

44
Ninsuo

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

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

GIMP

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

Sudo apt-get install gimp

Gifを作成する

GIMPからFile->すべてのレイヤーとして開く pngは独自のレイヤーにあります。

Open as Layer

ここからレイヤーの編集を実行し、完了したらFile->Export As。ダイアログから、ファイルタイプをGIFに設定してください。

Set file type to GIF

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

GIF export options

9
chesedo

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

enter image description here

私が強調したい重要な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を機能させるには、最初に/etc/ImageMagick-6/policy.xmlでディスクとメモリの制限を変更する必要がありました。説明は https://superuser.com/questions/1178666/imagemagick-convert-quits-after-一部のページ

こちらもご覧ください:

ImageMagick vs 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 -v:以下で説明されているように、最大​​メモリ使用量を見つけるために使用されます。 https://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番目のフレームは完全な1024x1024ではなく516x516のみであり、252+257のオフセットに配置されます。したがって、中央の三角形のみが含まれます。

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

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

出力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はRAMの2.6Gbを使用し、約1分かかりました
  • ffmpegはRAMの100Mbを使用し、4秒かかりました

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

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の例

4
Scott Goodgame