オーディオ

[Python] mp3ファイルのタグを取得・編集する方法

PythonでMP3ファイルのタグを取得・編集するには、mutagenライブラリが便利です。

mutagenは、MP3ファイルのメタデータ(ID3タグ)を読み書きできるライブラリです。

まず、pip install mutagenでインストールします。

MP3ファイルを読み込む際は、mutagen.File()を使用し、タグ情報にアクセスできます。

編集する場合は、タグを変更してからsave()メソッドで保存します。

ID3タグには、タイトル、アーティスト、アルバムなどの情報が含まれます。

Mutagenライブラリの概要

Mutagenとは?

Mutagenは、Pythonで音楽ファイルのメタデータを操作するためのライブラリです。

特にMP3ファイルのID3タグを扱うのに便利で、タグの取得、編集、削除が簡単に行えます。

音楽ファイルの管理や整理を行う際に非常に役立つツールです。

Mutagenのインストール方法

MutagenはPythonのパッケージ管理ツールであるpipを使用して簡単にインストールできます。

以下のコマンドを実行してください。

pip install mutagen

Mutagenで扱えるファイル形式

Mutagenは以下のような多くの音楽ファイル形式をサポートしています。

ファイル形式説明
MP3音楽ファイルの一般的な形式
FLAC高音質の音楽ファイル形式
Ogg Vorbisオープンソースの音楽ファイル形式
AACAppleの音楽ファイル形式
Wav無圧縮の音楽ファイル形式

ID3タグとは?

ID3タグは、MP3ファイルに埋め込まれるメタデータの一種で、曲名、アーティスト名、アルバム名、トラック番号などの情報を含みます。

これにより、音楽プレーヤーやライブラリソフトウェアが曲の情報を表示できるようになります。

ID3タグには主にID3v1とID3v2の2つのバージョンがあり、ID3v2はより多くの情報を格納できるため、一般的に使用されます。

MP3ファイルのタグを取得する方法

MP3ファイルを読み込む

MP3ファイルを読み込むには、MutagenライブラリのFile関数を使用します。

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

from mutagen.mp3 import MP3
# MP3ファイルを読み込む
audio_file = MP3("example.mp3")

タグ情報にアクセスする

読み込んだMP3ファイルからタグ情報にアクセスするには、audio_fileオブジェクトの属性を使用します。

以下のコードでは、タグ情報にアクセスする方法を示します。

# タグ情報にアクセスする
title = audio_file.get("TIT2")  # タイトル
artist = audio_file.get("TPE1")  # アーティスト
album = audio_file.get("TALB")    # アルバム
print(f"タイトル: {title}, アーティスト: {artist}, アルバム: {album}")
タイトル: Example Title, アーティスト: Example Artist, アルバム: Example Album

タグの種類(タイトル、アーティスト、アルバムなど)

MP3ファイルのタグには、以下のような種類があります。

タグ名説明
TIT2曲のタイトル
TPE1アーティスト名
TALBアルバム名
TRCKトラック番号
TCONジャンル

タグ情報を表示する方法

タグ情報を表示するには、上記のようにprint関数を使用して、各タグの値を出力します。

以下のサンプルコードでは、すべてのタグ情報を表示する方法を示します。

# すべてのタグ情報を表示する
for tag in audio_file.tags.keys():
    print(f"{tag}: {audio_file.tags[tag]}")
TIT2: Example Title
TPE1: Example Artist
TALB: Example Album
TRCK: 1
TCON: Pop

タグが存在しない場合の対処法

タグが存在しない場合、getメソッドNoneを返します。

これを考慮して、タグ情報を取得する際には、存在チェックを行うことが重要です。

以下のサンプルコードでは、タグが存在しない場合の対処法を示します。

# タグ情報を取得し、存在チェックを行う
title = audio_file.get("TIT2")
if title is None:
    title = "タイトル情報は存在しません"
print(f"タイトル: {title}")
タイトル: タイトル情報は存在しません

このように、タグが存在しない場合には適切なメッセージを表示することで、ユーザーにわかりやすく情報を提供できます。

MP3ファイルのタグを編集する方法

タグ情報の編集方法

MP3ファイルのタグ情報を編集するには、audio_fileオブジェクトの属性に新しい値を代入します。

以下のサンプルコードでは、タイトルとアーティスト名を編集する方法を示します。

from mutagen.mp3 import MP3
# MP3ファイルを読み込む
audio_file = MP3("example.mp3")
# タグ情報を編集する
audio_file["TIT2"] = "新しいタイトル"
audio_file["TPE1"] = "新しいアーティスト"

タグの追加方法

新しいタグを追加するには、audio_fileオブジェクトに新しいキーと値を設定します。

以下のコードでは、アルバム名を追加する方法を示します。

# 新しいタグを追加する
audio_file["TALB"] = "新しいアルバム"

タグの削除方法

タグを削除するには、del文を使用します。

以下のサンプルコードでは、特定のタグを削除する方法を示します。

# タグを削除する
del audio_file["TCON"]  # ジャンルタグを削除

編集したタグを保存する

タグを編集した後は、必ず変更を保存する必要があります。

saveメソッドを使用して、編集した内容をファイルに書き込みます。

以下のコードでは、タグを保存する方法を示します。

# 編集したタグを保存する
audio_file.save()

既存のタグを上書きする際の注意点

既存のタグを上書きする際には、元の情報が失われるため注意が必要です。

特に重要な情報の場合は、上書き前にバックアップを取ることをお勧めします。

また、タグの形式や内容が正しいか確認することも重要です。

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

  • バックアップ: 元のファイルをコピーしておく。
  • 形式の確認: タグの形式が正しいか確認する。
  • 情報の確認: 上書きする情報が正確であることを確認する。

これらの注意点を守ることで、タグ編集によるデータ損失を防ぐことができます。

完全なサンプルコード

以下に、MP3ファイルのタグを取得、編集、追加、削除、保存する一連の処理を行う完全なサンプルコードを示します。

このコードは、Mutagenライブラリを使用してMP3ファイルのタグを操作する方法を示しています。

from mutagen.mp3 import MP3
# MP3ファイルを読み込む
audio_file = MP3("example.mp3")
# タグ情報を表示する
print("元のタグ情報:")
for tag in audio_file.tags.keys():
    print(f"{tag}: {audio_file.tags[tag]}")
# タグ情報を編集する
audio_file["TIT2"] = "新しいタイトル"  # タイトルを編集
audio_file["TPE1"] = "新しいアーティスト"  # アーティスト名を編集
# 新しいタグを追加する
audio_file["TALB"] = "新しいアルバム"  # アルバム名を追加
# タグを削除する
del audio_file["TCON"]  # ジャンルタグを削除
# 編集したタグを保存する
audio_file.save()
# 編集後のタグ情報を表示する
print("\n編集後のタグ情報:")
for tag in audio_file.tags.keys():
    print(f"{tag}: {audio_file.tags[tag]}")

コードの説明

  1. MP3ファイルの読み込み: MP3クラスを使用して指定したMP3ファイルを読み込みます。
  2. 元のタグ情報の表示: forループを使用して、元のタグ情報を表示します。
  3. タグ情報の編集: タイトルとアーティスト名を新しい値に変更します。
  4. 新しいタグの追加: アルバム名を新たに追加します。
  5. タグの削除: ジャンルタグを削除します。
  6. タグの保存: saveメソッドを使用して、編集した内容をファイルに保存します。
  7. 編集後のタグ情報の表示: 再度、タグ情報を表示して変更を確認します。

このサンプルコードを実行することで、MP3ファイルのタグを簡単に操作することができます。

ファイル名やタグの内容は適宜変更して使用してください。

応用例:複数ファイルのタグを一括編集

ディレクトリ内のMP3ファイルを一括処理する方法

ディレクトリ内のすべてのMP3ファイルを一括で処理するには、osモジュールを使用してファイルをリストアップし、Mutagenでそれぞれのファイルを読み込むことができます。

以下のサンプルコードでは、指定したディレクトリ内のMP3ファイルを一括で処理する方法を示します。

import os
from mutagen.mp3 import MP3
# 処理するディレクトリのパス
directory_path = "path/to/your/mp3/files"
# ディレクトリ内のMP3ファイルを一括処理
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        print(f"処理中: {filename}")
        # ここにタグ編集の処理を追加

タグの一括変更(例:アーティスト名の統一)

すべてのMP3ファイルのアーティスト名を統一するには、上記のループ内でアーティスト名を変更します。

以下のコードでは、アーティスト名を「統一アーティスト」に変更する方法を示します。

# アーティスト名を一括変更
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        audio_file["TPE1"] = "統一アーティスト"  # アーティスト名を変更
        audio_file.save()  # 変更を保存
        print(f"{filename} のアーティスト名を変更しました。")

タグの一括削除

特定のタグをすべてのMP3ファイルから削除するには、同様にループ内でdel文を使用します。

以下のコードでは、ジャンルタグを一括で削除する方法を示します。

# ジャンルタグを一括削除
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        if "TCON" in audio_file:
            del audio_file["TCON"]  # ジャンルタグを削除
            audio_file.save()  # 変更を保存
            print(f"{filename} のジャンルタグを削除しました。")

ファイル名からタグを自動生成する方法

ファイル名を基にタグ情報を自動生成することも可能です。

例えば、ファイル名が「アーティスト – 曲名.mp3」の形式である場合、アーティスト名と曲名を抽出してタグに設定できます。

以下のサンプルコードでは、その方法を示します。

# ファイル名からタグを自動生成
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        
        # ファイル名を分割してアーティスト名と曲名を取得
        artist, title = filename[:-4].split(" - ")  # 拡張子を除去して分割
        
        audio_file["TPE1"] = artist  # アーティスト名を設定
        audio_file["TIT2"] = title    # 曲名を設定
        audio_file.save()  # 変更を保存
        print(f"{filename} のタグを自動生成しました。")

このように、ディレクトリ内のMP3ファイルを一括で処理することで、効率的にタグの編集や削除を行うことができます。

ファイル名からの自動生成も活用することで、手間を大幅に削減できます。

応用例:タグ情報を使ったファイル整理

タグ情報に基づくファイルのリネーム

タグ情報を使用してMP3ファイルの名前を変更することができます。

例えば、ファイル名を「アーティスト – 曲名.mp3」の形式にリネームすることが可能です。

以下のサンプルコードでは、タグ情報に基づいてファイルをリネームする方法を示します。

import os
from mutagen.mp3 import MP3
# 処理するディレクトリのパス
directory_path = "path/to/your/mp3/files"
# タグ情報に基づくファイルのリネーム
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        
        # タグ情報からアーティスト名と曲名を取得
        artist = audio_file.get("TPE1", "不明").text[0]  # アーティスト名
        title = audio_file.get("TIT2", "不明").text[0]    # 曲名
        
        # 新しいファイル名を作成
        new_filename = f"{artist} - {title}.mp3"
        new_file_path = os.path.join(directory_path, new_filename)
        
        # ファイル名を変更
        os.rename(file_path, new_file_path)
        print(f"{filename}{new_filename} にリネームしました。")

タグ情報に基づくフォルダ分け

タグ情報を使用して、MP3ファイルをアーティスト名やアルバム名に基づいてフォルダに分けることもできます。

以下のサンプルコードでは、アーティスト名に基づいてフォルダを作成し、ファイルを移動する方法を示します。

# タグ情報に基づくフォルダ分け
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        
        # アーティスト名を取得
        artist = audio_file.get("TPE1", "不明").text[0]  # アーティスト名
        
        # アーティスト名のフォルダを作成
        artist_folder = os.path.join(directory_path, artist)
        os.makedirs(artist_folder, exist_ok=True)  # フォルダが存在しない場合は作成
        
        # ファイルをアーティスト名のフォルダに移動
        new_file_path = os.path.join(artist_folder, filename)
        os.rename(file_path, new_file_path)
        print(f"{filename}{artist} フォルダに移動しました。")

タグ情報をCSVやJSONにエクスポートする方法

タグ情報をCSVやJSON形式でエクスポートすることで、データを整理したり、他のアプリケーションで利用したりすることができます。

以下のサンプルコードでは、タグ情報をCSV形式でエクスポートする方法を示します。

import csv
# CSVファイルにタグ情報をエクスポート
with open("tags_info.csv", mode="w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["ファイル名", "アーティスト", "タイトル", "アルバム"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    writer.writeheader()  # ヘッダーを書き込む
    
    for filename in os.listdir(directory_path):
        if filename.endswith(".mp3"):
            file_path = os.path.join(directory_path, filename)
            audio_file = MP3(file_path)
            
            # タグ情報を取得
            artist = audio_file.get("TPE1", "不明").text[0]
            title = audio_file.get("TIT2", "不明").text[0]
            album = audio_file.get("TALB", "不明").text[0]
            
            # CSVに書き込む
            writer.writerow({"ファイル名": filename, "アーティスト": artist, "タイトル": title, "アルバム": album})
            print(f"{filename} のタグ情報をCSVにエクスポートしました。")

JSON形式でエクスポートする場合は、jsonモジュールを使用して以下のように実装できます。

import json
# JSONファイルにタグ情報をエクスポート
tags_info = []
for filename in os.listdir(directory_path):
    if filename.endswith(".mp3"):
        file_path = os.path.join(directory_path, filename)
        audio_file = MP3(file_path)
        
        # タグ情報を取得
        artist = audio_file.get("TPE1", "不明").text[0]
        title = audio_file.get("TIT2", "不明").text[0]
        album = audio_file.get("TALB", "不明").text[0]
        
        # 辞書に情報を追加
        tags_info.append({"ファイル名": filename, "アーティスト": artist, "タイトル": title, "アルバム": album})
# JSONファイルに書き込む
with open("tags_info.json", "w", encoding="utf-8") as jsonfile:
    json.dump(tags_info, jsonfile, ensure_ascii=False, indent=4)
    print("タグ情報をJSONにエクスポートしました。")

これらの方法を使用することで、タグ情報を活用してMP3ファイルを整理し、データを効率的に管理することができます。

応用例:カスタムタグの追加

カスタムタグとは?

カスタムタグとは、音楽ファイルに追加する独自のメタデータのことです。

標準のID3タグに加えて、ユーザーが特定の情報を保存するために作成されます。

例えば、曲のテーマ、作曲者、リリース日など、標準のタグでは表現できない情報を格納するのに役立ちます。

カスタムタグを使用することで、音楽ファイルの管理や検索がより柔軟になります。

カスタムタグの追加方法

カスタムタグを追加するには、Mutagenライブラリを使用して、任意のキーと値を設定します。

以下のサンプルコードでは、カスタムタグ CUSTOM_TAG を追加する方法を示します。

from mutagen.mp3 import MP3
# MP3ファイルを読み込む
audio_file = MP3("example.mp3")
# カスタムタグを追加する
audio_file["CUSTOM_TAG"] = "カスタム情報"
audio_file.save()  # 変更を保存
print("カスタムタグを追加しました。")

カスタムタグの読み込み方法

追加したカスタムタグを読み込むには、通常のタグと同様にgetメソッドを使用します。

以下のサンプルコードでは、カスタムタグを読み込む方法を示します。

# カスタムタグを読み込む
custom_tag_value = audio_file.get("CUSTOM_TAG", "タグは存在しません")
print(f"カスタムタグの値: {custom_tag_value}")
カスタムタグの値: カスタム情報

カスタムタグの活用例

カスタムタグは、さまざまな用途で活用できます。

以下にいくつかの活用例を示します。

  1. テーマの追加: 曲のテーマやジャンルをカスタムタグとして追加し、後で検索やフィルタリングに利用する。
  2. 作曲者情報: 標準のアーティストタグとは別に、作曲者の情報をカスタムタグとして保存する。
  3. リリース日: 曲のリリース日をカスタムタグとして追加し、音楽ライブラリの整理に役立てる。
  4. 評価やメモ: 各曲に対する個人的な評価やメモをカスタムタグとして保存し、後で参照する。

以下のサンプルコードでは、テーマをカスタムタグとして追加し、後でその情報を表示する方法を示します。

# テーマをカスタムタグとして追加
audio_file["THEME"] = "愛"  # テーマを追加
audio_file.save()  # 変更を保存
# カスタムタグを読み込む
theme_value = audio_file.get("THEME", "タグは存在しません")
print(f"テーマのカスタムタグの値: {theme_value}")
テーマのカスタムタグの値: 愛

このように、カスタムタグを活用することで、音楽ファイルに対する情報をより詳細に管理し、個々のニーズに応じた整理が可能になります。

まとめ

この記事では、PythonのMutagenライブラリを使用してMP3ファイルのタグを取得、編集、追加、削除する方法について詳しく解説しました。

また、複数のファイルを一括で処理する方法や、タグ情報を活用したファイル整理のテクニック、さらにはカスタムタグの追加とその活用例についても触れました。

これらの知識を活用することで、音楽ファイルの管理がより効率的かつ柔軟に行えるようになります。

ぜひ、実際にMutagenを使って自分の音楽ライブラリを整理し、タグ情報を活用してみてください。

関連記事

Back to top button
目次へ