お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。

ffmpegで動画からgifを作る

投稿日:ソフトウェア::ffmpeg

ffmpegを使ってmp4などの動画からgifを作る方法。

スクリーンレコーダーなどで画面の録画をとってGitHubとかに載せたいけど動画よりGifみたいにパッと見れる方式がいいとか、そういうユースケース。

音声を抜けばMP4のほうが軽かったりするので、容量上の利点はないが、動画と違ってプレイヤーがなく、プレーンに見れるのはメリットだと思う。

またGIFを作ったことがある人なら知っていると思うがGIFは保存方法で画質がかなり変わる、そのため今回はいくつかの方法も比較していく。

元の動画

やり方

ループ再生させるために-plays 0を付けているが、単にGIFに落とすだけであれば、このオプションはなくていい。

単にGIFに落とす

もっとも単純な方法で、保存時の容量も1,279,855byteと小さくなるが、画質が荒くなる欠点がある。

ffmpeg -i input.mp4 -plays 0 output.gif

綺麗なGIFに落とす

非常に綺麗なGIFが出来るが、24,186,455byteと、非常にサイズが大きくなる欠点がある。

ffmpeg -i input.mp4 -filter_complex "[0:v] split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=new=1" -plays 0 output.gif

画質と容量を両立させる

サイズが3,749,739byteと、1/7ほどのサイズまで圧縮できているが、画質も悪くない。これがいい感じの落としどころだと思う。

ffmpeg -i input.mp4 -filter_complex "[0:v] split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=dither=none" -plays 0 output.gif

おまけ

APNGに落とす

画質はいいが、ファイルサイズが26,110,504byteと大きくなりすぎる。劣化なしでやりたい場合くらいしか選択肢に挙がらないだろう。

ffmpeg -i input.mp4 -plays 0 output.apng

音声を抜いたMP4にする

ビデオフレームを複製し、オーディオを落としたMP4にする方法。ファイルサイズが2,019,647byteと小さく、元の画質を維持できるため、動画であることを許容できるならこれが一番無難だ。

ffmpeg -i input.mp4 -c:v copy -an output.mp4

参考