SoXで16bit・48000kHz・1チャンネル(モノラル)・ノーマライズ(正規化)した音声を作るコマンドメモ

この記事は最終更新日から1年以上が経過しています。情報が古くなっている可能性があります。

諸事情で 100 個近くある WAV ファイル(1秒~20秒くらい)を16bit・サンプルレート48000kHz・1チャンネル(モノラル)に変換、さらにノーマライズ(音量を正規化)して大きすぎない音量に変換する必要があった。
最初は ffmpeg (dynaudnorm) を使ってやってみたがうまく効かず、ffmpeg-normalize も 3 秒以内の音声はノーマライズできないとかで断念。最後に音声編集コマンドラインソフト界のスイミーなんたららしい SoX というソフトを使ってノーマライズさせてみる事にした。

…がこれがかなりの曲者で、ffmpeg みたいな引数を想像していたらどうも引数のタイプごとに入力ファイルの前に記述だとかそもそも引数が数年のうちに変わってるとかなんとかで、2時間くらいエラーと格闘したりかなり大変だった(正直全然分かってない)。

Sponsored Link

コマンド

sox "input.wav" -b 16 "output.wav" channels 1 norm gain -8 rate 48k

これで一発。あとは適当にバッチ組むなりpython書くなりして自動化しませう…

コマンドの解説

  1. “input.wav”
    • 言わなくても分かるであろう入力元(変換元)のファイルの指定。
  2. -b 16
    • ビット深度を16Bitにする。
    • 出力ファイルよりも前に書かないとエラーになるらしい。
  3. “output.wav”
    • 言わなくても分かるであろう出力(変換先)のファイルの指定。
    • SoX は ffmpeg とかとか違い、input と output の後に各種引数をつなげるそう。
    • 日本語ドキュメントも少ないしかなりはまった。
  4. channels 1
    • 音声チャンネルを1チャンネルにする。
    • 要するにこの引数でステレオ→モノラルに出来る。
  5. norm
    • ノーマライズ処理。この引数を挟むだけで良いらしい。
    • 細かな音量調整は後の方で別途やってね、ってことっぽい。
  6. gain -8
    • 音量調整。gain 3 とかにすると 3dB(?)分音量が上がる。
    • 逆に例のように gain -8 とかにすると音量が 8dB(?)分下がる。
    • 結構音量デカめでノーマライズされるので、適宜この引数で音量を下げる。
  7. rate 48k
    • サンプリングレートを指定する。
    • この引数どこのドキュメントにも書いてない…。
    • 48000kHz なら 48k 、 44100kHz なら 44k で良いはず。

機能としては素晴らしいんだけどどうしてこうもコマンドが複雑なんだか…
ffmpeg でできるならそっちでやったほうが絶対に楽だと思う。

コメント