概要
レビュアーが簡単に挙動を確認できるようにPull RequestにGIFを作成して添付していますが、毎回FFmpegのコマンドを実行することに耐えられなくなったので、Automatorを利用して自動化しました。
おそらく誰しもがこの作業を面倒くさく感じていると思うので、そんな方のために作成したAutomatorフォルダアクションをお手元で再現する手順を紹介します。
環境
- macOS: 12.0.1
- FFmpeg: 4.4.1
Automatorフォルダアクションの作成手順
作るものの簡単な説明
指定したフォルダを監視してフォルダ内にファイルが追加されたら処理を実行するフォルダアクションを作ります。
追加するファイルはMOVファイルを想定しています。
その他の動画形式でも動くかもしれませんが検証はしていないので、動かないときは適宜設定を自分で見直して動くように修正してください。
フォルダアクションは指定したフォルダに追加されたファイルごとに決められた処理を実行します。
inputフォルダがフォルダアクションが指定されているフォルダ、outputフォルダが最終的にgifと縮小されたMOVファイルが格納されるフォルダとなります。
フォルダの名称はなんでもいいのですが、わかりやすくするためinput/outputと命名しました。
以下が実行される処理になります。
- MOVファイルのサイズを縮小するため、720pで書き出し、outputフォルダに同名で書き出します
- 1で生成されたファイルをFFmpegでGIFに変換します
事前準備
FFmpegはmacOSにインストールされていないので、未インストールの場合はまずFFmpegをインストールしてください。
Homebrew を利用するのが簡単だと思います。
導入方法は「Homebrew FFmpeg インストール」などのキーワードでググるとインストール方法に関する記事が見つかると思います。
公式サイトのリンクは以下からどうぞ。
Homebrew 公式
FFmpeg 公式
作成手順
- Automatorを起動する
- メニューから
ファイル > 新規 > フォルダアクション
を選択する - 右上に表示されている「フォルダを選択」プルダウンをクリックして「その他...」を選択する
- フォルダアクションを設定するフォルダを選択する(このフォルダがinputフォルダとなり、ここに追加したファイルに対して処理が実行される)
- 開いたウィンドウに左上に検索フィールドがあるので、そこをクリックして「メディアをエンコード」と入力。検索結果として表示されている「メディアをエンコード」を右のカラムにドラッグ&ドロップする
- 設定プルダウンをクリックして「H.264 720p」を選択する(作成されたGIFの解像度が低いと感じる場合は、ここの数値を変えてみると改善されます。ただし、その分GIFのファイルサイズが大きくなります)
- 再度検索フィールドをクリックして「AppleScriptを実行」と入力。検索結果として表示されている「AppleScriptを実行」を右のカラムの「メディアをエンコード」の下にドラッグ&ドロップする
- 「AppleScriptを実行」のテキストエリアに以下のコードをペーストする(エラーになる場合はインデントをすべてタブに変換してください)
on removeExtension(thisName) if thisName contains "." then set thisName to (the reverse of every character of thisName) as string set x to the offset of "." in thisName set thisName to (text (x + 1) thru -1 of thisName) set thisName to (the reverse of every character of thisName) as string end if return thisName end removeExtension on run {input, parameters} -- ffmpegのフルパス set ffmpegPath to "/opt/homebrew/bin/ffmpeg" -- ffmpegのoption set options to " -vf scale=320:-1 -r 24 " repeat with targetFile in input tell application "System Events" set inputFilename to name of (get properties of targetFile) end tell set inputFilePath to quoted form of (POSIX path of targetFile) set outputFilePath to quoted form of (my removeExtension(POSIX path of targetFile) & ".gif") do shell script ffmpegPath & " -i " & inputFilePath & options & outputFilePath end repeat return input end run
- メニューから
ファイル > 保存...
を選択して、適当な名前をつけて保存する
作成したフォルダアクションは以下のスクショの通りになっているはず。
2022/04/17 追加
AppleScriptがわからないという声もあったので、Shell Script版に書き換えたものを記載します。
作成手順 の7と8を以下の1と2に置き換えてください。
- 再度検索フィールドをクリックして「シェルスクリプトを実行」と入力。検索結果として表示されている「シェルスクリプトを実行」を右のカラムの「メディアをエンコード」の下にドラッグ&ドロップする
- 「シェルスクリプトを実行」の右上にある「入力の引き渡し方法」を「引数として」に変更して、テキストエリアに以下のコードをペーストする
FFMPEG=/opt/homebrew/bin/ffmpeg for FILE_PATH in "$@" do OUTPUT_PATH=`echo ${FILE_PATH:a:r}` $FFMPEG -i $FILE_PATH -vf scale=320:-1 -r 24 ${OUTPUT_PATH}.gif done
作成したフォルダアクションは以下のようになっているはず

動作確認
以下のGIFのようにMOVファイルをinputフォルダに追加したあと、outputにGIFとMOVが作成されたら成功です。
改善したいところ
- 縮小したMOVファイルファイルは削除してもよさそう
- 雑に消したらGIF作成処理中に削除されてGIFが作成されなかったので、delayするとかしないといけなそう
まとめ
このフォルダアクションを使ってたくさんGIFを作ってください!