LoginSignup
3
5

More than 1 year has passed since last update.

AutomatorでFFmpegを呼び出して動画ファイルをGIFに変換するフォルダアクションを作った

Last updated at Posted at 2022-02-27

概要

レビュアーが簡単に挙動を確認できるようにPull RequestにGIFを作成して添付していますが、毎回FFmpegのコマンドを実行することに耐えられなくなったので、Automatorを利用して自動化しました。
おそらく誰しもがこの作業を面倒くさく感じていると思うので、そんな方のために作成したAutomatorフォルダアクションをお手元で再現する手順を紹介します。

環境

  • macOS: 12.0.1
  • FFmpeg: 4.4.1

Automatorフォルダアクションの作成手順

作るものの簡単な説明

指定したフォルダを監視してフォルダ内にファイルが追加されたら処理を実行するフォルダアクションを作ります。
追加するファイルはMOVファイルを想定しています。
その他の動画形式でも動くかもしれませんが検証はしていないので、動かないときは適宜設定を自分で見直して動くように修正してください。

フォルダアクションは指定したフォルダに追加されたファイルごとに決められた処理を実行します。
inputフォルダがフォルダアクションが指定されているフォルダ、outputフォルダが最終的にgifと縮小されたMOVファイルが格納されるフォルダとなります。
フォルダの名称はなんでもいいのですが、わかりやすくするためinput/outputと命名しました。

以下が実行される処理になります。

  1. MOVファイルのサイズを縮小するため、720pで書き出し、outputフォルダに同名で書き出します
  2. 1で生成されたファイルをFFmpegでGIFに変換します

事前準備

FFmpegはmacOSにインストールされていないので、未インストールの場合はまずFFmpegをインストールしてください。
Homebrew を利用するのが簡単だと思います。
導入方法は「Homebrew FFmpeg インストール」などのキーワードでググるとインストール方法に関する記事が見つかると思います。

公式サイトのリンクは以下からどうぞ。
Homebrew 公式
FFmpeg 公式

作成手順

  1. Automatorを起動する
  2. メニューから ファイル > 新規 > フォルダアクション を選択する
  3. 右上に表示されている「フォルダを選択」プルダウンをクリックして「その他...」を選択する
  4. フォルダアクションを設定するフォルダを選択する(このフォルダがinputフォルダとなり、ここに追加したファイルに対して処理が実行される)
  5. 開いたウィンドウに左上に検索フィールドがあるので、そこをクリックして「メディアをエンコード」と入力。検索結果として表示されている「メディアをエンコード」を右のカラムにドラッグ&ドロップする
  6. 設定プルダウンをクリックして「H.264 720p」を選択する(作成されたGIFの解像度が低いと感じる場合は、ここの数値を変えてみると改善されます。ただし、その分GIFのファイルサイズが大きくなります)
  7. 再度検索フィールドをクリックして「AppleScriptを実行」と入力。検索結果として表示されている「AppleScriptを実行」を右のカラムの「メディアをエンコード」の下にドラッグ&ドロップする
  8. 「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
    
    
  9. メニューから ファイル > 保存... を選択して、適当な名前をつけて保存する

作成したフォルダアクションは以下のスクショの通りになっているはず。
スクリーンショット 2022-02-27 16 42 52

2022/04/17 追加

AppleScriptがわからないという声もあったので、Shell Script版に書き換えたものを記載します。
作成手順 の7と8を以下の1と2に置き換えてください。

  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
    

作成したフォルダアクションは以下のようになっているはず

スクリーンショット 2022-04-19 23 50 40

動作確認

以下のGIFのようにMOVファイルをinputフォルダに追加したあと、outputにGIFとMOVが作成されたら成功です。
画面収録 2022-02-27 16 27 49

改善したいところ

  • 縮小したMOVファイルファイルは削除してもよさそう
    • 雑に消したらGIF作成処理中に削除されてGIFが作成されなかったので、delayするとかしないといけなそう

まとめ

このフォルダアクションを使ってたくさんGIFを作ってください!

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5