macOSの「ショートカットApp(又はAutomatorでもOK)」を使ってACC変換する時に自動的にArtwork画像が継承されるコマンドライン入力作業を自動化する方法の紹介です。
合わせて、ハイレゾ音源をAAC変換した時、CDを凌ぐ音質が実現されているか?も合わせて評価しました。
一部改定(2024/4/7追記)
作成した「ショートカットApp」の起動からAAC変換まで(動画)
この動画は、「ショートカットApp」で作成したファイル名「FFmpeg AAC with Artwork」の起動からAAC変換・完了までのスクリーン動画(44秒間)です。
AAC変換が完了した後、Finderのアイコン表示で確認したのが下のスクショです。 Artwork付きの音声ファイル(wav)が自動的にArtwork画像が継承されたAACファイル(m4a)が生成されています。
作成したショートカットAppの仕様(概要)について
仕様項目 | 内容 |
「ショートカット」の名称 | 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」が追記されます。 |
「FFmpeg AAC with Artwork」ショートカット・作成(手順)
macOSのLaunchpadから「ショートカットApp」を開きます。 ファイル > 新規ショートカット を選択しショートカット名の欄に「FFmpeg AAC with Artwork」と記入します。
アクションの選択と説明
Act
1
ACTION-1:AppleScriptを実行
アクションの中から「AppleScriptを実行」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
AppleScriptのエディタエリアのデフォルトコード(on run .......)を全て削除して下のコードをコピペします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
display 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 mySelect |
Scriptのポイント説明
1行目〜6行目:「FFmpeg AAC with Artwork」の概要説明ダイアログを表示するコードです。 8行目〜16行目:ビットレート選択リストダイアログを表示するコードです。ビットレート(320k〜128k)を選択して、「音声ファイル選択へ」ボタンが押されると
20行目のコードで、選択されたビットレートデータ(320k〜128k)をクリップボードに渡し、次のアクションに続きます。
「AAC変換をキャンセル」ボタンが押されると、
15行目のコードが実行されて下のダイアログが表示されます。
【OK】ボタンが押されると「ショートカットApp」のアクションが終了します。
Act
2
ACTION-2:ファイルを選択
アクションの中から「ファイルを選択」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
このアクションが実行されると、Finderが表示されて、AACに変換する音声ファイルが(複数)選択できます。
Act
3
ACTION-3:通知を表示
アクションの中から「通知を表示」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。 通知の内容に「AAC変換が開始されました!」に書き換えます。 また、タイトルを「AAC変換 開始!!」にします。
このアクションが実行されると、macOS画面の右から通知が表示され、通知サウンドが鳴ります
Act
4
ACTION-4:シェルスクリプトを実行
アクションの「シェルスクリプトを実行」を選択して「ショートカットエディタ」エリアにドラッグアンドドロップします。
上の画面の様に設定します。bash Scriptのエディタエリアのデフォルトコード(echo....)を全て削除しておきます。
FFmpegで-c:v copyオプションを使う方法を追記しました。(2024/4/7)
こちらの(追記)がオススメです。
以下コードの17行目の、-c:v copy オプションを使用すると 音声ファイルに含まれているArtwork(画像)を継承してAAC変換が出来るので非常にシンプルなプログラムコードになります。
下のコードを「シェルスクリプトを実行」の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 |
# 文字化け対策 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 -c:v copy -ar 48000 -ab "$bps" "$f_aac" #AACにFFmpeg>AACマークを付加 FFmpegAAC="${f%.*}-${bps}_FFmpeg_chg.m4a" mv "$f_aac" "$FFmpegAAC" done osascript -e 'display alert "AAC変換が完了しました"' |
Scriptのポイント説明
5行目:クリップボードにコピーしたビットレート・データをbpsにセットするコードです。 17行目:選択された音声ファイルをbpsで示されるビットレートでAAC(m4a)に変換するコマンドラインコードです。 ffmpegのCLIが在る絶対アドレスでコマンドラインを実行しています。また、-c:v copy オプションで、ビデオストリーム(アートワーク画像)をコピーします。 24行目:AppleScriptのalert dialog を呼び出しています。
FFmpegの-vn オプションでAAC変換すると、音声ファイルに含まれれているアートワークが継承されないので、AtomicParsley CLIプログラムを使用してアートワークの引き渡しが必要です。 事前に、AtomicParsleyの事前インストールが必要です。 詳しくはここをクリック。
下のコードを「シェルスクリプトを実行」の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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# 文字化け対策 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" || : #nop cd "${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" --overWrite cd #元のルートに戻す # 使い終わったArtwork pngファイル(-resized-含む) を削除 rm -f "${f%%.*}"*.png # -fオプションでエラーメッセージ表示させない #else #: # pngファイルがないとき何もしない #fi done osascript -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 を呼び出しています。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エンコ ...