mpvメディアプレーヤーでビデオ音声のラウドネスメーターと音階を表示させる 【カラオケ練習・耳コピに】

mpv ebur128 showcqt

mpv playerは高機能なフィルタを使えるメディアプレーヤーです。今回はラウドネスメーターとCQT周波数解析をビデオと一緒に表示する方法を紹介します。
ラウドネスメーターはビデオ投稿時の音声レベルの確認に使えます。CQT解析は耳コピのお供にも使えます。mpvでお手軽に使えるのでオススメです。

ここ最近はmpvプレーヤーで遊んでいます。Windowsならmpv.netプレーヤーがオススメです。

mpvプレーヤーはlibavfilterライブラリが使えます。映像・音声にいろいろな効果を付けることができます。ffmpegのフィルタなのでそっちを使ったことがある人もいるでしょう。
例えば、普通のヘッドフォンをサラウンドヘッドフォンにするフィルタもあります。

今回はビデオ音声の解析をしてみます。

ラウドネスメーター

1つ目はラウドネスメーターを表示させてみます。
ラウドネスメーターとは人の聴覚特性を考慮した音の大きさを表示するメーターです。音が小さい時には高い音や低い音は聞こえにくいというような人の耳の特性を考慮した音量メーターです。テレビ放送用に開発されたメーターです。
テレビでCMに入った途端に大きな音がしてビックリする、音が小さくて聞こえなくなったなんて経験があると思います。放送局でラウドネス調整を失敗した時に起こります。普通は一定の音量に聞こえるようにラウドネス調整がされています。
YouTubeの視聴では、ビデオによって音量がバラバラで次のビデオの再生が始まったら音が大きくてビックリ!なんて事があります。YouTubeでは投稿者のビデオの音量がバラバラで特に酷かったです。
最近はYouTubeなどビデオ共有サイトも送信時にラウドネス調整をするようになりました。大きな音量差は少なくなったでしょう。ですがラウドネス調整の効く範囲内で音量差は残ります。
この点をYouTuberなどビデオ投稿者から見ると、音量に気を配らないと視聴者に不快感を与えてしまうかも・・・という意識を生じさせました。
この時に使うのがラウドネスメーターです。

ラウドネスメーターはLUFSという値を目安にします。詳細は私も詳しくないので検索してみてください。テレビなどは-23LUFSという値を目安に調整します。YouTubeなどビデオ配信では-16LUFSに調整します。
最も大きい音が0LUFSです。

DTM関連ソフトや音響機器にもメーターが付いているのを見かけます。これらはVUメーターというもので音声信号の強さを表しています。音の信号そのものの強さで人の聴覚特性を考慮していないため、VUメーターだけ見ていては聴きやすい音量調整ができません。ラウドネスメーターを別に設けなくてはなりません。

以前のYouTuberではギリギリまで音量(音圧)を上げた演奏を投稿する人もいました。今の-16LUFSという基準に比べるととても大きな音だったとわかります。でも投稿者が悪かったわけではありません。パソコン上の最大音量で編集するのは当たり前でした。CDの楽曲も最大音量内ギリギリで作るのが良いとされていました。無駄がなく大きな音と小さな音の差を一番良く表現できるはずだからです。音が大きほうが人は良い音と認識するのでなおさら大きな音になるよう編集していました。音量と書きましたが小さな音も大きくして騒がしく加工するとでもいいましょうか、音圧と言います。物理的な音の圧力の事ではありません。騒がしい騒がしくないというような意味です。
逆にTVチューナーの音が小さすぎて何故だろう?と疑問に思った人もいるでしょう。

ネットの時代になり、多くの人に自分が編集したものを聴いてもらうには音量に気を配らなければならなくなりました。

ebur128フィルター

mpvプレーヤーではebur128というラウドネスメーターが使えます。
EBU R128 scanner filter. This filter takes an audio stream and analyzes its loudness level.
音声を解析してラウドネス値をテキストとして出力したり、メーター映像を生成したりできます。メーターは表示範囲を調整できます。デフォルトは-23LUFSを目安に表示します。
良く使うオプションを紹介します。

video

1に設定すると映像が出力されます。

target

メーター表示の0LUを指定します。デフォルトは"-23"です。YouTubeなどパソコン用では”-16”にしておくと良いでしょう。

meter

メーターの表示範囲を指定します。デフォルト値は”9”です。
振り切れているか、メータ範囲より音が小さい場合は"18"に設定すると良いでしょう。

dualmono

'true'に設定するとモノラル音声のLUFS値の算出エラーを回避します。自分の演奏を録音したモノラルトラックを再生する時などに設定します。チャンネル数で自動的に切り替わるようなのでtrueのままでいいでしょう。

Constant-Q変換

2つ目はConstant-Q変換波形を表示してみます。
フーリエ変換のように周波数解析をしてくれます。音階毎に一定のQ値になるような変換をするので音階がわかりやすい表示になります。
耳コピやカラオケ練習のお供になるかもしれません。

showcqtフィルタ

mpvプレーヤーではshowcqtというConstant-Q変換フィルタが使えます。
Convert input audio to a video output representing frequency spectrum logarithmically using Brown-Puckette constant Q transform algorithm with direct frequency domain coefficient calculation (but the transform itself is not really constant Q, instead the Q factor is actually variable/clamped), with musical tone scale, from E0 to D#10.
音声をConstant-Q変換してリアルタイムに音階毎の強さとそのヒストグラム映像を生成します。
文字で説明しても なんのこっちゃ? なので次に進みます。

mpv.confの設定

mpvプレーヤーで前述2つのフィルタを動かしてみます。
mpvのフィルタには音声用のafと映像用のvfがあります。これらは音声フィルタの出力は音声、映像フィルタの出力は映像だけに限られています。音声のフィルタから映像出力はできません。ffmpegにはfilter_complexというのがあり、音声と映像のフィルタを自由に使え音声から映像を作ることもできます。
同等の機能がmpvプレーヤーでも不完全ですが実装されています。lavfi-complexです。

lavfi-complexのマニュアルがほとんど見当たらず使うのは試行錯誤の連続です。最も有用な情報はGitHubのソースの中にあります。

mpv/DOCS/man/options.rst | GitHub
lavfi-complexを使うとソースビデオとaf,vfの前にフィルターグラフが挿入されます。
フィルターグラフの入力パッドにはソースビデオのトラックが割り当てられます。ビデオならvid1,vid2、音声ならaid1,aid2・・・という名前のパッドができます。
出力パッドには音声一つ、映像一つがあります。それぞれ[ao]、[vo]です。
以上を踏まえればffmpegのfilter_complexと同じように使えます。

という事で前述2つのフィルタ映像とビデオ映像を合成して表示する設定はズバリこれ!
[prof-lavfi-cqt]
lavfi-complex = "[aid1]asplit[a1][a2];[a1]showcqt=fps=24:axis_h=64:bar_t=0.5:count=6,format=rgba[vcqt];[vid1]scale=w=480*dar:h=480,setsar=1,format=rgba,colorchannelmixer=aa=0.8[v1];[a2]ebur128=video=1:size=640x480:meter=9:target=-16:dualmono=true[vebur][ao];[vebur]format=rgba,colorchannelmixer=aa=0.8[vmeter];[vcqt][v1]overlay=x=main_w-overlay_w-20:y=20:format=auto[ol1];[ol1][vmeter]overlay=x=20:y=20,format=yuv420p[vo]"
#lavfi-complex = "[aid1]asplit=4[a1][a2][a3][a4];[a1]showcqt=fps=24:size=1280x720:axis_h=64:bar_t=0.5:count=6,format=rgba[vcqt];[vid1]scale=320*dar:h=320,setsar=1,format=rgba,colorchannelmixer=aa=0.8[v1];[a2]ebur128=video=1:size=640x480:meter=9:target=-16:dualmono=true[vebur][ao];[vebur]scale=h=320:w=-1:flags=neighbor,format=rgba,colorchannelmixer=aa=0.8[vmeter];[a3]showvolume=rate=24:w=100:h=12:b=2:o=v:f=0.1:s=0:p=0.5:ds='log':dm=1:dmc='White':ds='lin':c='if(gt(VOLUME,-6),if(gt(VOLUME,-3),0x8F3C4CE7,0x8F129CF3),0x8FDB9834)',scale=h=320:w=-1:flags=neighbor,format=rgba[vvol];[a4]showwaves=size=320x200:mode='cline':r=24:scale='lin':colors=red|green|blue|yellow|orange|lime|pink|magenta|brown,transpose=1[vwave];color=white:200x320,[vwave]alphamerge,format=rgba,colorchannelmixer=aa=0.8[vwavea];[vcqt][v1]overlay=x=main_w-overlay_w-10:y=10[ol1];[ol1][vmeter]overlay=x=10:y=10[ol2];[ol2][vvol]overlay=x=10:y=380[ol3];[ol3][vwavea]overlay=x=main_w-overlay_w-10:y=380,format=yuv420p[vo]"

[prof-lavfi-clear]
lavfi-complex = "[aid1]anull[ao];[vid1]null[vo]"
mpv.confの最後に上の文を加えてください。
【2020/05/28追記:せっかくなのでVUメーター(showvolume)と波形(showwaves)も追加しました。コメントアウトを入れ替えてください。処理が重くなります。showcqtのfpsを下げると良いかも。アスペクト比が1以外の映像を正しく表示するようにしました。】

プロファイルにしたのでこれだけではフィルタが適用されません。キーボードに割り付けます。
input.confを編集して次の文を追加します。
alt+KP1     apply-profile "prof-lavfi-cqt"
alt+KP0     apply-profile "prof-lavfi-clear"
altとテンキーの”1”を押すとラウドネスメーターとCQTが表示されます。
altとテンキーの”0”を押すとフィルタは解除されます。

ビデオを再生してからaltとテンキーの1を押すと次のような画面が表示されます。

Constant-Q変換の映像がフルHDで表示されます。画面左上にラウドネスメータ、画面右上に再生中のビデオ映像が合成表示されます。画面下部はCQTのヒストグラムです。音階を追うのに使えます。(音も出ますよ)

フィルタの解除方法がわかりません。lavfi-complexの実装が不完全なようでmpv標準のコマンド様式が使えません。lavfi-complexのフィルタグラフが消えないので、一度lavfi-complexを使うとマルチトラックの音声をGUIから選択できなくなります。また、同様な問題で今回のフィルタが適用できるのは[aid1]のみ、最初の音声トラックのみでGUIから選択はできません。

今回のフィルタの書き方では映像トラックのない音楽ファイルは再生できません。音楽ファイルにアルバムアートを含んでいれば再生できます。

まとめ

mpvメディアプレーヤでビデオと一緒に音量を表示するラウドネスメーターと音階を表示するConstant-Q変換のヒストグラムを表示してみました。メディアプレーヤに組み込む事で手軽に表示できるようになります。
ラウドネスメーターはYouTubeなどへビデオを投稿する時に見てみると良いでしょう。Constant-Q変換はカラオケの練習や耳コピの時に役立つかもしれません。

mpvプレーヤーでも音声用と映像用のフィルタを複合して使えるlavfi-complexオプションがあります。ですが、まだ使えるというだけのようです。mpvの他のオプションのようには組み込まれていないようです。マルチトラックの音声の切り替えをGUIでできなかったり、lavfi-complexを一度使うとフィルタ解除ができなかったりします。clr効かず、Nullとか""とか\0とか入れてもダメでした。
complexフィルタが使えればafとvfはもういらないので、完全に実装されるのを楽しみに待っています。

コメント

最近のコメント

Threaded Recent Comments will be here.