
前回の記事では、macOSショートカットアプリを利用して、スペクトログラムを手軽に表示できる Spectrogram Viewerツールを作成しました(詳細はこちら)。
実際に使用してみると、長時間の楽曲では「解析したい部分」を探すのに意外と時間がかかります。 スペクトログラムだけでは、フォルテやクレッシェンド、楽曲の盛り上がり、大きな入りなどの位置を把握することが難しいためです。
そこで今回は、FFmpegの showwavespic フィルターを利用し、時間方向の音量変化をひと目で確認できるナビゲーション用波形モニターをスペクトログラムの下部へ追加しました。 この波形を目印にすることで、素早く目的の演奏箇所を見分けることができるようになり、スペクトログラム解析の作業効率が向上します。
ナビゲーション用波形モニターについて|FFmpegの showwavespic
ナビゲーション用波形モニターとして、FFmpegの showwavespic フィルターを用いて音量を包絡(エンベロープ)表示することにしました。
以下のコマンドを、ターミナルから実行すると、音源の波形を画像化することができます。
command bash ffmpeg -ss 0 -t 70 -i "input.flac" \ -filter_complex "volume=0.5,showwavespic=s=1280x720:split_channels=1:\ colors=lightgrey:scale=lin:filter=peak,format=rgb24" \ -frames:v 1 -y "out_wave.png" ーーーーーーー 【備考】以下のコマンドでオプション詳細を調べることができます。 ffmpeg -h filter=showwavespic
コマンド概要
- -ss 0 -t 70: 0sから70s間を切り出し、表示する分析時間を指定する。 通常は無指定で全再生時間になる。
- input.flac:メディアファイルをフルパスで指定
- s=1280x720:出力する画像の解像度を指定
- colors=lightgrey:音声波形の色指定、lightgreyを指定している
- volume=0.5:指定音声波形の大きさ指定
- split_channels=1:0で、LchとRchの画像を重ねる。 1 で、Lchを上段、Rchを下段で表示
- filter=peak:peakの他average指定が可能
- out_wave.png:波形画像をpngで、パス指定した場所に出力 -y で上書き保存
上記コマンドの実行結果:out_wave.png
(ムソルグスキー"展覧会の絵"の「バーバ・ヤーガの小屋」)

showspectrumpicやshowwavespicフィルタを利用するには、FFmpegのインストールが必要です。 インストール方法は、以下の記事が参考になります。 クリックして参照してください。
「HomebrewでMacにFFmpegをインストールする方法と使い方」
Spectrogram Viewer with WAVE の作成方法(macOSショートカットの変更点)
作成済みのSpectrogram Viewerショートカット(詳細はここをクリック)のバッジをクリックしてショートカット編集画面を開き、ショートカット名をSpectrogram Viewer with WAVE に変更して、④【シェルスクリプトを実行】アクションのコードを下記に書き換えるだけです。
|
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 |
#!/bin/bash # ffmpeg の実行パス設定 export PATH="/opt/homebrew/bin:$PATH" input="ファイル (ファイルパス)" # ファイルアクションから選択されたファイルパスをマジック変数で受ける tmp="/tmp/fft_base.png" wave_tmp="/tmp/fft_waveform.png" wave_aligned="/tmp/fft_waveform_aligned.png" combined="/tmp/fft_combined.png" output="/tmp/fft_spectrum.png" # 画像サイズ設定 spec_width=1280 spec_height=720 #720 wave_height=180 #180 # スペクトログラムの目盛り枠の左位置 wave_left=148 #音声波形の左右移動 数値を小さくすると左に寄る # 入力されたオプション取得 mode=$(sed -n '2p' <<< "入力のオプション") f_max=$(sed -n '3p' <<< "入力のオプション") f_min=$(sed -n '4p' <<< "入力のオプション") times=$(sed -n '6p' <<< "入力のオプション") mode=${mode#*=} f_max=${f_max#*=} f_min=${f_min#*=} times=${times#*=} # 分析時間設定を配列化 # 例: -ss 25 -t 10 time_options=() if [[ -n "$times" ]]; then read -r -a time_options <<< "$times" fi # スペクトログラム画像化 ffmpeg "${time_options[@]}" -i "$input" \ -filter_complex showspectrumpic=s=${spec_width}x${spec_height}: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" # スペクトログラム画像の実際の横幅を取得 # legend=1 の目盛りやカラーバーを含むため、1280pxより大きくなる image_width=$(magick identify -format "%w" "$tmp") # 音声波形画像化 エンベロープモード filter=average or peak # 波形そのものはスペクトログラムの枠内と同じ 1280px 幅で作る ffmpeg "${time_options[@]}" -i "$input" \ -filter_complex "volume=1,showwavespic=s=${spec_width}x${wave_height}:\ split_channels="$mode":colors=lightgrey:scale=lin:\ filter=peak,format=rgb24" \ -frames:v 1 \ -y "$wave_tmp" # magick CLIの実行:波形をスペクトログラム画像と同じ横幅の黒背景に配置 # 右端の白い四角が出ないよう、キャンバス全体を黒で作る magick -size ${image_width}x${wave_height} xc:black \ "$wave_tmp" -geometry +${wave_left}+0 -composite \ "$wave_aligned" # magick CLIの実行:波形を上、スペクトログラムを下に連結 magick -background black "$tmp" "$wave_aligned" -append "$combined" #------------- # ImageMagick で画像にタイトル(ファイル名)を付加する #------------- filename=$(basename "$input") analysis_times="" # 分析時間設定がある場合、タイトルに表示する if (( ${#time_options[@]} != 0 )); then start_time="${time_options[1]}" duration_time="${time_options[3]}" analysis_times="[ 分析時間:${start_time}秒から${duration_time}秒間 ]" fi # magick CLIの実行 magick "$combined" \ -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" |
以上で、Spectrogram Viewer with WAVE ショートカットの完成です。
波形モニタの調整ポイント
- 横軸(時間軸)の調整:19行目・wave_left=148 数値を小さくすると波形モニタが左に寄る
- 増幅の調整:54行目・volume=1 数値を大きくすると波形拡大
- 包絡(エンベロープ)の種類:56行目・filter=peak 平均にする場合は、averageにする
Spectrogram Viewer with WAVE ショートカットを使ったスペクトログラム画像・サンプル
完成した Spectrogram Viewer with WAVE ショートカットを起動して、スペクトログラム分析したい音源ファイルを選択すると、オプション設定入力ダイアログが表示されます。 入力ダイアログの値を設定することで、表示を変えることができます。
ここでは、「ステレオ(2ch)」表示と「2ch重ね合わせ」表示の画像・サンプルを示します。

グラモフォンレーベル・LPレコード1966年録音・カラヤン指揮BPOの「ラベル編曲・ムソルグスキー展覧会の絵」の中から「バーバ・ヤーガの小屋」をオルトフォンMC20カートリッジでハイレゾ(24bit 96khz)収録した音源を使っています。
SPL
1 ステレオ(2ch)・表示
入力ダイアログオプション設定:表示モード=1、分析時間設定=-ss 0 -t 70
SPL
2 2ch重ね合わせ・表示
入力ダイアログオプション設定:表示モード=0、分析時間設定=-ss 0 -t 70
