Y軸に振幅、X軸に周波数に変換するshowfreqsフィルタの使い方。出力フォーマットはRGBAの可変フレームレート。フレームレートが指定できるようになった。
基本コマンド
ffplay -f lavfi -i amovie=input,showfreqs=s=512x288:mode=bar:ascale=log:fscale=lin:win_size=2048:win_func=hanning:overlap=1:averaging=1:colors=white

見やすくした例
ffplay -f lavfi -i amovie=input,showfreqs=s=512x288:mode=line:ascale=log:fscale=lin:win_size=256:win_func=hanning:overlap=1:averaging=5:colors=white

動画で出力するときは適宜フレームレートとフォーマットを指定する。
ffmpeg -i input -filter_complex showfreqs=s=512x288:mode=line:ascale=log:fscale=lin:win_size=256:win_func=hanning:overlap=1:averaging=5:colors=white,fps=30,format=yuv420p output
RGBA を利用して背景を画像に波形をオーバーレイすることも手軽にできる。s=1280×720 で画像のサイズに合わせる。
ffmpeg -i audio.mp3 -loop 1 -i image.jpg -filter_complex "[0:a]showfreqs=mode=line:ascale=log:fscale=log:s=1280x720[sf];[1:0][sf]overlay=shortest=1,format=yuv420p" -c:a copy output
一般的なサンプリング周波数を超えた音声を使うと右端が見切れる

公式ドキュメント:FFmpeg Filters Documentation : showfreqs
オプション
- size, s[image_size]
映像の解像度
既定値:1024×512 - rate, r[video_rate]
フレームレートの指定
既定値:25 - mode[int]
周波数の表示形式の指定 - 0, line
 - 1. bar:既定値
 - 2, dot
 - ascale[int]
Y軸の表示単位 - 0, lin
 - 1, sqrt
 - 2, cbrt
 - 3, log:既定値
 - fscale[int]
X軸表示形式 - 0, lin:既定値
 - 1, log
 - 2, rlog
 - win_size[int]
小さくするほど周波数が荒くなる
既定値:2048
範囲:16 から 65536 まで - win_func[int]
波形の表示設定 - 0, rect
 - 1, hann, hanning:既定値
 - 2, hamming
 - 3, blackman
 - 4, bartlett
 - 5, welch
 - 6, flattop
 - 7, bharris
 - 8, bnuttall
 - 9, sine
 - 10, nuttall
 - 11, bhann
 - 12, lanczos
 - 13, gauss
 - 14, tukey
 - 15, dolph
 - 16, cauchy
 - 17, parzen
 - 18, poisson
 - 19, bohman
 - 20, kaiser
 - overlap[float]
波形を重複させて表示させる。既定値:1(0, 1)
win_funcで指定したオプションが最適化されて表示される - averaging[int]
波形を時間平均させて表示させる
既定値:1(平均化しない)
0 はピークだけ表示、大きくするほど表示がゆっくりになる - colors[string]
周波数の色指定。’|’ で複数指定できる
既定値:”red|green|blue|yellow|orange|lime|pink|magenta|brown” - cmode[int]
チャンネル毎に個別表示するか - 0, combined
一緒に表示。既定値 - 1, separate
個別に表示 - minamp[float]
最小振幅の指定。amplitude scale オプション(ascale)の log で使われる
既定値:1e-006
範囲:1.17549e-038 から 1e-006 まで - data[int]
波形の表示方法の設定 - 0, magnitude:既定値
 - 1, phase
 - 2, delay
 - channels[string]
表示するチャンネルの設定
既定値:”all”