Mac フォルダに入れた動画を自動的に圧縮する方法【FFmpeg x Automator フォルダアクション】

Takashi Fujisakiのアバター
3950文字
悩んでいる人

Macで動画を圧縮する機会がめっちゃあるんだけど、面倒だからもうどっかのフォルダに入れたら勝手に圧縮してくれるとか、そんな夢のようなこと、できませんか!?

上から目線の人

夢じゃないよ。できるよ。

というわけで今回は、どっかのフォルダに動画を入れるだけで動画を圧縮してくれる夢のようなことをMacでできるようにしていきます。

はじめに

macOS 13.1 Ventura / M1 Pro Macbook Pro 2021での解説となります。

必要なツールと準備

今回はAutomatorFFmpegの2つを使います。

AutomatorはMacに標準でインストールされている、Macを自動化するためのアレやコレやを作るためのアプリです。既にインストールされているので何もしなくてOK。

FFmpegは動画ファイルの変換を司る神コマンドツールです。CUI(ターミナル)を使って、動画ファイルのエンコード・デコード、変換などあらゆる作業をこなすことができます。

FFmpegのインストール

というわけでまずはFFmpegをインストールしましょう。FFmpegのインストール方法についてはここでは割愛しますので、おググりください。

Homebrewを使っている方ならコマンドでインストールできます。

% brew install ffmpeg

インストールしたら、Homebrewのインストール場所を確認しておきましょう。

% which ffmpeg
/opt/homebrew/bin/ffmpeg

Homebrewでインストールした僕の場合 /opt/homebrew/bin/ffmpeg の場所にありました。あとで使うのでメモっておきましょう。

Automatorでフォルダアクションワークフローを作成する

ゴールの確認

最初に、今回やりたいことを箇条書きで挙げておきます。

  • 特定のフォルダに動画ファイルを入れると、自動的に圧縮がはじまる
  • もちろん複数のファイルを同時に入れてもOK
  • 圧縮済みのファイルは compressed フォルダにまとめて保存される
  • 圧縮開始・完了時に通知が来る

さて、まずは動画を投げ込むためのフォルダを作りましょう。場所は名前フォルダの直下などどこでもいいです。ここでは compress-video というフォルダ名にしました。

ワークフローを作成する

お次はいよいよAutomatorの出番。Automatorアプリを起動しましょう。

Automator アイコン
Automator

「新規作成 -> フォルダアクション」を選択。

まずは下記を参考に進めます。

  • 右上の「”フォルダアクション”は、次の場所に追加されたファイルやフォルダを受け取る」で先ほど作成したフォルダを指定
  • 左側のペインのライブラリ -> ユーティリティ -> 「シェルスクリプトを実行」をダブルクリック(または右側へドラッグ&ドロップ)
  • シェルを /bin/zsh に変更
  • 入力の引き渡し方法を「引数として」に変更

シェルスクリプト入力部分には下記をペーストします。

次に、FFMPEG_PATH を、先ほど調べたFFmpegのインストールされているパスに差し替えてください。

# 対応する拡張子のリスト(追加または削除可能)
EXTENSIONS="avi flv m4v mkv mov mp4 wmv"

# ffmpegのパス
FFMPEG_PATH="/opt/homebrew/bin/ffmpeg"

for f in "$@"
do
  # ファイル名、拡張子、ディレクトリの取得
  FILE=$(basename "$f")
  EXT="${FILE##*.}"
  DIR=$(dirname "$f")

  # 変換先のディレクトリパス
  COMPRESSED_DIR="$DIR/compressed"

  # compressed ディレクトリの作成(存在しない場合)
  mkdir -p "$COMPRESSED_DIR"

  # 大文字を小文字に変換
  EXT_LOWERCASE=$(echo "$EXT" | tr '[:upper:]' '[:lower:]')

  # ファイルが動画であるかどうかをチェック
  if [[ $EXTENSIONS =~ $EXT_LOWERCASE ]]
  then
    # ファイル名から拡張子を除いたもの
    BASENAME="${FILE%.*}"

    # ffmpegでの変換開始の通知
    osascript -e 'display notification "$FILE" with title "動画の圧縮を開始"'

    # ffmpegの変換
    "$FFMPEG_PATH" -y -i "$f" -crf 24 "$COMPRESSED_DIR/$BASENAME.compressed.mp4"

    # ffmpegでの変換完了の通知
    osascript -e 'display notification "$FILE" with title "動画の圧縮を完了"'
  fi
done

余談ですが、このスクリプトはGPT-4に作ってもらったものです。GPT-4エモすぎ…。

スクリプトの内容をちょっと解説

まず、アクションフォルダに入れられたファイルのうち、動画ファイル以外を処理から除外するため、EXTENSIONS には自動的に変換する動画の拡張子を指定しています。必要に応じて追加・削除してください。ちなみに、ファイル側の拡張子が .MP4 のように大文字でもちゃんと処理されますので大丈夫です。

まず、圧縮後のファイルは、直下の compressed フォルダの中に保存されるようになっています。compressed フォルダは、なければ自動で作成されるので、作る必要はありません。

また、圧縮後のファイル名は たとえば movie.mp4 -> movie.compressed.mp4 のようにリネームされて保存されます。

ffmpegのコマンドについては適宜変更してください。(# ffmpegの変換 コメントの部分)コマンドの詳細はFFmpegの公式サイトにてご確認ください。

また、圧縮処理の開始時と終了時にMacのGUIに通知が来るようにしています。開始時のコメントは不要だよ、なんて場合は、コメントアウトするなどしてください。

.workflowファイルの保存先を確認する

さて、できたら 動画を保存.workflow という名前(任意)で保存します。

ちなみに、保存される場所はここです↓

~/Library/Workflows/Applications/Folder Actions

このフォルダを開いて保存されていることを確認するには、Finderの「移動」コマンドを使いましょう。

デスクトップの適当な場所をクリックしてFinderをアクティブにしてから、「メニューバー -> 移動」。または command + shift + G で下のウインドウを開き、上記のパスをコピペして enter

フォルダが開き「動画を保存.workflow」が保存されていることが確認できればOK。逆に、ここに保存されている = ワークフローがインストールされている、ということになります。

実際に動くかやってみる

さて、実際にやってみましょう。

compress-video フォルダに、圧縮したい動画を6個まとめてドラッグ&ドロップ。

圧縮開始の通知が表示され、圧縮が始まりました。

ちなみに、圧縮作業中(Automator稼働中)はメニューバーに歯車マークが表示されます。

全部終わりました。compressedフォルダに圧縮された動画がちゃんと保存されていますね。

というわけで、今回のミッションは無事コンプリート!

まとめ

MacにプリインストールされているAutomatorのフォルダアクション機能を使うことで、フォルダにファイルをぶっ込むだけでまとめて処理をしてくれる、なんてことができるようになります。

今回は動画の圧縮ということで、FFmpegと組み合わせて作りましたが、Automatorには元々Macを操作するためのアクションがたくさん用意されていますので、GUI上で組み合わせていくだけでさまざまな処理を実現できます。

というわけで以上です。それではよき動画圧縮生活を!