
アートワーク付きのハイレゾ音源をFFmpegでAAC変換すると、タグ情報(タイトルやアーティスト等)は引き継がれますが、残念なことにアートワーク画像が引き継がれません。
前回記事で「FFmpegでAAC変換する時にArtwork(画像)を引き渡す方法 」を紹介しました。 この方法はターミナルに手動で多種類のコマンドラインを操作するので作業が煩雑で非効率す。
今回はmacOSの「ショートカットApp(又はAutomatorでもOK)」を使ってコマンドライン入力作業を自動化する方法の紹介です。 合わせて、ハイレゾ音源をAAC変換した時、CDを凌ぐ音質が実現されているか?も合わせて評価しました。
作成した「ショートカットApp」の起動からAAC変換まで(動画)
この動画は、「ショートカットApp」で作成したファイル名「FFmpeg AAC with Artwork」の起動からAAC変換・完了までのスクリーン動画(44秒間)です。
AAC変換が完了した後、Finderのアイコン表示で確認したのが下のスクショです。 Artwork付きの音声ファイル(wav)が自動的にArtwork画像が継承されたAACファイル(m4a)が生成されています。
作成したショートカットAppの仕様(概要)について
今回作成するショートカットAppは、FFmpegとAtomicParsleyのコマンドラインを使用しますので、事前インストールが必要です。 詳しくは下のブログ記事を参照してください。
仕様項目 | 内容 |
「ショートカット」の名称 | FFmpeg AAC with Artwork |
AACエンコーダ | FFmpegのNativeAAC (libfdk_aacエンコーダは16bit入力で歪率的に不利になるのでNativeAACを採択しています) |
ビットレート | 320kbos、256kbps,160kbps,128kbpsのリスト中から選択可 (CBR設定で設定していますが、256kbps以上はVBRになります) |
サンプルレート | 48khz固定 |
変換元の対応フォーマット | wav,flac,等FFmpegに準じます。 音声ファイルは複数選択でき、一括でAAC変換できます |
AAC変換後のファイル名 | 変換元のファイル名の後ろに「320k〜128k_FFmpeg_chg.m4a」が追記されます。 |
Artwork引渡し方法 | AtomicParsley CLIプログラムを使用 |

「FFmpeg AAC with Artwork」ショートカット・作成(手順)
macOSのLaunchpadから「ショートカットApp」を開きます。 ファイル > 新規ショートカット を選択しショートカット名の欄に「FFmpeg AAC with Artwork」と記入します。
アクションの選択と説明
ACTION-1:
アクションの中から「AppleScriptを実行」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
AppleScriptのエディタエリアのデフォルトコード(on run .......)を全て削除して下のコードをコピペします。
12345678910111213141516171819display dialog "次の手順で24bit入力のAAC変換(fs=48khz)を行います。Step.1: ビットレート選択(320k,256k,160k,128k)Step.2: 音声ファイル(flac or wav)を選択(複数可)" buttons {"OK"} with title "FFmpeg(NativAACエンコーダ)でAAC変換"-- リスト形式のダイアログを表示して処理を選択するset myList to {"320k", "256k", "160k", "128k"}set mySelect to choose from list myList default items "320k" with title "Bit rate" with prompt "ビットレート選択" OK button name "音声ファイル選択へ" cancel button name "AAC変換をキャンセル"set mySelect to result as Unicode text --as Unicode textを付加しないとエラー-- キャンセルボタンが押されたら終了if mySelect is "false" then tell me to error "AAC変換を終了します"-- automatorの場合 then error number -128 を使う-- false 以外 選択した値をクリップボードに渡すset the clipboard to mySelectScriptのポイント説明
1行目〜6行目:「FFmpeg AAC with Artwork」の概要説明ダイアログを表示するコードです。
8行目〜16行目:ビットレート選択リストダイアログを表示するコードです。ビットレート(320k〜128k)を選択して、「音声ファイル選択へ」ボタンが押されると
19行目のコードで、選択されたビットレートデータ(320k〜128k)をクリップボードに渡し、次のアクションに続きます。「AAC変換をキャンセル」ボタンが押されると、
15行目のコードが実行されて下のダイアログが表示されます。
【OK】ボタンが押されると「ショートカットApp」のアクションが終了します。ACTION-2:
アクションの中から「ファイルを選択」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
このアクションが実行されると、Finderが表示されて、AACに変換する音声ファイルが(複数)選択できます。
ACTION-3:
アクションの中から「通知を表示」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。 通知の内容に「AAC変換が開始されました!」に書き換えます。 また、タイトルを「AAC変換 開始!!」にします。
このアクションが実行されると、macOS画面の右から通知が表示され、通知サウンドが鳴ります
ACTION-4:
アクションの「シェルスクリプトを実行」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
オプションは上の設定にして、bash Scriptのエディタエリアのデフォルトコード(echo....)を全て削除して下のコードをコピペします。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950# 文字化け対策 mediainfo で出力されたtxtファイルが文字化けするのを対策export LANG=ja_JP.UTF-8# クリップボードにコピーしたビットレートをbpsにセットbps=$(pbpaste)#選択したハイレゾファイルをfにフルパスで格納for f in "$@"do#ハイレゾファイルの拡張子をm4aに変更しf_aacにセットf_aac=${f%.*}.m4a# 選択ファイルをAACに変換# ビットレートはクリップボード経由のbpsで指定/opt/homebrew/bin/ffmpeg -i "$f" -aac_coder twoloop -vn -ar 48000 -ab "$bps" "$f_aac"#AACにFFmpeg>AACマークを付加FFmpegAAC="${f%.*}-${bps}_FFmpeg_chg.m4a"mv "$f_aac" "$FFmpegAAC"# ハイレゾ音源ファイルのArtworkを下のファイル名にコピー(抽出)するf_artwork=${f%.*}.png/opt/homebrew/bin/ffmpeg -i "$f" -an -codec:v copy "$f_artwork" || : #nopcd "${f%/*}" #選択されたfileディレクトリへ変更 AtomicParsleyでlong file エラーを防ぐためcdFFmpegAAC=${FFmpegAAC##*/} #file名取得cdartwork=${f_artwork##*/} #file名取得# 抽出したArtworkファイルを、AAC変換したフィルに追加する/opt/homebrew/bin/AtomicParsley "$cdFFmpegAAC" --artwork "$cdartwork" --overWrite# overWriteミス対策で再度繰り返す/opt/homebrew/bin/AtomicParsley "$cdFFmpegAAC" --artwork "$cdartwork" --overWritecd #元のルートに戻す# 使い終わったArtwork pngファイル(-resized-含む) を削除rm -f "${f%%.*}"*.png # -fオプションでエラーメッセージ表示させない#else#: # pngファイルがないとき何もしない#fidoneosascript -e 'display alert "AAC変換が完了しました"'Scriptのポイント説明
5行目:クリップボードにコピーしたビットレート・データをbpsにセットするコードです。 17行目:選択された音声ファイルをbpsで示されるビットレートでAAC(m4a)に変換するコマンドラインコードです。 ffmpegのCLIが在る絶対アドレスでコマンドラインを実行しています。 35、38行目:抽出したArtworkファイルを、AtomicParsleyのCLIが在る絶対アドレスで、AAC変換したフィルに追加するコマンドラインを実行しています。 38行目でも同じコマンドラインを繰り返しているのは、overWriteミスを防ぐためです。 50行目:AppleScriptのalert dialog を呼び出しています。以上で「FFmpeg AAC with Artwork」ショートカットの完成です。
作成したショートカットの動作確認とアプリ化
動作確認
適当な(出来るだけ再生時間の短い)Artwork付きの音声ファイル(wav or flac)を用意しておきます。
「ショートカットエディタ」画面の右上の ▶ マークをクリックすると「FFmpeg AAC with Artwork」ショートカットが起動してACTION-1〜4が実行されます。 ACTION-2「ファイルを選択」が実行されるとFinderが開きますので、用意した音声ファイルを選択してAAC変換します。
ショートカットACTIONが終了したら、FinderでAAC変換されたAAC(m4a)ファイルを探し、Artworkの継承の有無を確認します。 変換されたAACファイルは「Tag Editor Free」アプリ でArtworkを確認するか、Finderで変換されたAACファイルがArtworkと同じiconが表示されていればOKです。
ショートカットのアプリ化
動作確認ができたら、ショートカット「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)ファイル
なお、この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エンコ ...