The 42 Of Spaghetti

メモを交えて所有物を淡々と記録するログ

mac上で複数画像ファイルをアニメgifやムービーに変換する

iPhoneでのバーストモードの連写の画像のように、連続したjpg(などの画像ファイル)をアニメーションgifにしたりmp4にする時の変換手順メモです。

imagemagick、ffmpegを使用して、ほぼワンライナーでできます。

アニメgifから画像に分解する

imagemagickを使います。

convert +adjoin anime.gif out.gif

"+adjoin"というオプションは「複数からなるファイルを分解する」という意味です。これで、ファイル元、出力先ファイル命名を指定します。
上記の場合、out1.gif,out2.gif.....と連番で出力されます。10枚以上の場合は連番を桁合わせしておくと後々取り回しが楽なので、実際には下記のように、出力先にはフォーマット指定子を使用して、001-999のような0埋めによる桁あわせに連番ファイルを作成するようにすると良いでしょう。

convert +adjoin anime.gif output/out-%03d.gif

上記では、出力ディレクトリを指定して、その中にout-001.gif,out-002.gifのように3桁あわせの連番ファイルを出力しています。

桁合わせ指定は、コマンド中の%03dという部分になります。
ここでは、0埋めを3桁する(数字)という指定になっています。*1
※上記の例だと、outputというディレクトリを先に作成してないとエラーになります。

出力画像の種類は拡張子を変えるだけ

出力画像をgifではなくpngにしたい場合は、コマンドを

convert +adjoin anime.gif output/out-%03d.ong

のようにします。つまり、出力画像の拡張子部分を、望みのものに変えるだけでOKです。

複数画像からアニメgifを作る

同様に、これもimagemagickを使用します。

convert -adjoin output/*.gif output.gif

outputディレクトリの全てのgifファイルを連結してアニメーションgifにし、output.gifとして出力します。
連結するファイルの順番はlsで見た時と同じなので、事前に連番にするなどの処理が必要です。
ここで、オプションが前回の+adjoinから-adjoinと変わっていることに注意してください。

他のオプションは色々ありますが、比較的よく使いたいものとして、アニメーションをゆっくりにしたい、というときは、delayオプションが挙げられます。

convert -adjoin -delay 10 output/*.gif output.gif

これだと、1枚毎に10msの遅延を入れることになります。

※細かい話として、cmpで比べるわかりますが、上記手順を踏んだ分解→結合は、バイナリ比較時に同じにはなりません。

アニメgifからムービーへ変換する

作るのは簡単ですが、質を追求すると試行錯誤が必要になってくるのでしょうか。
今回の元gifやアニメのように、ノイズが目立ちやすいものでは、劣化がかなりわかるようになります。

1 convertを使用して.mpgに変換

convertを使ってmpgにする方法は以下のとおりです。

convert anime.gif anime.mpg

2.ffmpegを使用してflvやmp4などに変換

他の動画形式が良い場合は、ffmpegを使用します。

ffmpeg -f gif -i anime.gif video.fiv/mp4/avi/mpg

拡張子は好きなのを選んで指定して下さい。
ちなみに、僕の環境(ffmpeg v2.5、homebrewでoptionなしでinstall)ですとmp4を出力した時にQuicktime playerで再生できません。VLCだと出来ますが、macのファイル種類ソフトmediainfoで見てみるとmp4っぽいです。

flvからアニメgifに変換

こちらも上記の例で使用しますが、これだとgifもパレット制約によって場面によっては汚い画像になってしまいますので、ちょっと一手間欠けると良いようです。下記ブログの記事が参考になります。
ffmpeg と ImageMagick で動画をアニメGIF 変換

これをやる利点は、「mpegなどを貼るまでもない小さい動きでの音声無し動画をレンタルブログに貼りたいとき」とかでしょうか。
以上、覚書でした。

*1:%02dだと2桁の0埋め(00,01...)、%q3dだと3桁のq埋め(qq0,qq1...)という応用ができます

広告を非表示にする