ffmpeg

ffmpegで動画をgifに変換

ffmpeg
この記事は約4分で読めます。
書いた人
あいりゅー(irilyuu)

メインはApple製品(iPhone・iPad・Mac・Watch)と、SwiftとSwiftUIです。ポケカも好きです。
知人のグラノーラ販売を応援しています。詳しくはこちらで。

あいりゅー(irilyuu)をフォローする
スポンサーリンク

このページについて

このページではffmpegを利用して動画をgifに変換する方法を解説しています。

スポンサーリンク

ffmpegのインストール

ffmpegのインストール・基本的な使い方についてを御覧ください。

スポンサーリンク

ffmpegでgifに変換する

ffmpegでgifへ変換するにはいくつかの注意点があります。まずはgifの仕様からですが、gifそのものは256色しか使えません。そしてgifはループ再生する事もできますが、それについても書いておきます。

シンプルに変換する場合は拡張子を変更するだけで可能です。

ffmpeg -i movie.mp4 after.gif

ただしこれで生成した場合、元の動画よりも容量がでかくなります。これはWebにアップロードするには適さないので、少し軽量化します。

gifの軽量化

一番お手軽なのは-rを利用する方法と映像の縦・横を変更する方法。

フレームレートの変更

ffmpeg -i movie.mp4 -r 30 after.gif

基本的に-rでフレームレートを指定するだけである程度は軽量化できます。-rの後の数値を変更することで適用されます。

映像の縦横を変更

映像の縦横を変更し、容量を削減するには以下。

ffmpeg -i movie.mp4 -vf scale=w:h 出力.gif

これは-rと同時に使うことも出来るので、妥協できる範囲まで絞ると良いと思います。-vf scale=の後のwには横サイズを、hには縦サイズを入力します。横1000の縦600にするには1000:600となります。

元動画の横サイズを自動で半分とかいう使い方をするには、-vf scale=iw/2:-1と記入します。

スポンサーリンク

色味がおかしい場合

ffmpegでgif化すると、色味がおかしい場合があります。これはgifの仕様上、256色しか使えないためですね。そこでpalettegenとpaletteuseを使って、使用する色を動画から抽出して最適化しようというのが、この項目の内容。

ただしこれを実行すると色味は超キレイになりますが、gifの容量は増えます。色味を取るか容量の削減を取るかは用途によります。

ffmpeg -i movie.mp4 -filter_complex "split[a],palettegen,[a]paletteuse" 出力.gif

このように記述することで、動画から使われている色を元にパレットを作成→そのパレットを使ってgif作成という流れになります。

色も容量も取りたい

パレットを使う以上、どうしても容量は増えてしまいます。なのでscaleを使ったり、他のところで容量を削減する必要があります。例として、scaleとsplitのpalettegenとpaletteuseを使ってgifを作成する記述が以下です。

ffmpeg -i movie.mp4 -filter_complex "scale=iw/2:-1,split[a],palettegen,[a]paletteuse" 出力.gif

ただしこれも容量を大幅に削減出来るわけではなく、paletteを使っている以上は容量が大きくなりがちです。

ffmpegで作ったgifの参考比較

ffmpegで実際に作ったgifの参考と比較です。

元動画→movie.mp4(fps30、横1920、縦1342)容量は13MBです。

iPad ProでMJの対局の様子を撮影したものを一部切り抜き、フレームレートを30にしたものがベースとなっています。

オプション容量出来栄え(主観)
gif化のみ101.39MB色味が変わる
palette使用888.9MB色味はキレイだが容量はすごい
fps15のみ71.7MB容量は少ないが見た目はお察し
fps15とパレット使用480.5MBfps30よりは容量は減るし見た目もいいが、それでも容量はすごい
scaleを半分にしてgif28MBエンコード速度は爆速だが見た目はやはり
scale半分とパレット使用214.8MB容量は増えるがキレイはキレイ

色々と試してみて、結局の所gifでなければならない場面以外は超軽量mp4で良いと思います。gif化しなければならない場合はパレットを使用して出来栄えを取るか、出来栄えを捨てて軽量化を取るか、スケールを変更してパレットを使用して容量も画質も妥協するかは自由です。

参考程度にパレットを使用したgifから切り抜いた1枚と、パレットを使用していないgifから切り抜いた1枚をそれぞれ掲載しておきます。

以下はパレット使用したやつです。分かる人には分かると思いますが、ドラ表示牌の白です。

パレット使用時パレット未使用時
paletteuseを使用した物パレット未使用

かなりじっくり見比べると、全体的に点が目立つと思います。

ffmpegの関連記事

その他のオプションや使い方などは以下をどうぞ。

ffmpeg使い方・オプション一覧

タイトルとURLをコピーしました