指定したフォルダ内のオーディオを一括ノーマライズ

投稿者: | 2025年3月7日

オーディオ編集の際に欠かせない工程の一つが「ノーマライズ」です。

音声の最大音量を一定のレベルに調整することで、クリアで聞きやすい音質に整えることができます。

しかし、手作業で複数のファイルを処理するのは面倒ですよね。

最近ではレコーダー本体にノーマライズ機能が付いているものがあります。

これだけでもこれまでになかった痒い所に手が届く機能であり、自然な録音をベースとしているフィールドレコーディングエンジニアにとっては、まさに神機能。

それでもやっぱり本体内部の処理ですので、どうしても時間がかかる。

PC内のPythonでやる方が圧倒的に早いです。

Pythonを使えば、フォルダ内のオーディオデータをまとめて一括でノーマライズ!

この記事では、Pythonのライブラリ「pydub」を使って、指定したフォルダ内の音声ファイルを-0.1dBにノーマライズし、新しいフォルダに保存する方法を解説します。

キーパーソン紹介

こうたろう

この記事を担当:こうたろう

1986年生まれ
音大卒業後日本、スウェーデン、ドイツにて音楽活動
ドイツで「ピアノとコントラバスのためのソナタ」をリリースし、ステファン・デザイアーからマルチマイクREC技術を学び帰国
金田式DC録音のスタジオにて音響学を学ぶ
独立後芸術工房Pinocoaを結成しアルゼンチンタンゴ音楽を専門にプロデュース
その後写真・映像スタジオで音響担当を経験し、写真を学ぶ
現在はヒーリングサウンド専門の音楽ブランド[Curanz Sounds]を立ち上げ、ピアニスト, 音響エンジニア, マルチメディアクリエーターとして活動中
当サイトでは音響エンジニアとしての経験、写真スタジオで学んだ経験を活かし、制作機材の解説や紹介をしています。
♪この記事には広告リンクを含みます♪

五島昭彦

【さらなる専門家の監修】録音エンジニア:五島昭彦

学生時代に金田明彦氏に弟子入り。
ワンポイント録音の魅力に取り憑かれ、Panasonic半導体部門を経て、退職後金田式DC録音の専門スタジオ:タイムマシンレコードを設立。
ジャズは北欧系アーティストを中心に様々な美しい旋律を録音。
クラシック関係は国内外の様々なアーティストのレコーディングを担当しており、民族音楽にも精通。
現在は金田式DC録音のDSDレコーディングを中心にアコースティック楽器の収録を軸に活動中。
世界で唯一、金田明彦氏直系の弟子であり、金田明彦氏自らが手がけた金田式DC録音システムを使用している。

必要な準備

今回使うのは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")のフォーマットを変更すれば、mp3oggなどの形式で保存できます。

例えばノーマライズしたオーディオデータを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に含まれている場合が多いですが、動作しない場合は別途インストールしてください。

元のフォルダに上書き保存

変更点と解説

  1. ファイルの上書き保存: normalized_audio.export(input_path, format=file_ext)で、元データのファイル形式を維持しつつ、元のファイルを上書き保存します。
  2. ファイルの拡張子取得: file_ext = filename.split('.')[-1]で元のファイル形式(mp3wavflacoggなど)を取得し、上書き保存の際に使用します。

注意点

  • 元のファイルを上書き保存するため、バックアップを事前に取ることをおすすめします。
  • ノーマライズ処理は非可逆的な処理なので、元データに戻したい場合に備えてバックアップが重要です。
  • 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の強力なオーディオ処理能力を使って、音質の改善や編集作業の効率化に役立てましょう。

音楽制作やポッドキャストの編集など、あらゆるオーディオ関連のシーンで活躍すること間違いなしです!