はじめに
スマホ(Pixel 9a)で録音したとある音声データがあり、それを聞きやすくするために対応した ffmpeg を使った処理(音量調整など)に関する試行錯誤のメモです。とりあえず、その概要のみを記事にしてみました。
データに関する補足と今回の内容の注意点
対象のデータ(スマホで収録した音声)は、複数名の話者がいて、それぞれの話者の収録データ上での音量が大きかったり小さかったりするものです。少し補足すると、スマホと話者の位置関係や話者の声の大きさ、その他の要因が影響して、「一部の話者の音量が小さい」「同じ話者でも一部の発言の音量が小さい」ということが起こっている音声データです。
本記事の手順は、Web の情報などを見つつ自身が試行錯誤した流れのメモです。「このやり方が本当にベストなのか」や「この他にも良い方法がある可能性」の確認・検討は、十分にできていない部分があります。
ポイントのまとめ
音声データの情報
今回の試行錯誤を行った対象の音声データとその処理結果について、波形データに関する情報を掲載します。
波形のデータ
今回の処理対象の音声データに関して、波形を確認する手順をふみました。その際に出力した波形の画像を以下に掲載します。
とりあえずここでは、波形の振幅の大きいところと小さいところが混在している(= 調整をしたほうが良さそうなデータである)ということを視覚的に確認しました。
それと、今回の試行錯誤をした後の音声データの波形を以下に掲載します。その結果が 2つありますが、それらを処理した時に用いたコマンドの説明をこの後に書きます。
最初に掲載していた音声データの波形と比べると、振幅の大小の差があった部分が、かなり調整されたのが分かります。
この後の内容に関わる注意点
この後に ffmpeg を使って音声データを処理するのに用いたコマンドを書いています。そのコマンドのオプション・パラメータは、自身の処理対象にしている音声データに合わせて調整した数値です。
そのため、今回用いた音声データ以外のデータを処理する場合は、その部分を変更する必要があります(今回の処理パラメータを決めるための前段階で用いた音声データの解析手順については、別途、記事を書こうと思います)。
上記の調整のために実行した ffmpeg のコマンド【その1】
上記を実現したコマンドも、先に記載しておきます。
ffmpeg -i 【入力ファイルの名前】.m4a -af "highpass=f=100,lowpass=f=5500,acompressor=threshold=-22dB:ratio=5.5:attack=5:release=70:makeup=9dB,dynaudnorm=f=160:g=18:p=0.93,loudnorm=I=-16:LRA=11:linear=true" -c:a aac -b:a 192k 【出力ファイルの名前】.m4a
コマンドのオプションの補足
上記のオプションの部分を、以下にリストで書いてみます。
- -i 【入力ファイルの名前】.m4a — 入力ファイル名
-
-af "..." — オーディオフィルタチェーン(カンマ区切り)
- highpass=f=100 — 100Hz以下の低音をカット(環境ノイズなどの除去)
- lowpass=f=5500 — 5500Hz以上の高音をカット
-
acompressor — ダイナミックレンジを圧縮(音量差を小さくする)
- threshold=-22dB — 圧縮が始まる音量の閾値
- ratio=5.5 — 圧縮比(閾値を超えた分を5.5:1に圧縮)
- attack=5 — 圧縮が効き始めるまでの時間(ms)
- release=70 — 圧縮が解除されるまでの時間(ms)
- makeup=9dB — 圧縮後に全体の音量を9dB持ち上げる補正
-
dynaudnorm — 動的な音量正規化(区間ごとに音量を均一化)
- f=160 — フレームサイズ(分析する区間の長さ、ms)
- g=18 — ガウシアンウィンドウサイズ(平滑化の度合い)
- p=0.93 — ターゲットピーク値(0.93 = 最大音量の93%を目標)
-
loudnorm — EBU R128準拠のラウドネス正規化
- I=-16 — 目標ラウドネス(-16 LUFS)
- LRA=11 — 許容するラウドネスレンジ(11 LU)
- linear=true — リニアモードで処理
- -c:a aac — 出力の音声コーデックをAACに指定
- -b:a 192k — 音声ビットレートを192kbpsに指定
- 【出力ファイルの名前】.m4a — 出力ファイルの指定
上記の調整のために実行した ffmpeg のコマンド【その2】
上記のコマンドで処理した音声データについて、「特定のノイズが残っており、そしてそのノイズの音量が大きくなった感じ」がありました。そのノイズが強調されたものを何とかしようとして、オプションやパラメータを少し変えた以下のコマンドも試しました。
※ しかし、以下のコマンドで処理しても「特定のノイズが残って音量が大きくなっている」という部分は、あまり変化がなさそうでした
ffmpeg -i 【入力ファイルの名前】.m4a -af "highpass=f=100,lowpass=f=5500,afftdn=nr=12:tn=1,acompressor=threshold=-22dB:ratio=5.5:attack=8:release=90:makeup=8dB,dynaudnorm=f=180:g=15:p=0.95,loudnorm=I=-16:LRA=11:linear=true" -c:a aac -b:a 192k 【出力ファイルの名前】.m4a
1つ目のコマンドと違いがある部分のみ、以下でざっくり説明します。
追加したフィルタ:
-
afftdn=nr=12:tn=1 — FFTベースのノイズ除去(lowpassの後、acompressorの前に追加)
- nr=12 — ノイズ低減量(dB)
- tn=1 — トーンノイズの除去を有効化
変更したパラメータ:
| パラメータ | 前 | 後 |
|---|---|---|
| acompressor attack | 5 | 8 |
| acompressor release | 70 | 90 |
| acompressor makeup | 9dB | 8dB |
| dynaudnorm f | 160 | 180 |
| dynaudnorm g | 18 | 15 |
| dynaudnorm p | 0.93 | 0.95 |
参考にした記事
今回の内容を進めるにあたり、以下を参考にしました。
●[FFmpeg] 音声を聞きやすく調整する »キリンスキ
https://kirinsuki.net/2024/03/17/
●FFmpegのDynamic Audio Normalizer(dynaudnorm)フィルターで音声ファイルを聞きやすい音量にする|かねだ
https://note.com/skaneda/n/n68c0a934b2fa


