
はじめに
Cursorで製作したゲームアプリにBGMを付けた際、ファイルサイズが大きい問題を指摘されたので、 mp3をサイズダウンし軽量化するドラッグ&ドロップ対応のGUI付き Pythonスクリプトを作成しました。
製作したゲーム以下のページで遊べます。
![[Vibe Coding] バイブコーディング × Cursor 入門講座 04 (ゲーム制作にチャレンジ)](https://humanxai.info/images/uploads/vibe_coding-cursor-practice04.webp)
[Vibe Coding] バイブコーディング × Cursor 入門講座 04 (ゲーム制作にチャレンジ)
バイブコーディング × Cursor 入門講座 04 「ゲーム制作にチャレンジ」
https://humanxai.info/posts/vibe_coding-cursor-practice04/機能要件
対象:MP3ファイルを指定のビットレートで一括変換
特徴:
- ファイルやフォルダの ドラッグ&ドロップ に対応
- **96kbps + モノラル化(-ac 1)**で軽量変換
- 元ファイルは上書きせず、ファイル名に _compressed を付与
- Windows環境前提(.pyw拡張子でターミナル非表示起動可)
Pythonスクリプト
mp3_compressor.pyw
import os
import sys
import subprocess
import tkinter as tk
from tkinter import filedialog, messagebox
# FFmpegの実行可能ファイル名(環境によってはフルパス指定)
FFMPEG = "ffmpeg"
# 出力設定
BITRATE = "96k"
MONO = True
def compress_mp3(file_path):
base, ext = os.path.splitext(file_path)
if ext.lower() != ".mp3":
return
output_path = base + "_compressed.mp3"
cmd = [FFMPEG, "-i", file_path]
if MONO:
cmd += ["-ac", "1"]
cmd += ["-b:a", BITRATE, output_path]
subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print(f"✅ {os.path.basename(file_path)} → {os.path.basename(output_path)}")
def process_files(paths):
for path in paths:
if os.path.isfile(path):
compress_mp3(path)
elif os.path.isdir(path):
for root, _, files in os.walk(path):
for name in files:
compress_mp3(os.path.join(root, name))
def main():
root = tk.Tk()
root.withdraw()
messagebox.showinfo("MP3 Compressor", "MP3ファイルまたはフォルダを選択してください")
paths = filedialog.askopenfilenames(title="ファイル選択", filetypes=[("MP3", "*.mp3")])
if not paths:
return
process_files(paths)
messagebox.showinfo("完了", "変換が完了しました!")
if __name__ == "__main__":
main()
使用方法
- 上記スクリプトを mp3_compressor.pyw として保存
- ffmpeg.exe が PATH にあることを確認(なければ同フォルダに配置)
- スクリプトをダブルクリック
- ダイアログでMP3を複数選択 or フォルダを選択(内部で自動探索)
- _compressed.mp3 が同フォルダに出力
備考
- .pyw にしておくとターミナルが出ないので使いやすいです(Windows専用)
- -b:a を 128k にすれば高音質にも対応
- フォルダ全体の一括処理にも対応
💬 コメント