afconvertはMacOSに標準で搭載されているオーディオファイルを変換することが出来るコマンドラインツールです。
afconvertによるAAC変換は音質的に最右翼の一つですが、メタデータを引き継ぐオプションが見当たりません。
これを補う方法として、ffmpegのコマンドラインを利用してAACファイルにメタデータを後から付加する手段が考えられます。
今回は、コマンドラインをターミナルに打ち込む煩雑さから開放される、Macショートカットアプリを活用したハイレゾ音源にも対応したメタデータ付きAAC変換アプリ(.app)の作成方法を紹介します。 更に音質評価とハイレゾ音源からAAC変換した音源も掲載しています。
使用するコマンドラインについて
AAC変換用として2つのApple Afconvertコマンドラインとメタデータ付加用としてffmpegコマンドラインを組合せます。
AAC変換のショートカット・プログラム(仕様)
この仕様に基づいてショートカット(プログラム)を作成します。
- 作成したショートカットをクリックして実行すると、「ファイル変換(fs=48khz)を行います。」ダイアログが表示され【OK】ボタンを押すと
- ビットレート(320kbps〜128kbps)を選択するダイアログ画面が表示されます。 例えば320kbpsを選択して【OK】ボタンを押すと
- Finder画面に遷移して、AACに変換したい音声ファイルを選択(複数選択可)して【選択】を押します。
- afconvertのAAC変換が完了すると、「ファイル変換が完了しました」ダイアログが表示され【OK】を押して完了です。
- 先ほどFinderで選択した場所を見ると、AACに変換されたファイル(選択ファイル名+_chg-320kbps[afconvert].m4a)が生成されています。 (ファイル末尾にビットレートとafconvertのスタンプが追記されます。)
ショートカットの作成から単独実行できるアプリ化まで
このショートカットは、前回作成したffmpeg [aac_at]ショートカットをモディファイします。
基本的なショートカットのガイドは下のカスタムショートカットを作成するのURLリンクをクリックして参照ください。
Apple公式Macでカスタムショートカットを作成する
URL:https://support.apple.com/ja-jp/guide/shortcuts-mac/apd5ba077760/ma
Step
1 ショートカット作成の事前準備
- Macのショートカットアプリを開き ファイル > 新規ショートカット を選択します。 空の名称未設定ショートカットがショートカットエディタに表示されます。
- 「ショートカット名」をクリックしてから、ショートカットの名前を入力します。 名前を「Afconvert to AAC with meta data」にしました。
- 右のサイドバーからカテゴリ「スクリプティング」を選択し、表示されるリストで「シェルスクリプトを実行」アクションをダブルクリックします。 ショートカットエディタにドラッグすることもできます。
Step
2 「シェルスクリプトを実行」アクションにコードを貼り付ける
「シェルスクリプトを実行」のエリアに後述のシェルスクリプト(bash+AppleScript)コードをコピペします。
「シェルスクリプトを実行」のコード内容
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# エンコーダ名を設定 変換したファイルにエンコーダ名が付加される。 encoder_name="[afconvert]" osascript <<EOF display dialog "ファイル変換(fs=48khz)を行います。" with title "$encoder_name エンコーダ" with text buttons {"OK"} default button 1 EOF # 選択リストダイアログを表示してユーザーにビットレートオプションを選択させる selected_option=$(osascript <<EOF # 選択リストダイアログのアクティブ化(前面表示) tell application "System Events" activate set options to {"320kbps", "256kbps", "160kbps", "128kbps"} set selectedOption to choose from list options with prompt "ビットレート選択:" default items {"320kbps"} with title "$encoder_name エンコーダ" if selectedOption is false then return "" else return selectedOption end if end tell EOF ) # ユーザーがキャンセルした場合はスクリプトを終了 if [ -z "$selected_option" ]; then #echo "No option selected. Exiting." osascript -e 'display alert "ファイル変換を終了します"' exit fi # 選択肢に応じてビットレートオプションを設定 case $selected_option in "320kbps") options="320000" ;; "256kbps") options="256000" ;; "160kbps") options="160000" ;; "128kbps") options="128000" ;; *) echo "Invalid option selected. Exiting." exit 1 ;; esac # ファイル選択ダイアログを表示して複数の入力ファイルを選択 selected_files=$(osascript <<EOF # 日本語対応のfinderを表示させる(前面表示) tell application "System Events" activate set selectedFiles to choose file with prompt "音声ファイル選択(複数選択可能):" with multiple selections allowed set filePaths to "" repeat with aFile in selectedFiles set filePaths to filePaths & POSIX path of aFile & "\n" end repeat return filePaths end tell EOF ) # ユーザーがファイルを選択しなかった場合はスクリプトを終了 if [ -z "$selected_files" ]; then echo "No files selected. Exiting." osascript -e 'display alert "ファイル変換を終了します"' exit fi # 選択されたファイルを処理 # 環境変数IFS(区切り文字)を設定して改行で分割 IFS=$'\n' # ファイル処理回数 cnt=0 for f in $selected_files do # ファイル処理回数のnotification表示 cnt=$((++cnt)) osascript <<EOF display notification "$cnt 番目のファイル変換を行っています。" with title "選択ファイルの" EOF # 空行を除去 f=$(echo $f | tr -d '\r') if [ ! -z "$f" ]; then # エンコーダのコマンドライン変換プロセス #ハイレゾファイルをにfs=48khzにダウンサンプリングしaiff形式にwork fileとして変換 afconvert -d BEI24@48000 --quality 127 -r 127 --src-complexity bats -f AIFF "$f" "${f%.*}_work.aiff" # AACエンコーダのコマンドライン変換プロセス テンポラリファイルとして変換 afconvert -d aac -f m4af -q 127 -s 0 -b $options "${f%.*}_work.aiff" "${f%.*}_temp.m4a" # FFmpegを利用して、テンポラリファイルにメタデータを付加したファイルを出力 /opt/homebrew/bin/ffmpeg -i "${f%.*}_temp.m4a" -i "$f" -map_metadata 1 -codec copy "${f%.*}_chg-$selected_option$encoder_name.m4a" # work fileの削除 rm "${f%.*}_work.aiff" rm "${f%.*}_temp.m4a" fi done osascript -e 'display alert "ファイル変換が完了しました"' echo $selected_option echo $options |
Step
3 AAC変換が成功したらショートカットの完成です
このショートカットをテストするには、ショートカットエディタ右上部の[ ▶ ] をクリックします。
エラーの発生無く、Finderで下の様にAACファイルが生成されていればショートカットの完成です❗
24192k _pink -20db加算.WAV
↓
320kbps設定で生成されたAACファイル:
24192k _pink -20db加算_chg-320kbps[afconvert].m4a
完成したショートカット
このショートカットをダブルクリックすればAAC変換が実行できます。
スポンサーリンク
Step
4 ショートカットを単独で実行できるアプリ化(.app)
作成したショートカットは、Macのショートカットアプリから選択して起動するのは面倒です。 通常のアプリファイルの様にファインダーからダブルクリックして単独で実行できる様にアプリ化するには、
ショートカットを一旦、Dockに入れることで、単独で実行出来る「.app(アプリ)」にできます。 (下の手順参照)
簡単な手順(実行ファイル化)
- ショートカットを開いて、作成したショートカット「Afconvert to AAC with meta data」を右クリックして
- ファイル > Dockに追加 を選択
- Dockに入れた「Afconvert to AAC with meta data」を右クリックして、オプション > Finderに表示 を選択
- Finderに表示されたファイルを見ると、Afconvert to AAC with meta data.app になって、単独で実行できるアプリファイルになります。
- Dockに追加された、ショートカットが不要なら、オプション > Dockから削除 します。
単独実行可能なAAC変換アプリが作成されました。
[Afconvert to AAC with meta data]アプリの音質評価と試聴
次のページで、AAC変換する時の「5つのヒント」』で音質評価し、更に[Afconvert to AAC with meta data]アプリでAAC変換した音源が試聴できます。
結論を言いますと、以前投稿した「AACエンコーダ(アプリ)の評価ランキング」と比較して[Afconvert to AAC with meta data]アプリは、評価ランキングが上位のAACエンコーダと同等以上であることが分かりました。