
ストラヴィンスキー”春の祭典”の「いけにえの踊り」 (カラヤン指揮 BPO 1964年録音:ハイレコ)
当ブログでは、これまでCD、ハイレゾ、レコードなどの音源をAudacityやWaveSpectraを用いたスペクトル分析で、横軸に周波数、縦軸に音圧レベルで表示する平面的な解析を行ってきました。 一方、今回フォーカスするスペクトログラムは、横軸に時間、縦軸に周波数、音圧レベルをカラーで3次元的にビジュアル表示するものです。 つまり、「いつ、どの周波数(倍音など)が、どれくらい強かったか」が分かります。 例えばCD音源と比較した、カートリッジ系の倍音に依るレコード音源の音質差がビジュアル的に掴めるかもしれません。
ところで、スペクトログラムを表示するアプリとして、Sonic Visualiser (公式サイト:ここをクリック)があります。 このアプリは多機能かつ優秀ですが、個人的な感想として、操作にはスキルが必要で、スペクトログラムの表示も若干明瞭感にかける気がします。
そこで、今回はシンプル操作で表示画質の良いスペクトログラムが表示出来る、FFmpegフィルタのshowspectrumpicを使った、Spectrogram Viewer ショートカットを作成しましたので、この作成手順を紹介します。
スペクトログラムを画像化するFFmpegフィルタのshowspectrumpicのコマンド
以下のコマンドを、ターミナルから実行すると、スペクトログラムを画像化することができます。
command bash ffmpeg -ss 0 -t 30 -i "input" -filter_complex\ showspectrumpic=s=1280x720:mode=0:\ color=intensity:scale=log:saturation=1:\ win_func=hann:orientation=vertical:gain=1:\ legend=1:start=0:stop=0 \ -y "out.png" ======== 以下のコマンドでオプション詳細を調べることができます。 ffmpeg -h filter=showspectrumpic なお、FFTサイズは内部で自動決定され、FFTサイズを指定するオプションはありません。
コマンド概要
- -ss 0 -t 30: 0sから30s間を切り出し、分析時間を指定する。(横軸ズーム) 通常は無指定で全再生時間になる。
- input:メディアファイルのパスを指定(動画は、音声部のスペクトログラムを表示します)
- s=1280x720:出力するスペクトログラム画像の解像度を指定(解像度を上げると拡大時のノイズが減少します。 ただし、軸名サイズが小さくなります)
- color=intensity:テーマ色で、15色の中から指定
- win_func=hann:関数窓(22種類)を指定
- mode=0:0で、LchとRchの画像を重ねる。 1 で、Lchを上段、Rchを下段で表示
- start=0:stop=0:DCからナイキスト周波数を表示 start=1000:stop=20000にすると、1khz〜20khzを表示(縦軸ズーム)
- out.png:スペクトログラム画像をpngで、パス指定した場所に出力(拡張子をmp4にすれば動画保存も可能) -y で上書き保存
showspectrumpicフィルタを利用するには、FFmpegのインストールが必要です。 インストール方法は、以下の記事が参考になります。 クリックして参照してください。
「HomebrewでMacにFFmpegをインストールする方法と使い方」
スペクトログラム表示ツール: Spectrogram Viewer|macOSショートカットの作成
ショートカット処理ステップ
START
- Finder表示 ファイル選択
- メディアファイルか否かの判定
- 入力ダイアログが表示され、オプションの値を変えることが可能

- bashシェルスクリプトでshowspectrumpicコマンドの実行とスペクトログラム画像化
- Quick Lookでスペクトログラムを表示
END
ショートカットの作成手順
macOSショートカット・アプリを起動して「ファイル」>「新規ショートカット」をクリックすると、まっさらなショートカット編集画面が現れます。 ここに前記の「ショートカット処理ステップ」に対応する必要なアクション①〜⑤を配置して行きます。 各アクションは、下に示す内容で設定します。 マジック変数の扱いは、「これで分かったマジック変数」を参照してください。


シェルスクリプトを実行
④【シェルスクリプトを実行】アクションは、以下のコードをペーストします。
|
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 |
#!/bin/bash # ffmepg の実行パス設定 export PATH="/opt/homebrew/bin:$PATH" input="ファイル (ファイルパス)" # ファイルアクションから選択されたファイルパスをマジック変数で受ける tmp="/tmp/fft_base.png" output="/tmp/fft_spectrum.png" #入力されたオプション取得 mode=$(sed -n '2p' <<< "入力のオプション") # 入力のオプションをマジック変数で受けて2行目のテキストを取得 f_max=$(sed -n '3p' <<< "入力のオプション") # 3行目のテキストを取得 f_min=$(sed -n '4p' <<< "入力のオプション") # 4行目のテキストを取得 times=$(sed -n '6p' <<< "入力のオプション") # 6行目のテキストを取得 mode=${mode#*=} # =以降の数値を取得(表示モード) f_max=${f_max#*=} # =以降の数値を取得(上限周波数) f_min=${f_min#*=} # =以降の数値を取得(下限周波数) times=(${times#*=}) # =以降の分析時間設定を取得 zshはNG bash必須 # スペクトログラム画像化 ffmpeg "${times[@]}" -i "$input" -filter_complex showspectrumpic=s=1280x720:mode="$mode":\ color=intensity:scale=log:saturation=1:\ win_func=hann:orientation=vertical:gain=1:\ legend=1:start="$f_min":stop="$f_max" \ -y "$tmp" #------------- # ImageMagick でスペクトログラム画像にタイトル(ファイル名)を付加する #------------- filename=$(basename "$input") # 分析時間設定がある場合、タイトルに表示する if (( ${#times[@]} != 0 )); then # 配列要素数が0(空)で無いなら start_time="${times[1]}" # 分析開始時間を取得 duration_time="${times[3]}" # 分析時間を取得 analysis_times="[ 分析時間:${start_time}秒から${duration_time}秒間 ]" fi # magick CLIの実行 magick "$tmp" \ -font "/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc" \ -background black \ -gravity north \ -splice 0x20 \ -fill white \ -pointsize 20 \ -annotate +0+20 "${filename} \n ${analysis_times}" \ "$output" cat "$output" |
28行〜51行は、ImageMagick(公式サイトはここをクリック) でスペクトログラムにタイトル(ファイル名)を付けるルーチンです。 ターミナルより、以下のコマンドで、Homebrewを経由してインストールが可能です。
brew install imagemagick
ーーーー
スペクトログラム画像のタイトルが不要なら、この28行〜51行 は必要ありません。 この場合、53行は、 cat "$tmp" に変更します。
評価用ピュアー音源を使って、スペクトログラムを表示させてみます。
評価用ピュアー音源は、WaveGeneで生成しました。(参照ページ:ここをクリック)
スイープ音源:
-20db sin波 100hzから20khzまでリニアで60秒間スイープ (16bit 44.1khz wav)
ノコギリ波:
-20db 2.5khzノコギリ波 10秒間 (16bit 44.1khz wav)
ピンクノイズ:
-20db pinkノイズ 5秒間 (16bit 44.1khz wav)
リアル音源を使って、スペクトログラムを表示させてみます。
バイオリンのビブラートに着目:
1966年録音・ヘンデル バイオリン・ソナタ 第4番 第1楽章 Vn:グリュミオー(wav-CD format)
バイオリンはノコギリ波に近く多数の倍音が含まれます。 高次の倍音ほどビブラートの揺れ幅(見た目の上下幅)が大きくなっています。 これはビブラート(△f)がFM変調故に、倍音番号に比例してビブラートの△fが大きくなるためです。[分析時間:40秒から5秒間]
以上、音声ファイルのスペクトログラムを表示するツールの紹介でした。 今回作成した、Spectrogram Viewer を使って、過去に試聴評価した CD、ハイレゾ、レコードから収録音源に対して、再評価を行う予定です。
おすすめ
日常作業や動画・音声処理に役立つものを厳選し、「ショートカット活用ツール事例集」としてまとめました。 当記事もエントリーされていますので、ご参照ください。
-
-
参 照macOSショートカットアプリ活用|ツール事例集
macOS標準の「ショートカット」アプリを使えば、シェルスクリプトやコマンドライン処理をGUI化し、誰でも使いやすい便利ツールとして活用できます。 本記事では、当ブログに関連する実際に作成したツールの ...




