
音声ファイルを非可逆圧縮する、FFmpegのエンコーダは、AAC変換用として3種類【 aac_at 】、【 libfdk_aac 】、【 NativeAAC 】、MP3変換用は1種類の【libmp3lame】がコマンドライン(CLI)で提供されています。 各々のエンコーダはそれぞれに特長(後述)があり、目的に応じて適切なものを選択することがベターです。
しかし、音声ファイルを変換するたびにエンコーダを使い分けるとなると、毎回コマンドライン(CLI)でオプションを打ち分けるのは面倒です。 そこで、本記事では、macOSショートカットを活用し、目的に応じて各エンコーダを選択して、且つビットレートも選択できる音声ファイルを変換するツールを作成してみました。
音声ファイルの変換で使うFFmpeg CLI(コマンドライン)と特長
音声ファイルを変換する時に使用する、各エンコーダのCLI(コマンドライン)を下に示します。 (コマンドラインは、ターミナルのzshやbashシェルから実行します)
各エンコーダの詳細を知りたい時は、【 ▶リンク 】をクリックすると、評価記事やCLIのオプション(赤文字で示す)の意味を参照できます。
command 【 aac_at 】AACエンコーダ ▶リンク ffmpeg -i "変換元ファイル.wav" -acodec aac_at -c:v copy -ar 48000 -ab 320k "変換後のファイル名.m4a" 【 libfdk_aac 】AACエンコーダ ▶リンク ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -c:v copy -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a" 【 NativeAAC 】AACエンコーダ ▶リンク ffmpeg -i "変換元ファイル.wav" -aac_coder twoloop -c:v copy -ar 48000 -ab 320k "変換後のファイル名.m4a" 【libmp3lame】MP3エンコーダ ▶リンク ffmpeg -i "変換元ファイル.wav" -codec:a libmp3lame -c:v copy -ar 48000 -b:a 320k "変換後のファイル名.mp3"
特長
各エンコーダは、下に示す特長があります。
- 【 aac_at 】:macOS限定、劣化量が少ないが、16bit入力なのでCD音源の変換に最適。(cut-off:max22.5khz)
- 【 libfdk_aac 】:劣化量が少ないが、16bit入力なのでCD音源の変換に最適。(cut-off:max20khz)
- 【 NativeAAC 】:24bit入力なのでハイレゾ24bit音源の変換に対応しているが、劣化量からビットレートを250Kbps以上に設定するのがオススメ(cut-off:max22.5khz)
- 【libmp3lame】:24bit入力で、且つ劣化量が少ないので、CD〜ハイレゾ24bitの変換に最適。 (cut-off:max20khz)
注記)cut-offは、ハイレゾ(96khz以上)の音源を変換した時のcut-off周波数です。
「音声ファイルを変換する」ショートカットのワークフロー
Step1:変換元の音声ファイル(wav,flac等々)の複数選択
Step2:選択されたファイルが音声ファイルか判定
(非音声ファイルがあれば停止)
Step3:エンコーダの選択とビットレートの選択
Step4:選択された条件で音声ファイルをFFmpeg CLIで変換
(ファイル変換完了毎に通知する)
同一フォルダに変換された音声ファイル(fs=48khz)が保存される。
AAC/MP3用エンコーダを選択して音声ファイルを変換するショートカットの作成手順
今回のショートカット名は【FFmpeg AAC / MP3 変換】にしました。
macOSショートカット・アプリを起動して「ファイル」>「新規ショートカット」をクリックすると、まっさらなショートカット編集画面が現れます。 ここに必要なアクションを配置して行きます。
Key Points
Macショートカットが対話型UIのため、説明中にあるマジック変数の扱いに最初の内は、多少の戸惑いを伴います。 このマジック変数とは何なのか?、詳しくは下の「参考記事」をご覧ください。
-
-
参考記事macOSショートカットアプリ:これで分かったマジック変数の取扱い
Appleショートカットアプリは簡単にプログラムが組めますが、独特の対話型UIのため特に(シェルスクリプトから実行)アクションに引き継ぐマジック変数の扱いが良く理解出来ませんでした。 今回、ファイル操 ...
ショートカットのワークフロー(Step1〜Step4)に従って説明していきます。
Step
1 変換元の音声ファイルの複数選択
Step1の概要:変換元の音声ファイルを選択(複数可)するために、Finderを表示します。 選択したファイルが非音声ファイルが含まれているかをシェルスクリプトで検査して、非音声ファイルが含まれていれば、”NOT_AUDIO”文字列を出力します。

各アクションの説明
- 【アラート】アクション:このショートカットで何を行うか?概要をダイアログで説明
- 【ファイルを選択】アクション:Finderが表示され、非可逆圧縮したい、音声ファイルを選択(複数選択可)できます。
- 【シェルスクリプトを実行】:選択した音声ファイルをマジック変数で受取り、2行目のfor文で、選択されたファイルをループして、一つ一つのファイルをffprobeで検査して、非音声ファイルが一つでも含まれると、ループから抜け出し”NOT_AUDIO”の文字列をマジック変数として、出力します。
スクリプト内容
|
1 2 3 4 5 6 7 8 9 10 11 |
# 音声ストリームの有無をチェック 非音声なら”NOT_AUDIO”を出力 for f in "$@"; do if ! /opt/homebrew/bin/ffprobe -v error \ -select_streams a \ -show_entries stream=index \ -of csv=p=0 "$f" | grep -q .; then printf "NOT_AUDIO" exit 0 fi done |
Step
2 選択ファイルが音声ファイルか判定
Step2の概要:”NOT_AUDIO”文字列の有無をif文で分岐して、”NOT_AUDIO”があれば、このショートカットを停止し、無ければ、続行します。

各アクションの説明
- 【if文】アクション:【シェルスクリプトを実行】アクションで出力されたマジック変数を受取り、、”NOT_AUDIO”の文字列の有無を調べて、”NOT_AUDIO”があると、次のアクションが実行されます。
- 【アラート】アクション:非音声ファイルが含まれている旨のアラートを表示します。
- 【このショートカットを停止】:ショートカットが停止されます。
Step
3 エンコーダの選択とビットレートの選択
Step3の概要:エンコーダ(4種類)とビットレート(4種類)をリスト表示し選択された項目を出力します。

各アクションの説明
- 【リスト】アクション:エンコーダの4種類を表示
- 【リストから選択】アクション:リストから一つだけエンコーダを選べます。 選ばれたエンコーダの文字列をマジック変数として出力します。
- 【リスト】アクション:ビットレートの4種類を表示
- 【リストから選択】アクション:リストから一つだけビットレートを選べます。 選ばれたビットレートの文字列をマジック変数として出力します。
Step
4 選択された条件で音声ファイルをFFmpegエンコーダ(CLI)で変換
Step4の概要:Step3のリストから選択された項目に従って、Step1で選択された全ての音声ファイルをFFmpeg CLIで変換し、同一フォルダ内にエンコーダ名とビットレートを追記した変換ファイルを保存します。

各アクションの説明
- 【シェルスクリプトを実行】:ファイルは、Step1の【ファイルを選択】アクションのマジック変数を指定します。リストから受取った encorder="選択エンコーダ"とbitrate="選択bitrate" マジック変数です。
8行目は、for文で、選択された音声ファイルをループさせて、
10行目は、case文で、選択されたエンコーダに従って分岐させて、同一フォルダ内に音声ファイルを変換しています。 また、変換されたファイルは、ビットレートとエンコーダ名を付記し、エンコーダCLIのオプション -y で、ファイルの上書きを可能にしています。
25行目は、音声ファイルが変換される毎に、Apple Script を呼び出して「選択ファイルの○ / ○ 番目のファイル変換が終了」した旨の通知を表示しています。 - 【アラート】アクション:音声ファイルの変換が完了したことをダイアログで表示します。
スクリプトの内容
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
encorder="選択エンコーダ" bitrate="選択bitrate" cnt=0 # ファイル処理回数 # FFmpegの -yオプションで上書き許可 for f in "$@"; do case $encorder in "AAC-[aac_at]") /opt/homebrew/bin/ffmpeg -y -i "$f" -acodec aac_at -c:v copy -ar 48000 -ab $bitrate "${f%.*}_chg-[aac_at]$bitrate.m4a" ;; "AAC-[libfdk_aac]") /opt/homebrew/bin/ffmpeg -y -i "$f" -acodec libfdk_aac -c:v copy -ar 48000 -ab $bitrate -cutoff 20000 "${f%.*}_chg-[libfdk_aac]$bitrate.m4a" ;; "AAC-[Native]") /opt/homebrew/bin/ffmpeg -y -i "$f" -aac_coder twoloop -c:v copy -ar 48000 -ab $bitrate "${f%.*}_chg-[Native_aac]$bitrate.m4a" ;; "MP3-[libmp3lame]") /opt/homebrew/bin/ffmpeg -y -i "$f" -codec:a libmp3lame -c:v copy -ar 48000 -b:a $bitrate "${f%.*}_chg-[libmp3lame]$bitrate.mp3" ;; esac # ファイル処理回数のnotification表示 cnt=$((++cnt)) osascript <<EOF display notification "$cnt / $# 番目のファイル変換が終了しました。" with title "選択ファイルの" EOF done |
メモ
作成したショートカットをアプリ(.app)化させる方法
作成したショートカットを通常のアプリ(.app)の様にFinderからダブルクリックして単独で実行できる様にアプリ(.app)化できます。
簡単な手順(実行ファイル化)
- ショートカットアプリを開いて、作成したショートカットを右クリックして
- ファイル > Dockに追加 を選択
- Dockに入れたショートカットを右クリックして、オプション > Finderに表示 を選択
- Finderに表示されたファイルを見ると、ショートカット名に.app が付いて、単独で実行できるアプリになっています。
- Dockに追加された、ショートカットが不要なら、オプション > Dockから削除 します。
作成したショートカットの実行ビデオを観る
このビデオは、2つの音声ファイル(.wav,.flac)を選択した後、AAC【 aac_at 】エンコーダを選択し、更にビットレートを160kbpsを選択している動画です。
音声ファイル変換: Before / After オリジナルファイル Handel Violin Sonata No_4 Vn_Grumiau.wav …(389.1 MB) Handel Violin Sonata No_4 Vn_Grumiau_FLAC.flac …(249.5 MB) ↓↓↓↓↓↓↓ [aac_at]エンコーダで160kbpsのAACに変換後 Handel Violin Sonata No_4 Vn_Grumiau_chg-[aac_at]160k.m4a …(13.6 MB) Handel Violin Sonata No_4 Vn_Grumiau_FLAC_chg-[aac_at]160k.m4a …(13.6 MB)