【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")のフォーマットを変更すれば、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の強力なオーディオ処理能力を使って、音質の改善や編集作業の効率化に役立てましょう。

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