PIYO - Tech & Life -

mp4などをGIFに変換するシェルスクリプト改変版

キャプチャ動画をブログに貼るときはGIFに変換して貼るのですが、Photoshopを使ってGIF書き出しをやっていてすごく手間だなぁと思っていたときにちょうど見かけたid:shu223さんのこちらの記事。

シェルスクリプトでmp4からアニメーションgifを生成する - Over&Out その後

ここで紹介されていたスクリプトを少し改変してもう少し自由度を高くしてみました。

必要なコマンドのインストール

詳しい手順は引用記事にお任せして、箇条書きで書いておきます。

  • $ brew install ffmpeg でffmpegをインストール
  • https://xquartz.macosforge.org/ から XQuartzをインストール
  • $ brew install gifsicle でgifsicleをインストール

gifmaker.shを作成

パスが通っている場所にスクリプトを置きます。

元記事と異なるのは、変換後の動画サイズを固定ではなく可変(元動画を拡大、縮小する形)にしたところです。

こんなふうに使います。

$ gifmaker.sh [対象ファイル] [拡大/縮小率(パーセント)]

# 例
$ gifmaker.sh capture.mov 50

少しわかりづらいところはこの部分かな。元動画のサイズを調べたあと引数のパーセンテージを掛けて変換後のサイズを算出しています。

# ffmpeg -i [動画ファイル] とやるとファイルの情報が標準エラーに出るのでそのテキストを解析して幅と高さを得る
WIDTH=`ffmpeg -i "$SRC"  2>&1 > /dev/null  | grep Stream | grep -o "[1-9][0-9]\+x[1-9][0-9]\+" | cut -d x -f1`
HEIGHT=`ffmpeg -i "$SRC"  2>&1 > /dev/null  | grep Stream | grep -o "[1-9][0-9]\+x[1-9][0-9]\+" | cut -d x -f2`

# 引数の拡大/縮小率を掛けあわせて変換後のサイズを得る
WIDTH=`expr $WIDTH \* $RATIO / 100`
HEIGHT=`expr $HEIGHT \* $RATIO / 100`

# 計算したサイズを使って変換!
ffmpeg -loglevel panic -ss 0 -i "$SRC" -r 12 -an -f image2 -s "$WIDTH"x"$HEIGHT" "./temp/%03d.gif"

ここまでやっておけば、キャプチャしたmovなどの動画を縮小しつつGIFアニメにできますね。我ながら便利。