やりたいこと
- mp3 や mp4 などの音声データの音量を、ffmpeg で聞きやすいレベルに変換する方法です。
- ffmpeg 4.0 を使います。
- Windows 10 / Ubuntu 20.04LTS / MacOS 10.15.7 (intel) のどれでもできることは確認済み(M1 Mac では試してません)。
参考
- https://nico-lab.net/normalize_audio_with_ffmpeg/
- https://nico-lab.net/ebur128_with_ffmpeg/
- https://qiita.com/cha84rakanal/items/e84fe4eb6fbe2ae13fd8
- https://ffmpeg.org/ffmpeg.html
むしろ上記の抜粋。
実食
音量レベルを確認する。
ffmpeg -i input.mkv -vn -af volumedetect -f null -
- -i は入力ファイル。mp4 でも mp3 でも OK
- -vn でビデオストリームを無視する
- -af でオーディオフィルタを指定する (volumedetect フィルタの指定)
- -f null で出力ファイルを null に指定。
- 最後の - はダミー
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] n_samples: 30121984
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] mean_volume: -35.0 dB
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] max_volume: -10.0 dB
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_10db: 14
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_11db: 66
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_12db: 256
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_13db: 498
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_14db: 1262
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_15db: 2748
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_16db: 6410
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_17db: 10955
[Parsed_volumedetect_0 @ 0x7ffdf671c9c0] histogram_18db: 20253
こんな感じで出るので、max_volume が 0dB くらいになるように合わせる。上の場合は max_volume が -10dB になっているので 10dB 上げる。
ゲイン調整
ffmpeg -i input -af volume=10dB output
- -af volume でゲインを指定する。
再エンコード不要の場合は下記:
ffmpeg -i input -codec:v copy -af volume=10dB output
無音部分を取得する
おまけ
ffmpeg -i input -af silencedetect=n=-30dB:d=1 -f null -
- n で音量のレベルを指定する
- d でそのレベルが続く時間 (sec) を指定する