Blender は MPEG などのアニメーションを出力することはできますが、アニメーションGIF (以下、AGIF) には直接出力できません。次のようなステップを踏む必要があります。
- 全フレームをアニメーションを透過PNGで出力する
- AGIF にコンパイルする
- 最適化・軽量化する
以下は Blender から AGIF を作る手順です。
作業環境
- Windows 10 Home 1903
- Blender 2.83.2
- ffmpeg 4.3
- Gifsicle 1.92
チュートリアル
Blender で透過画像を出力する
- "Render プロパティー > Film > Transparent" = ON
- "Output プロパティー > Output"
- "File Format" = PNG
- "Color" = RGBA
- 出力パスは好きなパスを指定
上記を設定したら、 "メニューバー > Render > Render Animation (Ctrl+F12)" でアニメーション出力しましょう。
FFMPEG でコンパイル
伝統の FFMPEG を使って、複数画像を1枚の AGIF にまとめます。まずは FFMPEG をダウンロード&解凍してください。
続いて、コマンドライン (Windows Terminal) で以下のコマンドを叩いてコンパイルします。
cd c:\tmp\animation
# シンプル版
ffmpeg.exe -i .\%04d.png -filter_complex "fps=24,split[a],palettegen,[a]paletteuse" -y output.gif
# パレット最適化版 (やや容量が小さくなる可能性あり)
ffmpeg.exe -i .\%04d.png -filter_complex "fps=24, setpts=PTS/0.5, split[a][b];[a] palettegen [p];[b][p] paletteuse=dither=none" -y output.gif
コマンドが何をやっているか、簡単に解説すると次のようになります。
-
-i
: インプットファイル- 今回は4桁の連番ファイルをまとめたので、
%04d
と記述 - 3桁なら
%03d
- 今回は4桁の連番ファイルをまとめたので、
-
-filter_complex
: FFMPEG 内部の GIF 処理コマンド群- GIF は256色しか表現できないため、最初に
palettegen
で元画像からカラーパレット画像を出力する- 1色は透過用なので、使えるのは実質255色
-
fps
は Blender の出力時の値と合わせる -
setpts
: 再生速度の変更-
PTS/2
-> 2倍 (倍速) -
PTS/0.5
-> 0.5倍 (速度半減) - (スラッシュが除算に見えるが意味は逆なのがキモい)
-
- GIF は256色しか表現できないため、最初に
-
-y
: 出力ファイルが存在しても上書き
これでフォルダ内に AGIF が作成されます。
そのまま使ってもいいですが、ネット回線に優しくなるよう軽量化もしましょう。
軽量化
オンラインツールでは Optimize animated GIF を使うのが一番楽です。十分軽量化されますし処理も速いので、特に理由がなければこちらを使って軽量化しましょう。
あえて自分でコマンドラインで軽量化したい人のために、Gifsicle を使う場合の手順も示しておきます。
- ダウンロード先: Gifsicle for Windows
- 使い方:
シンプルなツールなので上記マニュアル通りでサクッと軽量化できます。私が実験したところ、以下のパラメーターでそこそこ元の見た目を保ちながら、容量を 50% 程度削減できました。
gifsicle.exe -i input.gif --optimize=3 --lossy=500 -o compressed.gif
-
-i
: FFMPEG で出力したファイルを指定 -
-o
: 圧縮後のファイル出力先 -
--optimize
: 1(default)~3- 3が一番遅いが、圧縮率が高い
-
--lossy
: 値が大きいほど、画質が悪くなる代わりに圧縮率が上がる- GIF に含まれる色数にもよるが、200-500 で十分
以上で軽量な AGIF の作成が完了しました。
この手順を使って、クールなインターネット・ミームを生み出してください。