【Python コピペで一撃】指定したフォルダ内のオーディオを一括ノーマライズ
オーディオ編集の際に欠かせない工程の一つが「ノーマライズ」です。
音声の最大音量を一定のレベルに調整することで、クリアで聞きやすい音質に整えることができます。
しかし、手作業で複数のファイルを処理するのは面倒ですよね。
最近ではレコーダー本体にノーマライズ機能が付いているものがあります。
これだけでもこれまでになかった痒い所に手が届く機能であり、自然な録音をベースとしているフィールドレコーディングエンジニアにとっては、まさに神機能。
それでもやっぱり本体内部の処理ですので、どうしても時間がかかる。
PC内のPythonでやる方が圧倒的に早いです。
Pythonを使えば、フォルダ内のオーディオデータをまとめて一括でノーマライズ!
この記事では、Pythonのライブラリ「pydub」を使って、指定したフォルダ内の音声ファイルを-0.1dBにノーマライズし、新しいフォルダに保存する方法を解説します。
必要な準備
今回使うのはPythonのライブラリ「pydub」。
そして音声ファイルの変換に必要な「ffmpeg」です。
以下の手順で環境を整えましょう。
pip install pydub
「pydub」は音声処理に「ffmpeg」を必要とします。
ffmpeg公式サイトからダウンロード・インストールしましょう。
コードの概要
それでは、実際のコードを見てみましょう。
このコードでは、指定したフォルダの中のすべてのオーディオファイルを-0.1dBにノーマライズして、新しいフォルダに保存します。
import os
from pydub import AudioSegment
# ノーマライズしたいフォルダと出力先フォルダのパス
input_folder = 'path/to/input/folder'
output_folder = 'path/to/output/folder'
# 必要に応じてffmpegのフルパスを指定
AudioSegment.converter = "/path/to/ffmpeg"
# 出力フォルダが存在しない場合、作成
os.makedirs(output_folder, exist_ok=True)
# ノーマライズするdB値
target_dbfs = -0.1
# フォルダ内のオーディオファイルをすべて処理
for filename in os.listdir(input_folder):
if filename.endswith(('.mp3', '.wav', '.flac', '.ogg')): # 必要に応じてファイル形式を追加
# オーディオファイルを読み込む
audio = AudioSegment.from_file(os.path.join(input_folder, filename))
# ノーマライズ処理
change_in_dBFS = target_dbfs - audio.max_dBFS
normalized_audio = audio.apply_gain(change_in_dBFS)
# 出力ファイルのパスを作成
output_path = os.path.join(output_folder, filename)
# 新しいフォルダに出力
normalized_audio.export(output_path, format="wav") # 必要に応じてフォーマットを指定
print(f'Normalized and exported: {filename}')
print('All files have been normalized and saved to the new folder.')
最近ちょっとマイブームなのが、コードエディター。
やっぱりシンプルで軽量なものがいいですよね。
ずっとVSCODE使っていたんですが、最近Notepad++というものを使っています。
軽量でかなり使いやすい。
テストランなどはできませんが、使う言語が限られている方や、趣味や業務の補助でプログラミングをやる程度なら最強かな?と思います、超おすすめです。
カスタマイズ方法
- 音量の調整:
target_dbfs
を変更することで、目的の音量に調整可能です。 - 対応ファイル形式:
if filename.endswith(...)
に新しい拡張子を追加すれば、他の形式のファイルも処理可能です。 - 出力フォーマット:
export(output_path, format="wav")
のフォーマットを変更すれば、mp3
やogg
などの形式で保存できます。
例えばノーマライズしたオーディオデータをMP3 320kbps
で出力する場合、export
メソッドのオプションを指定するだけで簡単に実現できます。
以下のコードで、320kbpsのMP3フォーマットで出力する方法を解説します。
以下の部分を変更しましょう。
# ノーマライズされたファイルのエクスポート
normalized_audio.export(output_path, format="mp3", bitrate="320k")
import os
from pydub import AudioSegment
# ノーマライズしたいフォルダと出力先フォルダのパス
input_folder = 'path/to/input/folder'
output_folder = 'path/to/output/folder'
# 必要に応じてffmpegのフルパスを指定
AudioSegment.converter = "/path/to/ffmpeg"
# 出力フォルダが存在しない場合、作成
os.makedirs(output_folder, exist_ok=True)
# ノーマライズするdB値
target_dbfs = -0.1
# フォルダ内のオーディオファイルをすべて処理
for filename in os.listdir(input_folder):
if filename.endswith(('.mp3', '.wav', '.flac', '.ogg')): # 必要に応じてファイル形式を追加
# オーディオファイルを読み込む
audio = AudioSegment.from_file(os.path.join(input_folder, filename))
# ノーマライズ処理
change_in_dBFS = target_dbfs - audio.max_dBFS
normalized_audio = audio.apply_gain(change_in_dBFS)
# 出力ファイルのパスを作成(.mp3に変更)
output_path = os.path.join(output_folder, os.path.splitext(filename)[0] + '.mp3')
# 新しいフォルダに320kbps MP3で出力
normalized_audio.export(output_path, format="mp3", bitrate="320k")
print(f'Normalized and exported as MP3 (320kbps): {filename}')
print('All files have been normalized and saved as MP3 (320kbps) in the new folder.')
pydub
のMP3エクスポートにはlame
コーデックが必要です。
ffmpeg
に含まれている場合が多いですが、動作しない場合は別途インストールしてください。
元のフォルダに上書き保存
変更点と解説
- ファイルの上書き保存:
normalized_audio.export(input_path, format=file_ext)
で、元データのファイル形式を維持しつつ、元のファイルを上書き保存します。 - ファイルの拡張子取得:
file_ext = filename.split('.')[-1]
で元のファイル形式(mp3
、wav
、flac
、ogg
など)を取得し、上書き保存の際に使用します。
注意点
- 元のファイルを上書き保存するため、バックアップを事前に取ることをおすすめします。
- ノーマライズ処理は非可逆的な処理なので、元データに戻したい場合に備えてバックアップが重要です。
ffmpeg
が適切に設定されている必要があります。
このコードを使えば、フォルダ内のすべてのオーディオファイルをノーマライズし、元のファイル形式で元のフォルダに上書き保存できます。
import os
from pydub import AudioSegment
# ノーマライズしたいフォルダのパス
input_folder = 'path/to/input/folder'
# 必要に応じてffmpegのフルパスを指定
AudioSegment.converter = "/path/to/ffmpeg"
# ノーマライズするdB値
target_dbfs = -0.1
# フォルダ内のオーディオファイルをすべて処理
for filename in os.listdir(input_folder):
# オーディオファイルの拡張子を確認
if filename.endswith(('.mp3', '.wav', '.flac', '.ogg')): # 必要に応じてファイル形式を追加
# オーディオファイルを読み込む
input_path = os.path.join(input_folder, filename)
audio = AudioSegment.from_file(input_path)
# ノーマライズ処理
change_in_dBFS = target_dbfs - audio.max_dBFS
normalized_audio = audio.apply_gain(change_in_dBFS)
# 元ファイルの拡張子を取得
file_ext = filename.split('.')[-1]
# 元データと同じファイル形式で上書き保存
normalized_audio.export(input_path, format=file_ext)
print(f'Normalized and overwritten: {filename}')
print('All files have been normalized and overwritten in the original folder.')
今回ご紹介した方法で、Pythonを使ってオーディオデータの一括ノーマライズが簡単にできるようになります。
作業の効率化や音声ファイルの統一に役立つので、ぜひ活用してみてください!
Pythonの強力なオーディオ処理能力を使って、音質の改善や編集作業の効率化に役立てましょう。
音楽制作やポッドキャストの編集など、あらゆるオーディオ関連のシーンで活躍すること間違いなしです!