AAC変換のクイックアクションをShortcuts.appで作る

macOSのShortcuts appにはシェルスクリプトを実行するアクションが備わっています。iOSのShortcuts appではシェルスクリプトを実行できませんが、macOSではシェルを活用することでiOSよりも凝ったショートカットを作れます。

Terminalの使用に慣れていればわざわざショートカットで実行する必要はないように思うかもしれませんが、例えば定型実行するようなコマンドであればショートカットにした方が楽に実行できて便利なこともあります。

今回は、入力に任意のオーディオファイルをとり、出力にAAC変換したオーディオファイルを排出するショートカットの設計を考えてみます。

GUIで簡単に実行できるようにするため、Finderのクイックアクションに対応させてみます。こうするとオーディオファイルのコンテクストメニューからクリックで直接ショートカットを実行できるようになります。数秒後にはデスクトップにAACに変換されたオーディオファイルが出来上がります。

コンテクストメニューの様子
ショートカットを実行する際のUIはこれだけです。

スクリプト自体は大したものではありませんが、ショートカットの入出力の仕組みを理解するサンプルとして読んでいただければと思います。

オーディオファイルをAACに変換するシェルスクリプト

macOSにはafconvertコマンドが標準で備わっているので、これを使ってAACに変換する処理を実現します。ffmpegなどの他のコマンドでも実装できますが、私の環境ではafconvertの方が高速で処理できるようでした。

今回作るスクリプトでは、入力ファイルのファイル名を継承して拡張子のみm4aに書き換えた “FILENAME.m4a” でAACファイルを出力するようにし、ビットレート等のオプションは固定値とします。

#!/bin/sh

ext=".m4a"
inputfile=$1

## "ファイル名.拡張子"
filename_ext=${inputfile##*/}

## ファイル名から拡張子を取り除く
filename=${filename_ext%.*}

## 出力先ファイルパスを作成
output=${opt_out:-$filename$ext}

## 160kbps/VBRのAAC(m4a)に変換
afconvert -v -d aac -s 2 -b 160000 "$inputfile" "$output"

このスクリプトに実行権限を付与し、ファイル名 “aaccnv.sh” としてパスの通った場所(/usr/local/binなど)に置いておきます。例えばスクリプト単体でも以下のように使えます。実行するとカレントディレクトリに “AUDIO.m4a” が出力されます。

% aaccnv.sh ~/PATH/TO/AUDIO.wav

クイックアクション型ショートカットとして実装する

ショートカットはファイルの入力をとり、そのファイルをシェルスクリプトに渡してさっき作った “aaccnv.sh” の引数に流すのみのシンプルな仕組みです。ついでに処理完了を通知するアクションを最後に実行して完了します。

ショートカットの全体像
[外部からの入力] → [シェルスクリプトを実行] → [aaccnv.shへの入力]

まずショートカットの詳細を設定します。右側ペインで「クイックアクションとして使用」「Finder」にチェックを入れておきます。「サービスメニュー」は外しておいても問題ありません。

ショートカットの詳細設定
「クイックアクションとして使用」「Finder」にチェックを入れる。

「シェルスクリプトを実行」アクションは、stdinまたは引数として入力を渡すことができます。今回は「引数として」を指定し、入力は「ショートカットの入力」にします。

入力には「ファイル」のみを指定します。

入力の様子

これで大体出来上がりですが、実行してみてわかるように複数ファイルの同時変換処理がまだできません。複数同時変換に対応するには、シェルスクリプトを次のように書き換えます。

複数の入力に対応する

複数の入力に対応したスクリプト

“for arg in "$@" do ~ done” で複数の引数を順繰りできるので、このfor構文内で aaccnv スクリプトを順番に実行するようにします。さらに末尾に“&”をつけてバックグラウンドプロセスにし、doneの後に“wait”をつけます。これでAAC変換処理が並列実行できるようになります。

cd ~/Desktop

for arg in "$@"
do
  aaccnv.sh "${arg}" &
done
wait

参考:

ショートカット自体は元から複数のファイル入力にも対応しているので、これだけで複数のオーディオファイルを同時にAAC変換し出力する処理が出来上がります。Terminalを使ったコマンドラインでの操作では幾らかのスクリプトを書く必要がありますが、定型処理をクイックアクションにすればクリック一つで実行出来、非常に便利になります。今回はAACエンコードの設定を160kbps/VBR固定にしましたが、さらにショートカットを工夫して、プロンプトでビットレートの入力を尋ねる仕組みにしても良いかもしれません。

実行するとaudio1.m4a, audio2.m4aが出来上がる。

おまけ:ショートカットの名前とアイコン

ぱっと見分かりづらいのですが、ショートカットウインドウのタイトル部分が実は編集可能になっているので、クリックして直接テキストを入力できます。アイコン部分をクリックすると用意されている中からシンボルと色を設定できます。

表示が小さく検索機能も無いので使い勝手が非常に悪いです。今後のアップデートに期待することにしましょう。。

この記事が気に入ったらサポートをしてみませんか?