あるばむあ~と の 埋め込み | 60歳を迎えて、思うこと。

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

あるばむあ~と の 埋め込み

がや がや
わん わん

むか~~~し


mp3 に

あるばむあ~と を 埋め込み

スマホで 再生するとき


ニマニマ 怪しげな

笑み を 浮かべていた

じじぃ~候補生

埋め込み作業 を


mp3tag    で

実施ていた

面倒
手間
いやん ばかん
である



時は流れ


数億年(!?)

いまでは

pythonスクリプトで処理できる

しかも じじぃ~ は


注文するだけ!

楽チン!

おんらいんばっくあっぷ

# ==== 基本版 Microsoft Copilot様
# ==== 改造版 【Gemini】様

# ==== 【Gemini】
FLAC & MP3対応:アルバムアート一括埋め込みスクリプト(再帰検索&全JPG対応)
以下のスクリプトでは、各音楽ファイルがあるフォルダ内で、
拡張子が`.jpg`(または`.jpeg`)のファイルをすべて検索し、
その中からファイル名順で最初に検出されたもの
をアルバムアートとして使用します。


# ==== 本文
import os
import glob
from mutagen.flac import FLAC, Picture
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC, error

# ⭐ 設定: 対象のルートフォルダ
# このフォルダ以下のすべてのサブフォルダを再帰的に検索します
TARGET_FOLDER = r"C:\_CC-Art"

# --- FLACファイルに画像を埋め込む関数 ---
def embed_flac_image(file_path, image_path):
    """FLACファイルにアルバムアートを埋め込む (既存画像を削除して置き換え)"""
    try:
        audio = FLAC(file_path)
        audio.clear_pictures()  # 既存画像を削除 (Copilot様の動作を維持)

        with open(image_path, "rb") as img:
            data = img.read()

        pic = Picture()
        pic.data = data
        pic.type = 3  # Cover (front)
        pic.mime = "image/jpeg"
        pic.desc = "Cover"
        # サイズ情報は必須ではないため、ここでは省略
        # 必要であればPillowなどで事前に取得・設定可能ですが、今回はシンプル化のため省略します
        
        audio.add_picture(pic)
        audio.save()
        print(f"[FLAC] ✅ Embedded '{os.path.basename(image_path)}' into: {os.path.basename(file_path)}")
    except Exception as e:
        print(f"[FLAC] ❌ Error processing {os.path.basename(file_path)}: {e}")

# --- MP3ファイルに画像を埋め込む関数 ---
def embed_mp3_image(file_path, image_path):
    """MP3ファイルにアルバムアートを埋め込む (既存画像を削除して置き換え)"""
    try:
        # ID3タグがない場合は作成
        audio = MP3(file_path, ID3=ID3)
        try:
            audio.add_tags()
        except error:
            pass

        # 既存のAPICタグを削除 (Copilot様の動作を維持)
        audio.tags.delall("APIC")

        with open(image_path, "rb") as img:
            data = img.read()

        # APICタグを追加
        audio.tags.add(
            APIC(
                encoding=3,          # UTF-8
                mime="image/jpeg",   # MIMEタイプ
                type=3,              # Cover (front)
                desc="Cover",
                data=data
            )
        )
        audio.save()
        print(f"[MP3] ✅ Embedded '{os.path.basename(image_path)}' into: {os.path.basename(file_path)}")
    except Exception as e:
        print(f"[MP3] ❌ Error processing {os.path.basename(file_path)}: {e}")

# --- メイン処理: フォルダを再帰的に検索し、埋め込みを実行する関数 ---
def process_recursively(root_folder):
    """指定されたルートフォルダ以下の全サブフォルダを処理する"""
    print(f"--- 🚀 Target Folder: {root_folder} の再帰処理を開始します ---")

    # glob.iglobを使って、指定フォルダ以下を再帰的に検索
    all_music_files = glob.iglob(os.path.join(root_folder, "**", "*.flac"), recursive=True)
    all_music_files = list(all_music_files) + list(glob.iglob(os.path.join(root_folder, "**", "*.mp3"), recursive=True))

    processed_folders = set()

    for file_path in all_music_files:
        current_dir = os.path.dirname(file_path)

        # フォルダごとに画像検索を一度だけ実行
        if current_dir not in processed_folders:
            
            # --- 画像ファイルの柔軟な検索ロジック (ご要望の変更点) ---
            image_path = None
            
            # 1. フォルダ内の *.jpg, *.jpeg ファイルをすべてリストアップ
            jpg_files = glob.glob(os.path.join(current_dir, "*.jpg"))
            jpeg_files = glob.glob(os.path.join(current_dir, "*.jpeg"))
            all_jpg_candidates = sorted(jpg_files + jpeg_files) # ファイル名順でソート
            
            if all_jpg_candidates:
                # 2. 最初に検出されたファイルを埋め込み対象とする
                image_path = all_jpg_candidates[0]
            
            # 処理済みフォルダとして記録
            processed_folders.add(current_dir)
            
            # フォルダ内のFLAC/MP3ファイルリストを取得
            # 注: 再帰的に取得したリストから現在のフォルダ内のファイルのみを処理
            files_in_folder = [f for f in all_music_files if os.path.dirname(f) == current_dir]


            if image_path:
                print(f"\n--- 📁 Processing Folder: {current_dir} ---")
                print(f"--- 🖼️ Found Image: {os.path.basename(image_path)} (Using the first one found) ---")
                
                # このフォルダ内のすべての対象ファイルに同じ画像を埋め込む
                for f_path in files_in_folder:
                    if f_path.lower().endswith(".flac"):
                        embed_flac_image(f_path, image_path)
                    elif f_path.lower().endswith(".mp3"):
                        embed_mp3_image(f_path, image_path)
            else:
                print(f"\n--- ⚠️ Skipping Folder: {current_dir} (No JPG/JPEG image file found) ---")

if __name__ == "__main__":
    if not os.path.isdir(TARGET_FOLDER):
        print(f"Error: Target folder not found at {TARGET_FOLDER}")
    else:
        process_recursively(TARGET_FOLDER)
        print("\n--- ✅ All processing completed! ---")

# ==============================

## 🚀 変更点の確認
# 1.  **再帰的検索**: `TARGET_FOLDER`以下の全サブフォルダ内のFLAC/MP3を処理する動作は維持しています。
# 2.  **画像ファイルの柔軟性**:
#       * `IMAGE_FILENAMES`リストを削除しました。
#       * 代わりに、`glob.glob()`を使用して現在のフォルダ内の\*\*`*.jpg`および`*.jpeg`\*\*ファイルをすべて取得します。
#       * `all_jpg_candidates = sorted(jpg_files + jpeg_files)`でリストを結合し、ファイル名でソートします。
#       * `image_path = all_jpg_candidates[0]`によって、\*\*ファイル名順で最初の`.jpg`または`.jpeg`\*\*が自動で選択され、埋め込まれます。
# 3.  **上書き動作**: `embed_flac_image`と`embed_mp3_image`関数内で、既存の画像を削除し(`audio.clear_pictures()`や`audio.tags.delall("APIC")`)、新しい画像を埋め込む動作は維持しています。
# これで、「じじぃ~のお歌.jpg」など、**どんな名前のJPGファイルでもリネームなしで埋め込める**ようになりました。
# ==============================

余は 満足 で あ~~~る

じじぃ~

最新型 wave   to   FLAC  変換器

※信じないように!