コンテンツにスキップ

動画をGIFに変換

FFmpegを使用して、動画ファイル(MOV、MP4など)をGIFアニメーションに変換する方法を説明します。

Terminal window
brew install ffmpeg
Terminal window
ffmpeg -i input.mov output.gif

フレームレートを指定した変換

Section titled “フレームレートを指定した変換”
Terminal window
# 24fpsで変換
ffmpeg -i input.mov -r 24 output.gif
Terminal window
# 幅640pxに縮小(アスペクト比は維持)
ffmpeg -i input.mov -vf scale=640:-1 output.gif
Terminal window
# パレット生成を使用した高品質GIF
ffmpeg -i input.mov -vf "fps=15,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Terminal window
# 5秒目から10秒間を切り出し
ffmpeg -ss 5 -t 10 -i input.mov -r 24 output.gif

画面録画をGIFに変換(最適化版)

Section titled “画面録画をGIFに変換(最適化版)”
Terminal window
# 画面録画を最適なサイズと品質でGIFに変換
ffmpeg -i screenrecording.mov \
-vf "fps=15,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
-loop 0 \
demo.gif
Terminal window
# エラー画面などの記録用(低フレームレート、小サイズ)
ffmpeg -i error.mov -r 10 -vf scale=600:-1 error.gif
Terminal window
# gifsicleを使用した最適化
brew install gifsicle
# 最適化レベル3で圧縮
gifsicle -O3 input.gif -o output.gif
# 色数を減らして圧縮
gifsicle -O3 --colors 128 input.gif -o output.gif

.zshrcに追加すると便利:

Terminal window
# 動画をGIFに変換(最適化付き)
alias mov2gif='function _mov2gif() {
ffmpeg -i "$1" -vf "fps=15,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "${1%.*}.gif"
}; _mov2gif'
# 画面録画用GIF変換
alias rec2gif='function _rec2gif() {
ffmpeg -i "$1" -r 24 -vf scale=1024:-1 "${1%.*}.gif"
}; _rec2gif'

使用例:

Terminal window
mov2gif recording.mov # recording.gif が生成される
rec2gif demo.mov # demo.gif が生成される

大きな動画ファイルの場合、メモリ不足になることがあります:

Terminal window
# より少ないメモリで処理(処理は遅くなる)
ffmpeg -i input.mov -r 15 -vf scale=400:-1 output.gif

GIFは最大256色なので、動画によっては色の劣化が発生します。パレット生成を使用することで改善できます。