リアルタイムで音量バーを表示する showvolume


音量をリアルタイムでバー表示する ffmpeg の showvolume の使い方。出力フォーマットは RGBA。条件をつければ指定 dB の範囲に色を変えられる。

基本コマンド

ffmpeg -i input -filter_complex showvolume -acodec copy output
ffplay -f lavfi -i amovie=input,showvolume

メーターだけ表示する
ffplay -f lavfi "amovie=input,asplit[a][out1];[a]showvolume=f=1:b=4:w=720:h=68[out0]"

オプション内容

  • rate, r[video_rate]
    映像のフレームレート。既定値:25
  • b[int]
    音量バー同士の隙間幅
    既定値:1
    範囲:0 から 5 まで
  • w[int]
    音量バーの横幅
    既定値:400
    範囲:80 から 8192 まで
  • h[int]
    音量バーの縦幅
    既定値:20
    範囲:1 から 900 まで
  • f[double]
    音量バーのフェード。小さい値ほど影が残る
    既定値:0.95
    範囲:0.001 から 1 まで
  • c[string]
    バーの色を指定。色名指定はできない。色指定は 0xaabbggrr 形式で 0xrrggbbaa ではないことに注意
    VOLUME は 0dB を示す。if文を使って音量によって色を変えることも出来る
    既定値:”PEAK*255+floor((1-PEAK)*255)*256″

    以下の評価式が使える

    • VOLUME
      現在の最大音量 dB
    • PEAK
      現在のピーク
    • CHANNEL
      現在のチャンネル番号。0 から
  • t[boolean]
    音量バーにチャンネル名を乗せる
    既定値:1(表示する)
  • v[boolean]
    音量の数値を表示する
    既定値:1(表示する)
  • o[int]
    縦表示か横表示化の表示形式の指定
    既定値:h

    • 0, h
      横でステレオなら上がFL、下がFR。既定値
    • 1, v
      縦でステレオなら左がFL、右がFR
  • s[int]
    音量バーをメモリ表示にする
    既定値:0
    範囲:0 から 5 まで

公式ドキュメント:FFmpeg Filters Documentation : showvolume

発展的な使い方

動画にオーバーレイするコマンド例

showvolume は音声を映像に変えるフィルタなので vf, af が使えず、lavfi で読み込むか、filter_complex を使う。

ffmpeg -i input -filter_complex [0:1]showvolume[s];[0:0][s]overlay -c:a copy ouput
ffplay -f lavfi -i amovie=input,showvolume[a];movie=input[b];[b][a]overlay

音量でバーの色を変える発展的な使い方

-6dB なのでバーの色は lime になる
ffplay -f lavfi aevalsrc="sin(440*2*PI*t):s=8000,volume=1/2,showvolume"

2つの条件で色を変える場合
-6dB 未満は 0x7f00ff00(lime)、-6dB 以上は 0x7f00ffff(yellow)
ffmpeg -i input -filter_complex showvolume=c="if(lte(VOLUME\,-6)\,0x7f00ff00\, 0x7f00ffff)"[a];[0:0][a]overlay -vcodec rawvideo -acodec pcm_s16le -f avi pipe: | ffplay -

3つの条件で色を変える場合
-6dB 以下は 0x7f00ff00(lime)、-6dB から -4dB 未満は 0x7f00ffff(yellow)、-4dB 以上は 0x7f0000ff(red)
ffmpeg -i input -filter_complex showvolume=c="if(lte(VOLUME\,-4)\, if(lte(VOLUME\,-6)\,0x7f00ff00\, 0x7f00ffff)\,0x7f0000ff)"[a];[0:0][a]overlay -vcodec rawvideo -acodec pcm_s16le -f avi pipe: | ffplay -
showvolume で透過を変更すると思ったように変えられないので、透過具合を colorchannelmixer で変更する
最後の 2 がポイントで 1 以上にすれば色が濃くなり、1 未満にすると色が薄くなる
ffmpeg -i input -filter_complex showvolume=c="if(lte(VOLUME\,-4)\, if(lte(VOLUME\,-6)\,0x7f00ff00\, 0x7f00ffff)\,0x7f0000ff),colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:0:0:0:2"[a];[0:0][a]overlay -vcodec rawvideo -acodec pcm_s16le -f avi pipe: | ffplay -

ffmpeg で使える計算書式
RGBA の各値を別のチャンネルに混ぜ合わせる colorchannelmixer の使い方

更新履歴
新しいオプションに対応。不要な部分の記述を削除した。2016年3月3日
表記を修正してオプションを追加した。2016年8月26日

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)