FFmpegのDynamic Audio Normalizer(dynaudnorm)フィルターで音声ファイルを聞きやすい音量にする

今まで音声ファイルの音量調整にはAudacityのノーマライズやコンプレッサーなどを使用していました。
(*現行バージョンのAudacityは問題があるため使用はおすすめできません、forkしたTenacityをWindows10環境でbuildできましたが、使用できるFFmpegライブラリを見つけられませんでした(そのうちリリースされる?))
(*2022/05/23追記、Tenacity開発が止まってしまったようにも見えます。そして現在Audacityのプライバシー問題がどうなっているのかよくわかりません。AudacityがMicrosoft Storeにリリースを許されたということは、問題は解決したのでしょうか?2021年7月2日のDESKTOP PRIVACY NOTICEと批判されたあとの2021年7月22日のDESKTOP PRIVACY NOTICEを比較するとプライバシーへ考慮した文面へ変わっていることは確認できますが、これをもって100%問題が解決したといえるのか判断がつきません)

私の場合
・低めの音量が聞きやすい音量まで上がればいい
という状況も多く
「それってもしかしてFFmpegでなんとかなるのでは」
と思って検索したら、なんとかなりました。

ffmpeg で聞き取りやすい音量に変える dynaudnorm | ニコラボ

Audio Filters(af)のDynamic Audio Normalizer(dynaudnorm)フィルターを使用する、が答えでした。

ffmpeg -i 入力ファイル -af dynaudnorm 出力ファイル

peak(p)やmaxgain(m)などのオプションを指定する場合は

ffmpeg -i 入力ファイル -af "dynaudnorm=p=0.8:m=25" 出力ファイル

のような記述になります。

レアケースだと思うのですが、音声のモノラル化(-ac 1)と同時にノーマライズ(-af dynaudnorm)すると、オプションのpやmが無視されてしまうようです。

ffmpeg -i 入力ファイル -ac 1 -af dynaudnorm 出力ファイル

dynaudnormへのオプションの指定なし(=デフォルト値になる)、オプション指定ありは関係無く無視されました。確認したバージョンはversion 4.2.4-1ubuntu0.1です。変換後の音声ファイルを試聴した限りクリッピングは起きていませんでしたが、これは変換元の音声ファイルや再生環境に依存するかもしれません。とりあえず自分が聴く分には問題ない、どうしても気になるなら複数回の変換で対応できるため、この件はちゃんと調べていません。

音声ファイルの波形を見たい場合は

AudioMass - Audio Editor

がブラウザだけで済むので便利ではないでしょうか。ただしファイルサイズが大きい(サイズの具体値は未確認)とout of memoryになるようです。

FFmpegで音量を確認する場合はvolumedetectフィルタ(文字)かshowwavespicフィルタ(画像)を使用します。


以下dynaudnorm実施時の波形とvolumedetectの値です。
mean_volumeは平均音量、max_volumeは最大音量です。

1.オリジナルの音声ファイルをモノラル化後(*dynaudnorm実施)

画像1
ステレオの音声ファイルを単純にモノラル化しただけ、ちなみになぜモノラル化するのかというと、トークショーなどはモノラルのほうが聴きやすい上にファイルサイズが減るためです

mean_volume: -24.3 dB
max_volume: -3.1 dB

2.上記1のモノラル化したファイルにdynaudnormを実施

画像2
上記1のモノラル化した音声ファイルにdynaudnormを実施(=複数回エンコードを実施)、全体的に音量が上がっていることがわかります

mean_volume: -20.6 dB
max_volume: -0.0 dB

3.オリジナルの音声ファイルをモノラル化+dynaudnorm(上記1と2)を同時に実施

画像3
dynaudnorm単体実施時と比較すると波形が違いmean_volumeも下がっている(=平均音量が上がっている)ことがわかります、先にも書いたようにモノラル化+ノーマライズを同時に行うとこのような挙動になります

mean_volume: -17.9 dB
max_volume: 0.0 dB

【了】

この記事が気に入ったらサポートをしてみませんか?