[Python] mp3ファイルのメタデータや音量などを編集する方法
PythonでMP3ファイルのメタデータや音量を編集するには、主に以下のライブラリを使用します。
メタデータの編集にはmutagen
が便利で、音量の調整にはpydub
がよく使われます。
mutagen
はMP3ファイルのID3タグ(タイトル、アーティスト、アルバムなど)を読み書きできます。
pydub
は音声ファイルの操作に特化しており、音量の変更やトリミング、フォーマット変換が可能です。
pydub
を使う際には、ffmpeg
が必要です。
これらを組み合わせることで、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ファイルがアーティスト名のフォルダに整理されます。
これにより、ファイル管理が容易になります。
まとめ
この記事では、Pythonを使用してMP3ファイルのメタデータや音量を編集する方法、さらにフォーマット変換やトリミングの手法について詳しく解説しました。
これにより、音声ファイルの管理や編集がより効率的に行えるようになります。
ぜひ、紹介したサンプルコードを参考にして、自分の音声ファイルを自由に編集し、整理することに挑戦してみてください。