ショートカット
例えば、FFmpegのAAC及びMP3用エンコーダは多数ありその特徴に合わせて一々、ターミナルを介してコマンドラインを実行しなければならず、変換作業が面倒です。 そこで、Macのショートカットアプリでショートカットを作成しておけば変換作業の自動化(アプリ化)が図れます。
Apple公式ショートカット ユーザガイド
URL:https://support.apple.com/ja-jp/guide/shortcuts-mac/apd5ba077760/mac
macOS Montereyから導入されたショートカットアプリは、ユーザーがカスタム ワークフローを作成し、Mac 上のさまざまなタスクを自動化できる強力な自動化ツールです。
今まで当ブログで、AAC変換の作業効率UPのためショートカットやAutomatorを紹介してきましたが、アクションが多く冗長でした。 これを改善しシェルスクリプト(bash+Applescript)一本のプログラムに集約して新たなショートカットを作成しました。
今回は、FFmpegの[aac_at ]エンコーダー(前回記事参照)を使って雛形のショートカットを作成し、複製した雛形を手直しすることで簡単に他のFFmpegエンコーダーにも横展開が出来る手順を紹介します。
なお、多少手直しが必要ですが、Appleのafconvert等のエンコーダへの横展開も可能です。
FFmpegのAAC及びMP3用エンコーダについて
FFmpegのコマンドライン AAC及びMP3用エンコーダは、4種類あります。 下に示すように各々に特徴があり、使途に合わせて使い分けするのがベターです。
1) FFmpegエンコーダの特徴
Cut-Off周波数 48khz 320kbps | ||||||
エンコーダ 記事へリンク | 形式 | 入力bit深度 | from fs=48khz | from fs=192khz | 対応OS | FFmpeg公式 品質順位 |
aac_at | AAC | 16bit | 24khz | 22.5khz | macOS | 1位 |
libfdk_aac | 16bit | 20khz | 20khz | Win macOS | 2位 | |
Native AAC | 24bit | 24khz | 22.5khz | Win macOS | 3位 | |
libmp3lame | MP3 | 24bit | 20.2hz | 20.2khz | Win macOS | ー |
AAC変換の使い分け
- CD等の16bit音源をAAC変換する場合、音質順位が高いと言われる【 aac_at 】や【 libfdk_aac 】が最適と思います。
- ハイレゾの24bit音源をAAC変換する場合、24bit入力に対応している【 NativeAAC 】が適していますが、音質順位が最も低いので出来だけビットレートを高め250Kbps以上で変換する必要があります。
2) FFmpegのコマンドライン(CLI)
command 【 aac_at 】 ffmpeg -i "変換元ファイル.wav" -acodec aac_at -c:v copy -ar 48000 -ab 320k "変換後のファイル名.m4a" 【 libfdk_aac 】 ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -c:v copy -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a" 【 NativeAAC 】 ffmpeg -i "変換元ファイル.wav" -aac_coder twoloop -c:v copy -ar 48000 -ab 320k "変換後のファイル名.m4a" 【libmp3lame】 ffmpeg -i "変換元ファイル.wav" -codec:a libmp3lame -c:v copy -ar 48000 -b:a 320k "変換後のファイル名.mp3"このコマンドラインのピンク文字がオプションを示し、サンプルレート48khz、ビットレート320kbps(CBR)、でAAC変換されます。 詳しくは、上表中にある、記事へリンクをクリックして夫夫のエンコーダ記事を参照してください。 また、-c:v copy オプションで、変換元音声ファイルにアートワーク画像があれば、アートワークが継承されま。
3) FFmpeg のインストールについて
コマンドライン(CLI)を実行するには、予めHomebrew を経由して、FFmpegをMaxOSにインストールしておく必要があります。 詳しくは、「FFmpeg libfdk_aacエンコーダをハイレゾピュアー音源で音質評価してみました。」記事を参照してください。
ショートカットの雛形作成
今回、雛形として作成するショートカットは、[aac_at]エンコーダにしました。 この雛形ショートカットに倣えば、後述する様に、他のエンコーダも簡単にショートカットを作成出来ます。
ショートカットの基本仕様;
サンプルレートは48khzに統一し、ビットレートが変えられ、複数の音声ファイルを一括変換出来ることとしました。 また、変換後のファイルに、設定されたビットレートとエンコーダ名が付加される様にしました。
基本的なガイドは下のカスタムショートカットを作成するのURLリンクをクリックして参照してください。
Apple公式Macでカスタムショートカットを作成する
URL:https://support.apple.com/ja-jp/guide/shortcuts-mac/apd5ba077760/ma
Step
1 ショートカット作成の事前準備
- Macのショートカットアプリを開き ファイル > 新規ショートカット を選択します。 空の名称未設定ショートカットがショートカットエディタに表示されます。
- 「ショートカット名」をクリックしてから、ショートカットの名前を入力します。 今回の雛形はFFmpegの[aac_at ]エンコーダを使いますので名前を「FFmpeg aac_at with Artwork」にしました。
- 右のサイドバーからカテゴリ「スクリプティング」を選択し、表示されるリストで「シェルスクリプトを実行」アクションをダブルクリックします。 ショートカットエディタにドラッグすることもできます。
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 |
# エンコーダ名を設定 変換したファイルにエンコーダ名が付加される。 encoder_name="[aac_at]" 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="320k" ;; "256kbps") options="256k" ;; "160kbps") options="160k" ;; "128kbps") options="128k" ;; *) 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 # エンコーダのコマンドライン変換プロセス /opt/homebrew/bin/ffmpeg -i "$f" -acodec aac_at -c:v copy -ar 48000 -ab $options "${f%.*}_chg-$options$encoder_name.m4a" fi done osascript -e 'display alert "ファイル変換が完了しました"' |
Step
3 テストして成功したらショートカット(雛形)の完成です
このショートカットをテストするには、ショートカットエディタ右上部の[ ▶ ] をクリックします。
下の動画をご覧ください。
「ショートカット」テスト 動画
Finderで下の様にAACファイルが生成されていればショートカットの完成です❗
変換元の音源ファイル:
24192k _pink -20db加算.WAV
↓
160kbps設定で生成されたAACファイル:
24192k _pink -20db加算_chg-160k[aac_at].m4a
スポンサーリンク
雛形ショートカットに倣って他のFFmpegエンコーダを組込む手順
Step
1 先ほど作った「FFmpeg aac_at with Artwork」雛形ショートカットを複製します。
- 雛形ショートカットの複製
雛形ショートカットを選択して右クリックして、「複製」と選択すると、雛形ショートカット名の末尾に2が付加されて複製されます。 - 複製した「ショートカット」の名称を変更
複製した「ショートカット」を右クリックしてから、名称変更を選び、FFmpegエンコーダに合う名前(例えば、MP3の[libmp3lame]エンコーダを組込むならFFmpeg libmp3lame with Artwork)に変更します。
Step
2 FFmpegエンコーダを組込むショートカットを作成します。
名称変更した「ショートカット」を選びダブルクリックすると、ショートカットエディタが表示され、「シェルスクリプトを実行」中のコードを下に示す、FFmpeg のエンコーダに合わせる作業を行います。
ショートカットに組込むFFmpegエンコーダ(タブ選択)
libfdk_aac with Artwork cut-off:20k
コードの変更箇所
「シェルスクリプトを実行」のコード行を下のように2箇所 書換えます。
2行: 変数:encoder_nameにエンコーダ名を記述 ここでは[libfdk_aac]にします。
1 2 3 |
# エンコーダ名を設定 変換したファイルにエンコーダ名が付加される。 encoder_name="[libfdk_aac]" |
103行:下の様に[libfdk_aac]エンコーダのコマンドラインに書換えます。
102 103 104 |
# エンコーダのコマンドライン変換プロセス /opt/homebrew/bin/ffmpeg -i "$f" -acodec libfdk_aac -c:v copy -ar 48000 -ab $options -cutoff 20000 "${f%.*}_chg-$options$encoder_name.m4a" |
ーーーーーーーー
以上の書換えが終了したら、前節で行ったテストします。Finderで下の様にAACファイルが生成されていればショートカットの完成です❗
変換元の音源ファイル:
24192k _pink -20db加算.WAV
↓
160kbps設定で生成されたAACファイル:
24192k _pink -20db加算_chg-160k[libfdk_aac].m4a
FFmpeg ACC with Artwork
コードの変更箇所
「シェルスクリプトを実行」のコード行を下のように2箇所 書換えます。
2行: 変数encoder_nameにエンコーダ名を記述 ここでは[NativeAAC]にします。
1 2 3 |
# エンコーダ名を設定 変換したファイルにエンコーダ名が付加される。 encoder_name="[NativeAAC]" |
103行:下の様に[NativeAAC]エンコーダのコマンドラインに書換えます。
102 103 104 |
# エンコーダのコマンドライン変換プロセス /opt/homebrew/bin/ffmpeg -i "$f" -aac_coder twoloop -c:v copy -ar 48000 -ab $options "${f%.*}_chg-$options$encoder_name.m4a" |
ーーーーーーーー
以上の書換えが終了したら、前節で行ったテストします。Finderで下の様にAACファイルが生成されていればショートカットの完成です❗
変換元の音源ファイル:
24192k _pink -20db加算.WAV
↓
320kbps設定で生成されたAACファイル:
24192k _pink -20db加算_chg-320k[NativeAAC].m4a
FFmpeg libmp3lame with Artwork
コードの変更箇所
「シェルスクリプトを実行」のコード行を下のように2箇所 書換えます。
2行: 変数encoder_nameにエンコーダ名を記述 ここでは[libmp3lame]にします。
1 2 3 |
# エンコーダ名を設定 変換したファイルにエンコーダ名が付加される。 encoder_name="[libmp3lame]" |
103行:下の様に[libmp3lame]エンコーダのコマンドラインに書換えます。
102 103 104 |
# エンコーダのコマンドライン変換プロセス /opt/homebrew/bin/ffmpeg -i "$f" -codec:a libmp3lame -c:v copy -ar 48000 -b:a $options "${f%.*}_chg-$options$encoder_name.mp3" |
ーーーーーーーー
以上の書換えが終了したら、前節で行ったテストします。Finderで下の様にMP3ファイルが生成されていればショートカットの完成です❗
変換元の音源ファイル:
24192k _pink -20db加算.WAV
↓
160kbps設定で生成されたMP3ファイル:
24192k _pink -20db加算_chg-160k[libmp3lame].mp3
ショートカットを単独で実行できる 実行ファイル(.app)化させるには
作成したショートカットは、Macのショートカットアプリから選択して起動するのは面倒です。 通常のアプリファイルの様にファインダーからダブルクリックして単独で実行できる様にアプリ化するには、
ショートカットを一旦、Dockに入れることで、単独で実行出来る「.app(アプリ)」にできます。 (下の手順参照)
簡単な手順(実行ファイル化)
- ショートカットを開いて、例えば、先ほど作成した雛形のショートカットにした「FFmpeg aac_at with Artwork」を右クリックして
- ファイル > Dockに追加 を選択
- Dockに入れた「FFmpeg aac_at with Artwork」を右クリックして、オプション > Finderに表示 を選択
- Finderに表示されたファイルを見ると、FFmpeg aac_at with Artwork.app になって、単独で実行できるアプリファイルになります。
- Dockに追加された、ショートカットが不要なら、オプション > Dockから削除 します。