.gif
指定された一連の.jpg
画像からアニメーション画像を作成します。
コマンドラインから実行したいので、コマンドラインツールは大歓迎です。
.gif
指定された一連の.jpg
画像からアニメーション画像を作成します。
コマンドラインから実行したいので、コマンドラインツールは大歓迎です。
回答:
ImageMagickパッケージを使用できます。次のコマンドを使用してインストールします。
sudo apt-get install imagemagick
これで、次を使用しgif
て多数の画像からを作成できますjpg
。
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
。
-deconstruct
。ImageMagickは非常にメモリを消費することもわかりました。ベンチマークを参照してください:askubuntu.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gif
720 tifファイルでうまく動作しました
@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
数値を扱うときは少し面倒ですが、ソートされていない写真で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では数値によるソートは非常に難しいですが、カスタムスクリプトを作成する必要があると思います。
find
、sort
ブレース展開は、など。このls
ツールは、この種のものには不適切であることで有名です。を使用しfind
ます。少し学習曲線がありますが、それだけの価値があります。
これはGIMPで簡単に行えます。まだインストールされていない場合は、最初にインストールします
sudo apt-get install gimp
GIMPから[ファイル] -> [レイヤーとして開く]に移動して、独自のレイヤー上のすべてのpngを開きます。
ここからレイヤーの編集を実行し、完了したら[ファイル] -> [ 名前を付けてエクスポート]に移動します。ダイアログから、ファイルタイプをGIFに設定してください。
そこから、GIFエクスポートオプションに移動します。「As Animation」オプションにチェックマークを付け、必要に応じてパラメーターを設定します。
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 -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番目のフレームは516x516
完全な1024x1024ではなく、のオフセットに配置されてい252+257
ます。したがって、中央の三角形のみが含まれます。
-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
そこから私たちはそれを見ます:
テストハードウェア:Lenovo ThinkPad P51ラップトップ、Intel Core i7-7820HQ、32GB(16 + 16)DDR4 2400MHz SODIMM、512GB SSD PCIe TLC OPAL2
-r
、-v
コマンドも使用しませんでしたが、出力gifは元のpngファイルよりもはるかに低品質です。与えられたpngファイルと同じ品質のgifを保持する方法は?
-framerate 60 -r 60
。生成されたGIFを検査し、ImageMagickツールで画像を入力identify
して、何が起こっているのかを試します。
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の例から直接のものです。
convert -delay 20 -loop 0 *.png out.gif
ループGIFを作成します。