音声波形を表示する showspectrum, showwaves の使い方

showspectrum の使い方


入力した音声をスペクトラムとして映像表示する。出力フォーマットは yuv444p。

ffmpeg_showspectrum_sample2.png


ffmpeg -i input -filter_complex showspectrum=size=640x512:slide=1:mode=separate:color=intensity:
scale=sqrt:saturation=1:legend=1 -pix_fmt yuv420p -acodec copy output
ffplay -f lavfi -i "amovie=input,asplit[out0],showspectrum[out1]"


特定時間の周辺の波形を表示するには出力オプションの-ssを使う。たとえば30秒前後の画像で出力する。
ffmpeg -i input -ss 30 -filter_complex showspectrum=size=640x512:slide=1:mode=separate:color=intensity:
scale=sqrt:saturation=1:legend=1 -vframes 1 output.png


特定の時間の波形表示を画像で出力するならshowspectrumpicフィルタを使う。
不可逆圧縮された音声のカットされた周波数が調べられる showspectrumpic
  • size, s[image_size]
    出力される動画の解像度(wxh)
    既定値:640x512
    640x512 で15秒程度の幅になり、282x512 で3秒程度の幅になる

  • slide[int]
    波形の表示方法
    0, replace:波形が左から右に移り右に到達すると左に移動し上書きされる。既定値
    1, scroll:波形が右から左に移り常時スクロールする
    2, fullframe:解像度分右まで最初から表示して、解像度分新しくなったらすべて更新する
    3, rscroll:波形が左から右に移り常時スクロールする
    4, lreplace:波形が右から左に移り常時スクロールする

  • mode[int]
    音声のチャンネルごとに表示するかどうか
    0, combined:一纏めに表示。既定値
    1, separate:各チャンネルごとに表示

  • color[int]
    チャンネル毎の色の表示指定
    0, channel:チャンネル毎に異なる
    1, intensity:チャンネル毎に異ならない。既定値
    2, rainbow:虹色。七色
    3, moreland:モアランド。青背景に白と赤
    4, nebulae:星雲。薄茶系
    5, fire:花火。茶系
    6, fiery:灼熱。赤系
    7, fruit:フルーツ。緑系
    8, cool:寒色。青系
    9, magma
    10, green
    11, viridis
    12, plasma
    13, cividis
    14, terrain

  • scale[int]
    描写で使われる計算方法
    0, lin:線形
    1, sqrt:平方根。既定値
    2, cbrt:立方根
    3, log:対数
    4, 4thrt:四乗根
    5, 5thrt:五乗根

  • saturation[float]
    表示される色の彩度設定
    既定値:1
    範囲: -10.0 から 10.0 まで

  • win_func[int]
    波形の表示設定
    0, rect
    1, bartlett
    2, hann, hanning。既定値
    3, hamming
    4, blackman
    5, welch
    6, flattop
    7, bharris
    8, bnuttall
    9, bhann
    10, sine
    11, nuttall
    12, lanczos
    13, gauss
    14, tukey
    15, dolph
    16, cauchy
    17, parzen
    18, poisson
    19, bohman

  • orientation[int]
    縦横の内容の表示形式の指定
    0, vertical:横軸が時間、縦軸が周波数。既定値
    1, horizontal:横軸が周波数、縦軸が時間

  • overlap[float]
    既定値:0
    範囲:0 から 1 まで

  • gain[float]
    音量を上げ下げして描写具合を変える。0に近いほど色が薄くなる
    範囲:0 から 128 まで
    既定値:1(音量を変えない)

  • data[int]
    表示内容の指定
    0, magnitude:枠一杯に表示
    1, phase:おなじみの波形表示。既定値

  • rotation[float]
    色を変える
    既定値:0
    範囲:-1 から 1 まで

  • start[int]
    調べる周波数の最小値
    既定値:0
    範囲:0 から INT_MAX まで

  • stop[int]
    調べる周波数の最大値
    既定値:0(無制限)
    範囲:0 から INT_MAX まで

  • fps[string]
    描写のフレームレート
    既定値:"auto"

  • legend[boolean]
    グラフ周辺にある周波数や時間、dBのメーターを表示する
    既定値:0

  • drange[float]
    ダイナミックレンジのdBFSを指定
    既定値:120
    範囲:0 から 200 まで

  • limit[float]
    最大のdBFSを指定
    既定値:0
    範囲:-100 から 100 まで



動画との overlay 合成する ffmpeg のコマンド例
ffmpeg -i input -filter_complex "showspectrum=size=640x512:slide=1:mode=separate:color=intensity: scale=sqrt:saturation=1:legend=1" -pix_fmt yuv420p -vcodec libx264 -acodec copy out.mkv

音声フィルタを当てた場合は先に音声を加工した後に showspectrum を当てる
ffmpeg -i input -filter_complex "earwax,volume=2.6,bs2b=profile=jmeier,bass=g=3:f=400,allpass=f=800, showspectrum=size=640x512:slide=1:mode=separate:color=intensity: scale=sqrt:saturation=1:legend=1" -pix_fmt yuv420p -vcodec libx264 -acodec copy out.mkv

参照リンク

FFmpeg documentation : : showspectrum

showwaves


入力した音声を音声波形(オシロスコープ)として映像表示する。出力フォーマットは RGBA になっているのでオーバーレイが可能。

mode point の例
ffmpeg_showwaves_sample2.jpg

mode line の例
ffmpeg_showwaves_sample.jpg


ffmpeg -i input -filter_complex showwaves=size=600x240:mode=point:rate=25:split_channels=1 output
ffplay -f lavfi -i "amovie=input,asplit[out0],showwaves[out1]"


  • size, s[image_size]
    出力される動画の解像度
    既定値:600x240(wxh)

  • mode[int]
    0, point:点の波形表示。既定値
    1, line:山なりの波形表示
    2, p2p:点と線の波形表示
    3, cline:山なりの波形表示に似ている

  • n[int]
    描写間隔で正の値を指定する。値を大きくすると表示回数が減る
    既定値:0
    範囲:0 から INT_MAX まで

  • rate, r[video_rate]
    おおよその出力フレームレート
    既定値:25

  • split_channels[boolean]
    チャンネル別に表示するかどうか。0にするとチャンネルの数だけ色がミックスされる
    既定値:0(しない)

  • colors[string]
    波形の色指定。チャンネル数毎に | で指定する
    既定値:”red|green|blue|yellow|orange|lime|pink|magenta|brown”

  • scale[int]
    0, lin:線形
    1, log:対数
    2, sqrt:平方根。既定値
    3, cbrt:立方根

  • scale[int]
    描写で使われる計算方法
    0, lin:線形
    1, log:対数
    2, sqrt:平方根。既定値
    3, cbrt:立方根

  • draw[int]
    0, scale:ダウンサンプルして描写する。既定値
    1, full:そのまま描写する


ffmpeg のコマンド例
ffmpeg -i input.wav -filter_complex showwaves=size=600x240:mode=line:r=25 -pix_fmt yuv420p -vcodec libx264 -acodec copy out.mkv

入力動画 fps=24 で背景動画の解像度 640x360 の上に波形映像 640x100 を合成する場合
波形映像に重複フレームが有る場合は showwaves 内の r を +10 程度大きく見積もる
ffmpeg -i input.mp4 -filter_complex pad=iw:ih+100:0:100[a];showwaves=size=640x100:mode=point:r=24[b];[a][b]overlay -pix_fmt yuv420p -vcodec libx264 -acodec copy out.mp4

参照リンク

FFmpeg documentation : : showwaves
Windows の ffmpeg で生放送する方法 : pad
Windows の ffmpeg で生放送する方法 : overlay

関連記事
音声をオクターヴ表示する showcqt の使い方

追加オプションを追記し、文章を直した。2016年9月8日
追加オプションを追記。2018年11月24日
追加オプションを追記し、文章を直した。2020年8月6日
関連記事

コメント

非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。