空音開発Kuon R&D
録音技術 · 2025.03.07

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

オーディオ編集の際に欠かせない工程の一つが「ノーマライズ」です。 音声の最大音量を一定のレベルに調整することで、クリアで聞きやすい音質に整えることができます。 しかし、手作業で複数のファイルを処理するのは面倒ですよね。

目次

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

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

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

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

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

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

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

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

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

必要な準備

今回使うのはPythonのライブラリ「pydub」。

そして音声ファイルの変換に必要な「ffmpeg」です。

以下の手順で環境を整えましょう。

Code
pip install pydub

「pydub」は音声処理に「ffmpeg」を必要とします。

ffmpeg公式サイトからダウンロード・インストールしましょう。

コードの概要

それでは、実際のコードを見てみましょう。

このコードでは、指定したフォルダの中のすべてのオーディオファイルを-0.1dBにノーマライズして、新しいフォルダに保存します。

Code
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フォーマットで出力する方法を解説します。

以下の部分を変更しましょう。

Code
# ノーマライズされたファイルのエクスポート
normalized_audio.export(output_path, format="mp3", bitrate="320k")
Code
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]で元のファイル形式(mp3、wav、flac、oggなど)を取得し、上書き保存の際に使用します。

注意点

  • 元のファイルを上書き保存するため、バックアップを事前に取ることをおすすめします。
  • ノーマライズ処理は非可逆的な処理なので、元データに戻したい場合に備えてバックアップが重要です。
  • ffmpegが適切に設定されている必要があります。

このコードを使えば、フォルダ内のすべてのオーディオファイルをノーマライズし、元のファイル形式で元のフォルダに上書き保存できます。

Code
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の強力なオーディオ処理能力を使って、音質の改善や編集作業の効率化に役立てましょう。

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

関連記事

ジャーナルへ戻る