UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

ffmpegを使って、mp4やmov形式の動画からGIFアニメを作成する手順について

Gifアニメはお手軽におもしろコンテンツを作るのに便利ですよね。

動画ほど重くないし、わざわざプレイヤーを訪問者にクリックしてもらわなくても勝手に再生されるという利点があります。

今回はmp4形式の動画から1MB以下のGifアニメを作成するデモを実行します。

利用するソフトウェアはオープンソースのffmpegです

f:id:mochizuki_p:20170526203656p:plain

インストールは

MacOSの場合であれば以下で一発です。

brew install ffmpeg

今回利用する例の動画として

Pen-Pineapple-Apple-Pen_PIKO-TARO.mp4

を用意します。

この動画ファイルが置いてあるのと同一ディレクトリに移動して任意の箇所を切り出します。

ここで重要なオプションは

オプション 説明
-i 入力データを指定 Pen-Pineapple-Apple-Pen_PIKO-TARO.mp4
-ss 切り出したい箇所の開始時間を{時間}:{分}:{秒}で指定 00:00:15
-t 切り出したい動画の長さを{時間}:{分}:{秒}で指定 00:00:10

入力データに関してはffmpegが対応している形式は全て大丈夫なようです。ここではmp4を利用していますが、他の記事ではmovを利用している例が多かったです。

そして最後に出力ファイルの名前を指定します。

ffmpeg -i Pen-Pineapple-Apple-Pen_PIKO-TARO.mp4 -ss 00:01:04 -t 00:00:8 cut.mp4

すると同一ディレクトリに切り出された動画ファイルが出力されます。

2.動画ファイルをGIFアニメに変換

次にこの切り出した10秒間の動画をGIFアニメに変換します。

オプション 説明
-i 入力データを指定 cut.mp4
-v 変換処理に関する詳細情報を指定 warning
-vf ビデオフィルター・ファイル変換についてのオプションを指定 scala=300:-1
-r フレームレート・1秒あたりのGIF画像の枚数を指定、数値が多いほどアニメが滑らかになるが、その分重くなる 30
-y 出力ファイルの名前と拡張子を指定 PPAP30.gif

この時、特に重要になるのは-rで指定できるフレームレートで、実際にこの値を変更することで、どのようにGIFアニメの滑らかさが変わっていくのか見てみよう

上から順にそれぞれ30,15,8,5のフレームレートで変換してみた

PPAP30.gif: 2.2MB

ffmpeg -v warning -i cut.mp4 -vf scale=300:-1 -r "30"  -y PPAP30.gif

f:id:mochizuki_p:20170526202538g:plain

PPAP15.gif 1.2MB

ffmpeg -v warning -i cut.mp4 -vf scale=300:-1 -r "15"  -y PPAP15.gif

f:id:mochizuki_p:20170526203006g:plain

PPAP8.gif 669KB

ffmpeg -v warning -i cut.mp4 -vf scale=300:-1 -r "8"  -y PPAP8.gif

f:id:mochizuki_p:20170526202922g:plain

PPAP5.gif 427KB

ffmpeg -v warning -i cut.mp4 -vf scale=300:-1 -r "5"  -y PPAP5.gif

f:id:mochizuki_p:20170526202853g:plain

実際に見てもらえればわかるがアニメの滑らかさとファイルの容量はトレードオフになっている。

つまり、綺麗なアニメを作ろうとすれば、必然的にファイルは重くなるというわけだ。