AAC変換のクイックアクションをShortcuts.appで作る
macOSのShortcuts appにはシェルスクリプトを実行するアクションが備わっています。iOSのShortcuts appではシェルスクリプトを実行できませんが、macOSではシェルを活用することでiOSよりも凝ったショートカットを作れます。
Terminalの使用に慣れていればわざわざショートカットで実行する必要はないように思うかもしれませんが、例えば定型実行するようなコマンドであればショートカットにした方が楽に実行できて便利なこともあります。
今回は、入力に任意のオーディオファイルをとり、出力にAAC変換したオーディオファイルを排出するショートカットの設計を考えてみます。
GUIで簡単に実行できるようにするため、Finderのクイックアクションに対応させてみます。こうするとオーディオファイルのコンテクストメニューからクリックで直接ショートカットを実行できるようになります。数秒後にはデスクトップにAACに変換されたオーディオファイルが出来上がります。
スクリプト自体は大したものではありませんが、ショートカットの入出力の仕組みを理解するサンプルとして読んでいただければと思います。
オーディオファイルを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” の引数に流すのみのシンプルな仕組みです。ついでに処理完了を通知するアクションを最後に実行して完了します。
まずショートカットの詳細を設定します。右側ペインで「クイックアクションとして使用」「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固定にしましたが、さらにショートカットを工夫して、プロンプトでビットレートの入力を尋ねる仕組みにしても良いかもしれません。
おまけ:ショートカットの名前とアイコン
ぱっと見分かりづらいのですが、ショートカットウインドウのタイトル部分が実は編集可能になっているので、クリックして直接テキストを入力できます。アイコン部分をクリックすると用意されている中からシンボルと色を設定できます。
この記事が気に入ったらサポートをしてみませんか?