[Python] mp3ファイルのメタデータや音量などを編集する方法

PythonでMP3ファイルのメタデータや音量を編集するには、主に以下のライブラリを使用します。

メタデータの編集にはmutagenが便利で、音量の調整にはpydubがよく使われます。

mutagenはMP3ファイルのID3タグ(タイトル、アーティスト、アルバムなど)を読み書きできます。

pydubは音声ファイルの操作に特化しており、音量の変更やトリミング、フォーマット変換が可能です。

pydubを使う際には、ffmpegが必要です。

これらを組み合わせることで、MP3ファイルのメタデータ編集や音量調整が簡単に行えます。

この記事でわかること
  • MP3ファイルのメタデータ編集方法
  • 音量調整の手法と注意点
  • フォーマット変換の手順
  • 複数ファイルの一括処理方法
  • 自動整理スクリプトの作成方法

目次から探す

MP3ファイルのメタデータを編集する方法

Mutagenライブラリのインストール

MP3ファイルのメタデータを編集するためには、まずMutagenライブラリをインストールする必要があります。

以下のコマンドを使用して、pipを使ってインストールします。

pip install mutagen

Mutagenを使った基本的なメタデータの読み込み

Mutagenを使用してMP3ファイルのメタデータを読み込む方法を見てみましょう。

以下のサンプルコードでは、指定したMP3ファイルのメタデータを表示します。

from mutagen.mp3 import MP3
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルのメタデータを読み込む
audio = MP3(file_path)
# メタデータを表示
print(audio)
{'TIT2': <ID3NoHeader: 'タイトル'>, 'TPE1': <ID3NoHeader: 'アーティスト'>, ...}

このコードでは、MP3ファイルのメタデータを辞書形式で表示します。

TIT2はタイトル、TPE1はアーティストを示しています。

メタデータの編集と保存

次に、読み込んだメタデータを編集し、保存する方法を見てみましょう。

以下のサンプルコードでは、タイトルを変更して保存します。

from mutagen.mp3 import MP3
from mutagen.id3 import ID3, ID3NoHeader
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルのメタデータを読み込む
audio = MP3(file_path, ID3=ID3)
# タイトルを変更
audio["TIT2"] = "新しいタイトル"
# メタデータを保存
audio.save()

出力結果はありませんが、指定したMP3ファイルのタイトルが「新しいタイトル」に変更されます。

ID3タグの追加と削除

ID3タグを追加したり削除したりすることも可能です。

以下のサンプルコードでは、アーティストタグを追加し、既存のアルバムタグを削除します。

from mutagen.mp3 import MP3
from mutagen.id3 import ID3, ID3NoHeader, ID3NoHeaderError
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルのメタデータを読み込む
audio = MP3(file_path, ID3=ID3)
# アーティストタグを追加
audio["TPE1"] = "新しいアーティスト"
# アルバムタグを削除
if "TALB" in audio:
    del audio["TALB"]
# メタデータを保存
audio.save()

出力結果はありませんが、アーティストタグが追加され、アルバムタグが削除されます。

特定のタグ(タイトル、アーティスト、アルバムなど)の編集

特定のタグを編集する方法を見てみましょう。

以下のサンプルコードでは、タイトル、アーティスト、アルバムをそれぞれ変更します。

from mutagen.mp3 import MP3
from mutagen.id3 import ID3
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルのメタデータを読み込む
audio = MP3(file_path, ID3=ID3)
# タイトル、アーティスト、アルバムを変更
audio["TIT2"] = "新しいタイトル"
audio["TPE1"] = "新しいアーティスト"
audio["TALB"] = "新しいアルバム"
# メタデータを保存
audio.save()

出力結果はありませんが、指定したMP3ファイルのタイトル、アーティスト、アルバムがそれぞれ変更されます。

メタデータの一括編集方法

複数のMP3ファイルのメタデータを一括で編集することも可能です。

以下のサンプルコードでは、指定したフォルダ内の全てのMP3ファイルのタイトルを一括で変更します。

import os
from mutagen.mp3 import MP3
from mutagen.id3 import ID3
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = MP3(file_path, ID3=ID3)
        
        # タイトルを変更
        audio["TIT2"] = "新しいタイトル"
        
        # メタデータを保存
        audio.save()

出力結果はありませんが、指定したフォルダ内の全てのMP3ファイルのタイトルが「新しいタイトル」に変更されます。

MP3ファイルの音量を編集する方法

Pydubライブラリのインストール

MP3ファイルの音量を編集するためには、Pydubライブラリをインストールする必要があります。

以下のコマンドを使用して、pipを使ってインストールします。

pip install pydub

また、Pydubを使用するためにはFFmpegも必要です。

FFmpegをインストールして、環境変数にパスを追加してください。

Pydubを使った音声ファイルの読み込み

Pydubを使用してMP3ファイルを読み込む方法を見てみましょう。

以下のサンプルコードでは、指定したMP3ファイルを読み込みます。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# 音声の長さを表示
print(f"音声の長さ: {len(audio)} ミリ秒")
音声の長さ: 30000 ミリ秒

このコードでは、MP3ファイルの長さをミリ秒単位で表示します。

音量の増減方法

音量を増減する方法を見てみましょう。

以下のサンプルコードでは、音量を3dB増加させます。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# 音量を3dB増加
louder_audio = audio + 3
# 音量調整後の音声の長さを表示
print(f"調整後の音声の長さ: {len(louder_audio)} ミリ秒")
調整後の音声の長さ: 30000 ミリ秒

音量を増加させても、音声の長さは変わりません。

音量の正規化(Normalization)

音量の正規化を行うことで、音声の音量を均一にすることができます。

以下のサンプルコードでは、音量を正規化します。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# 音量を正規化
normalized_audio = audio.normalize()
# 正規化後の音声の長さを表示
print(f"正規化後の音声の長さ: {len(normalized_audio)} ミリ秒")
正規化後の音声の長さ: 30000 ミリ秒

音量を正規化しても、音声の長さは変わりません。

音量調整後のファイル保存

音量を調整した後、ファイルを保存する方法を見てみましょう。

以下のサンプルコードでは、音量を3dB増加させた音声を新しいファイルとして保存します。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# 音量を3dB増加
louder_audio = audio + 3
# 音量調整後のファイルを保存
louder_audio.export("louder_sample.mp3", format="mp3")

出力結果はありませんが、音量を増加させた音声が louder_sample.mp3 として保存されます。

音量調整の注意点(クリッピングの回避)

音量を増加させる際には、クリッピングに注意が必要です。

クリッピングとは、音声信号が最大値を超えて歪む現象です。

以下のポイントに注意してください。

  • 音量を増加させすぎないようにする。
  • 音量を調整する前に、音声のピークレベルを確認する。
  • 音量を調整した後、音声を再生して確認する。

これらの注意点を守ることで、クリッピングを回避し、音質を保つことができます。

MP3ファイルのフォーマット変換とトリミング

MP3ファイルのフォーマット変換(例:WAV、OGG)

MP3ファイルを他のフォーマットに変換するには、Pydubライブラリを使用します。

以下のサンプルコードでは、MP3ファイルをWAVフォーマットに変換します。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# WAVフォーマットに変換して保存
audio.export("converted_sample.wav", format="wav")

出力結果はありませんが、指定したMP3ファイルが converted_sample.wav として保存されます。

OGGフォーマットに変換する場合は、format="ogg"を指定します。

音声ファイルのトリミング方法

音声ファイルをトリミングするには、Pydubを使用して開始時間と終了時間を指定します。

以下のサンプルコードでは、音声の最初の10秒をトリミングします。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# トリミングする時間(ミリ秒単位)
start_time = 0 * 1000  # 0秒
end_time = 10 * 1000    # 10秒
# 音声をトリミング
trimmed_audio = audio[start_time:end_time]
# トリミング後の音声の長さを表示
print(f"トリミング後の音声の長さ: {len(trimmed_audio)} ミリ秒")
トリミング後の音声の長さ: 10000 ミリ秒

このコードでは、最初の10秒間の音声がトリミングされます。

トリミング後のファイル保存

トリミングした音声を新しいファイルとして保存する方法を見てみましょう。

以下のサンプルコードでは、トリミングした音声をMP3フォーマットで保存します。

from pydub import AudioSegment
# MP3ファイルのパス
file_path = "sample.mp3"
# MP3ファイルを読み込む
audio = AudioSegment.from_file(file_path)
# トリミングする時間(ミリ秒単位)
start_time = 0 * 1000  # 0秒
end_time = 10 * 1000    # 10秒
# 音声をトリミング
trimmed_audio = audio[start_time:end_time]
# トリミング後の音声を保存
trimmed_audio.export("trimmed_sample.mp3", format="mp3")

出力結果はありませんが、トリミングした音声が trimmed_sample.mp3 として保存されます。

複数ファイルの一括トリミング

複数のMP3ファイルを一括でトリミングすることも可能です。

以下のサンプルコードでは、指定したフォルダ内の全てのMP3ファイルの最初の10秒をトリミングします。

import os
from pydub import AudioSegment
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = AudioSegment.from_file(file_path)
        
        # トリミングする時間(ミリ秒単位)
        start_time = 0 * 1000  # 0秒
        end_time = 10 * 1000    # 10秒
        
        # 音声をトリミング
        trimmed_audio = audio[start_time:end_time]
        
        # トリミング後のファイルを保存
        trimmed_audio.export(f"trimmed_{filename}", format="mp3")

出力結果はありませんが、指定したフォルダ内の全てのMP3ファイルの最初の10秒が trimmed_ という接頭辞を付けて保存されます。

応用例:MP3ファイルのバッチ処理

複数ファイルのメタデータ一括編集

複数のMP3ファイルのメタデータを一括で編集する方法を見てみましょう。

以下のサンプルコードでは、指定したフォルダ内の全てのMP3ファイルのタイトルを一括で変更します。

import os
from mutagen.mp3 import MP3
from mutagen.id3 import ID3
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = MP3(file_path, ID3=ID3)
        
        # タイトルを変更
        audio["TIT2"] = "新しいタイトル"
        
        # メタデータを保存
        audio.save()

出力結果はありませんが、指定したフォルダ内の全てのMP3ファイルのタイトルが「新しいタイトル」に変更されます。

複数ファイルの音量一括調整

次に、複数のMP3ファイルの音量を一括で調整する方法を見てみましょう。

以下のサンプルコードでは、指定したフォルダ内の全てのMP3ファイルの音量を3dB増加させます。

import os
from pydub import AudioSegment
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = AudioSegment.from_file(file_path)
        
        # 音量を3dB増加
        louder_audio = audio + 3
        
        # 音量調整後のファイルを保存
        louder_audio.export(file_path, format="mp3")

出力結果はありませんが、指定したフォルダ内の全てのMP3ファイルの音量が3dB増加されます。

フォルダ内の全MP3ファイルを一括変換

MP3ファイルを他のフォーマットに一括で変換する方法を見てみましょう。

以下のサンプルコードでは、指定したフォルダ内の全てのMP3ファイルをWAVフォーマットに変換します。

import os
from pydub import AudioSegment
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = AudioSegment.from_file(file_path)
        
        # WAVフォーマットに変換して保存
        audio.export(f"{os.path.splitext(filename)[0]}.wav", format="wav")

出力結果はありませんが、指定したフォルダ内の全てのMP3ファイルがWAVフォーマットに変換されて保存されます。

MP3ファイルの自動整理スクリプト

最後に、MP3ファイルを自動で整理するスクリプトの例を見てみましょう。

以下のサンプルコードでは、指定したフォルダ内のMP3ファイルをアーティスト名のフォルダに整理します。

import os
from mutagen.mp3 import MP3
from mutagen.id3 import ID3
# MP3ファイルが格納されているフォルダのパス
folder_path = "mp3_files"
# フォルダ内の全てのMP3ファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(folder_path, filename)
        audio = MP3(file_path, ID3=ID3)
        
        # アーティスト名を取得
        artist = audio.get("TPE1", "Unknown Artist").text[0]
        
        # アーティスト名のフォルダを作成
        artist_folder = os.path.join(folder_path, artist)
        os.makedirs(artist_folder, exist_ok=True)
        
        # MP3ファイルをアーティスト名のフォルダに移動
        os.rename(file_path, os.path.join(artist_folder, filename))

出力結果はありませんが、指定したフォルダ内のMP3ファイルがアーティスト名のフォルダに整理されます。

これにより、ファイル管理が容易になります。

よくある質問

Mutagenで編集できるメタデータの種類は?

Mutagenライブラリを使用すると、以下のようなメタデータを編集できます。

  • タイトル (TIT2): 曲のタイトル
  • アーティスト (TPE1): アーティスト名
  • アルバム (TALB): アルバム名
  • トラック番号 (TRCK): トラックの番号
  • ジャンル (TCON): 音楽のジャンル
  • 年 (TYER): リリース年

これらのタグはID3v1およびID3v2形式でサポートされており、他にもカスタムタグを追加することも可能です。

Pydubで音量を調整すると音質が劣化しますか?

Pydubで音量を調整する際、音質が劣化する可能性はありますが、通常は微小な調整であれば影響は少ないです。

ただし、音量を大幅に増加させると、クリッピングが発生し、音質が劣化することがあります。

音量調整後は、必ず音声を再生して確認することをお勧めします。

音質を保つためには、音量を適切に調整し、必要に応じて正規化を行うと良いでしょう。

MP3ファイルの編集にFFmpegは必須ですか?

FFmpegはPydubの音声処理機能を強化するために必要ですが、必須ではありません。

PydubはWAVファイルなどの一部のフォーマットに対してはFFmpegなしでも動作します。

しかし、MP3ファイルやOGGファイルなど、より多くのフォーマットを扱うためにはFFmpegのインストールが推奨されます。

FFmpegをインストールすることで、Pydubの機能が拡張され、より多くの音声ファイルを扱うことが可能になります。

まとめ

この記事では、Pythonを使用してMP3ファイルのメタデータや音量を編集する方法、さらにフォーマット変換やトリミングの手法について詳しく解説しました。

これにより、音声ファイルの管理や編集がより効率的に行えるようになります。

ぜひ、紹介したサンプルコードを参考にして、自分の音声ファイルを自由に編集し、整理することに挑戦してみてください。

  • URLをコピーしました!
目次から探す