Pythonライブラリ〜Pydubを使ってオーディオファイルを指定のdbにてノーマライズ
作品制作の際のノーマライズといえば、複雑な思考回路が必要になりますが、ポッドキャストの投稿や、簡単なノーマライズでいいだけの時もあります。
そのたびにいちいちDAWソフトやマスタリングソフトを出すのは面倒なのでPythonでノーマライズしてしまいましょう。
もちろん一括も可能です。
Pydubというライブラリを使います。
Pydubのインストールや根本的なエラーに対する対処はこちらの記事を参照してください。
Pythonライブラリ〜Pydubを使ってオーディオファイルを変換するコード
指定のdbでノーマライズ
こちらのフォームで可能です。
from pydub import AudioSegment
# オーディオファイルの読み込み
audio = AudioSegment.from_file("example.mp3")
# 現在のピークボリュームレベル(dBFS)を取得
current_peak = audio.dBFS
# 目標のピークボリュームレベル
target_peak = -0.1
# ノーマライズに必要なボリューム調整量を計算
change_in_dB = target_peak - current_peak
# ボリュームを調整
normalized_audio = audio.apply_gain(change_in_dB)
# ノーマライズされたオーディオを保存
normalized_audio.export("normalized_audio.mp3", format="mp3")
ただし、ピークノーマライズは音質に影響を与える可能性があるため、特に音量を大幅に上げる場合は注意が必要です。
ある程度適切な録音レベルを把握しながら録音できる中級者以降向けになります。
また、32bitの場合は24bitに処理してからノーマライズする必要があります。
そちらは後半に。
また、ファイルの形式やビットレートなどの他の要因も音質に影響を与えるため、これらの設定も考慮に入れるとよいでしょう。
当然-0.1dbである必要はありません。
フォルダ内のファイルを一括ノーマライズ
import os
from pydub import AudioSegment
# 対象のフォルダと出力フォルダを指定
input_folder = 'path/to/your/input/folder'
output_folder = 'path/to/your/output/folder'
# 目標のピークボリュームレベル(例:-0.1dB)
target_peak = -0.1
# 対象のフォルダ内のすべてのファイルをループ処理
for filename in os.listdir(input_folder):
if filename.endswith('.mp3'): # MP3ファイルのみ処理(必要に応じて変更)
# オーディオファイルの読み込み
file_path = os.path.join(input_folder, filename)
audio = AudioSegment.from_file(file_path)
# 現在のピークボリュームレベル(dBFS)を取得
current_peak = audio.dBFS
# ノーマライズに必要なボリューム調整量を計算
change_in_dB = target_peak - current_peak
# ボリュームを調整
normalized_audio = audio.apply_gain(change_in_dB)
# ノーマライズされたオーディオを出力フォルダに保存
output_path = os.path.join(output_folder, filename)
normalized_audio.export(output_path, format="mp3")
32bitを取り扱う際の処理
32ビットのオーディオファイルをPydubで処理するための具体的な手順と方法を説明します。
ただし、Pydubは内部的にオーディオファイルを16ビットの深度で扱うため、32ビットファイルを扱う際にはいくつかの制約があります。
特に、32ビットのオーディオファイルをそのままのビット深度で完全に処理することはできませんが、ffmpegなどの外部ツールを利用することで読み込みと基本的な編集は可能です。
必要なツールとライブラリ
- Pydub: Pythonのオーディオ処理ライブラリ。(すでにインストール済み)
- ffmpeg: マルチメディアファイルを扱うための強力なツール。32ビットファイルの読み込みに必要。(インストールと設定方法は下記の記事を参照してください。)
Pythonライブラリ〜Pydubを使ってオーディオファイルを変換するコード
from pydub import AudioSegment
# 32ビットのオーディオファイルを読み込む
audio = AudioSegment.from_file("path/to/your/32bit-file.wav", format="wav")
# 例:ボリュームを5dB上げる
audio = audio + 5
# 編集したオーディオを16ビットの深度で保存
audio.export("output-file.wav", format="wav", parameters=["-acodec", "pcm_s16le"])
- Pydubは内部的にオーディオデータを16ビットで処理します。32ビットのオーディオファイルを扱う際には、この変換による品質の変化が生じる可能性があります。
- 保存時のフォーマットとビットレートは、
export
メソッドのparameters
引数で調整可能です。 - 32ビットファイルの処理には、より専門的なオーディオ処理ライブラリ(例えば、
wave
やscipy.io.wavfile
)を使用することも検討してください。
作品制作の際は必ずDAWソフトやマスタリングソフトなどの専門ソフトにて調整するようにしましょう。