
macOSの「ショートカットApp(又はAutomatorでもOK)」を使ってACC変換する時に自動的にArtwork画像が継承されるコマンドライン入力作業を自動化する方法の紹介です。 (旧記事からから改訂)
合わせて、ハイレゾ音源をAAC変換した時、CDを凌ぐ音質が実現されているか?も合わせて評価しました。
改訂内容(2024/6/4)
当記事 は、下の記事に倣ってショートカットの作成手順を変更しました。 FFmpegのコマンドライン・オプションを -vn 代わりに-c:v copy に変更することでアートワークが継承できます。
-
-
参 照FFmpegを使用して音声ファイルのアートワーク含めメタデータを操作するオプションのこと
FFmpegのオプションは多岐に渡り、オプションの選択は非常に難解です。そこで、ChatGPTの力を借りて、音声ファイルのアートワークやメタデータを操作するためのFFmpegのオプションを調べてみまし ...
旧投稿記事 は、-vn オプションを使っているので、アートワークを継承するために AtomicParsley CLI を使っています。
作成した「ショートカットApp」の起動からAAC変換まで(動画)
この動画は、「ショートカットApp」で作成したファイル名「FFmpeg AAC with Artwork」の起動からAAC変換・完了までのスクリーン動画(44秒間)です。 (この動画は旧記事のものです)
AAC変換が完了した後、Finderのアイコン表示で確認したのが下のスクショです。 Artwork付きの音声ファイル(wav)が自動的にArtwork画像が継承されたAACファイル(m4a)が生成されています。
作成したショートカットAppの仕様(概要)について
仕様項目 | 内容 |
「ショートカット」の名称 | FFmpeg AAC with Artwork |
AACエンコーダ | FFmpegの[NativeAAC]エンコーダを使用 (24bit入力で歪率的に有利ですが、劣化率に難がり、ビットレートは 256kbps以上を推奨します。) |
ビットレート | 320kbos、256kbps,160kbps,128kbpsのリスト中から選択可 (CBR設定で設定していますが、256kbps以上はVBRになります) |
サンプルレート | 48khz固定 |
変換元の対応フォーマット | wav,flac,等FFmpegに準じます。 音声ファイルは複数選択でき、一括でAAC変換できます |
AAC変換後のファイル名 | 例えばビットレートを160kbpsで指定すと、変換したファイルの 末尾に_chg-160k[Native AAC].m4aが追記されます。 |

「FFmpeg AAC with Artwork」ショートカット・作成(手順)
Step
1 ショートカット作成の事前準備
- Macのショートカットアプリを開き ファイル > 新規ショートカット を選択します。 空の名称未設定ショートカットがショートカットエディタに表示されます。
- 「ショートカット名」をクリックしてから、ショートカットの名前を入力します。 名前を「FFmpeg AAC with Artwork」にしました。
- 右のサイドバーからカテゴリ「スクリプティング」を選択し、表示されるリストで「シェルスクリプトを実行」アクションをダブルクリックします。 ショートカットエディタにドラッグすることもできます。
Step
2 「シェルスクリプトを実行」アクションにコードをコピペ
「シェルスクリプトを実行」のエリアに下のシェルスクリプト(bash+AppleScript)コードをコピペしたスクリーンショット画像です。(この画像は、FFmpeg[aac_at]エンコーダを使った時のものです)
「シェルスクリプトを実行」のコード内容
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="[NativeAAC]" 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" -aac_coder twoloop -c:v copy -ar 48000 -ab $options "${f%.*}_chg-$options$encoder_name.m4a" fi done osascript -e 'display alert "ファイル変換が完了しました"' |
Step
3 テストして成功したらショートカットの完成です
このショートカットをテストするには、ショートカットエディタ右上部の[ ▶ ] をクリックしてAAC変換作業を開始します。
動作確認でエラー発生が無く、Finderで下の様にAACファイルが生成されていればテスト成功です❗
変換元の音源ファイル:
24192k _pink -20db加算.WAV
↓
生成されたAACファイル:
24192k _pink -20db加算_chg-160k[NativeAAC].m4a
アートワーク(画像)の継承の有無確認とアプリ化
アートワーク(画像)の継承確認
適当な(出来るだけ再生時間の短い)アートワーク付きの音声ファイル(wav or flac)を用意しておき、作成したショートカットを実行します。
Finderで変換されたAACファイルにアートワークiconが表示されていればOKです。 または、「Tag Editor Free」アプリ でもアートワークの有無が確認できます。
ショートカットのアプリ化
動作確認ができたら、ショートカット「FFmpeg AAC with Artwork」に拡張子.appがついた、自己実行型のアプリ(FFmpeg AAC with Artwork.app)にしましょう。

タスクバーの ファイル > Dockに追加 を選択します。
すると、Dockに「FFmpeg AAC with Artwork」が追加されますので、右クリックで、オプション > Finderに表示 を選択します。
するとFinderにアプリ化された、FFmpeg AAC with Artwork.app が存在している筈です。
このアプリ化されたファイルを実行すれば、ダブルクリックすれば単独実行できて、Artwork画像が継承されてAAC変換が行われる様になります。
Artwork付きハイレゾ音源ファイルをAAC変換してみます。
今回AAC変換するArtwork付きのハイレゾファイル(FLAC 192Khz 24bit )は、1964年録音のレコードから収録したカラヤン指揮・チャイコの悲愴・第3楽章です。
先程アプリ化したFFmpeg AAC with Artwork.appをダブルクリックして、ビットレートを320kbpsと128kbpsの二通りでAAC変換しました。 1ファイル当たりのAAC変換時間は2.5分程要しました。
Finder確認・AAC(m4a)ファイル
上のFinder画面で、変換されたAAC(m4a)ファイルにArtworkと同じiconが表示され、ファイル名にビットレートと_FFmpeg_chgが追記されているのが確認できます。 一方、flacファイルはArtworkが付加されていますが、macOSではflacファイルの場合、iconが表示されない様です。
なお、このflacファイルは、当ブログの「サンプル音源・DLコーナー」の中に掲載されています。
AAC(m4a)変換されたサウンドはこれ
ピュアー音源で、CDを凌ぐ音質でAAC変換されているか確認します。
1khz sin波:AAC変換の歪率特性
下のグラフの通り、16bit CD 歪率よりも「FFmpeg AAC with Artwork.app 」でAAC変換した方の歪率が低減されていることが確認できます。
pink noiseを使ったcut-off周波数
下のスペクトルの通り、320kbpsにおいてcut-off周波数を測定すると23.7khzで、CDのcut-off周波数(22.05khz)を超えていることが確認できました。
高域暴れの有無を確認
『「4つの視点」で再評価』記事で使用した高域暴れ評価用音源(192khz 24bit Flac)を使ってAAC変換したファイルのスペクトル(WaveSpectra)を確認したところ、下の動画(1分23秒)のとおり、高域暴れは生じていないことが確認できました。
評価結果
以上の評価データから、ハイレゾ(24bit)ファイルを「FFmpeg AAC with Artwork.app」でビットレートを320kbpsに指定してAAC変換を行えば、変換されたAACファイルはCD音質を超えることが期待できます。
注意ポイント
NativeAACは、ビットレートが192Kbps付近から劣化量が増大すると言う問題点が浮かび上がりました。 ビットレートを256kbps以上に設定する必要があります。 詳しくは下の記事を参照してください。(2023/1/20追記)
-
-
Pink-noiseでビットレートと劣化量の関係を調べてみました。
AAC変換する時にビットレートを低く(オプション)設定すると劣化量がどの程度に増加するものなのか?ネットで調べても具体例が無く、その特性を知りたくなりました。 そこで、今回はFFmpegAACエンコ ...