はじめに
SE2年目の天然水♂です。
仕事で新規参画者向けドキュメントを書いていたときに、「これ、GIFで表現したらわかりやすそうだな」みたいな箇所がありまして、web上にあるGIFを作ってくれるサイトを使わず、できればローカル環境で作成できないかなと思ったのが発端です。
ChatGPTに聞いたところ、FFmpeg
とImageMagick
を使うことで作れるそう。
備忘録は業務と関係ないので、自分の好きなゲームのワンシーンを使ってGIF画像を作ります。
(……と思ったんだけど、作成したGIFのファイルサイズが35MBで、Qiitaに載せられなかった笑)
とりま、使用させていただいた動画↓
ラファエル各兵種モデル&戦闘モーション ファイアーエムブレム 風花雪月
FFmpegとは?
公式: FFmpeg
A complete, cross-platform solution to record, convert and stream audio and video.
(オーディオとビデオを録音、変換、ストリーミングするための完全なクロスプラットフォームソリューションです)
CUIを使って、動画や音声を変換できるツールですね。
割といろんなことができそうっすね。
【参照】
FFmpegコマンド集
ImageMagickとは?
公式: imageMagick
怪しい魔法使いのおじいさんが出迎えてくれます。
ちなみに、ImageMagickは脆弱性に問題があるとか言われていますが、ImageMagickを導入しているwebサイトでなどで、悪意のある画像ファイルを流すと起きるとかなんとか(おそらくそれはローカルでも同じ)。
ImageMagick自体はローカルで使用し、使用する動画ファイルも自分で撮ってこれる場合はその方が安全だと思います。
【参照】
さようならImageMagick
「さようなら ImageMagick」の考察
作成方法
1. FFmpeg、ImageMagick をインストールする
自分はHomebrewを使いました。以下のコマンドでインストールできます。Homebrewインストールしてない場合は、インストールもらえればと。
brew install ffmpeg
brew install imagemagick
無事にインストールされているかの確認
ffmpeg -version
magick -version
2.動画ファイルがあるディレクトリに移動し、動画ファイルをフレームに変換する
ffmpegの以下コマンドを実行します。
cd movie_dir
ffmpeg -i fe_motion.mp4 -vf "fps=10" -ss 5 -t 5 frame_%4d.png
fe_motion.mp4
:使用する動画ファイル名
fps=10
で1秒間に10コマの画像に分けてます。
-ss 5 -t -5
は動画ファイルの開始5秒目 ~ 10秒目までの指定をしています。開始の指定が必要なければ -ss 秒数
はいらないかと。
frame_%4d.png
出力ファイル名の形式を設定します。今回はpngファイルにしてます。
実行すると、動画ファイルのあるディレクトリに以下のように分割した画像が出力されます。
3.作成した.png画像をつなげてGIF画像にする
magick -delay 10 -loop 0 frame_*.png sample.gif
magick
コマンドでGIF画像にします。convert
コマンドでもできますが、ImageMagick ver.7以降 magick
コマンド推奨らしいです。convert
コマンドを実行すると以下の警告がでます。
WARNING: The convert command is deprecated in IMv7, use "magick" insted of "convert" or "magick convert"
メモ
仕事で使う場合、画像のどこを切り取ってもセキュリティ的に気を使う必要があるので、どうしてもweb上にある変換ツールは怖いなと思った次第です。