SoXで16bit・48000kHz・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 で良いと思います(自信がない)

機能としては素晴らしいんだけどどうしてこうもコマンドが複雑なんだか…
金!暴力!SoX!!!!!

Sponsored Link
Sponsored Link
Linux
tsukumiをフォローする
Sponsored Link
つくみ島だより

コメント