特定のディレクトリにある様々な音楽ファイルをmp3に変換するpythonスクリプト

かぬです.
手元にあった昔の音楽プレーヤーに音楽ファイルを移そうとしたところ,mp3形式にしか対応していなかったため,すべてのファイルをmp3形式に変換するpythonスクリプトをchatGPTとともに作りましたので,公開します.

実行環境

  • ubuntu 24.04
  • python3.12.3

※Windows・macでも動くとは思いますが,動作未確認ですので,ご了承ください.

実行手順

ffmpegのインストール

それぞれのOS似合わせてインストールしてください.

Ubuntuの場合

sudo apt update
sudo apt install ffmpeg

Windowsの場合

1. FFmpegの公式サイトからWindows用のビルドをダウンロードします.
2. ダウンロードしたzipファイルを解凍し,適当なディレクトリに配置します(例: C:\ffmpeg).
3. FFmpegの実行ファイル(ffmpeg.exe)が含まれるディレクトリのパスをシステムの環境変数に追加します.
※環境変数への追加は下記を参考にしてもらえればいいと思います.

【Windows 11対応】Path環境変数を設定/編集して、独自のコマンドを実行可能にする
Windows 10やWindows 11でよく使うコマンドやツールなどがあるなら、それらをまとめて1つのフォルダに保存しておき、そのパスを「Path」という環境変数に追加しておくとよい。Path環境変数をGUIで設定/編集する手順と注意点...

macの場合

Homebrewを使用してインストールします。

brew install ffmpeg

pythonスクリプトの実行.

下記のスクリプトをコピーして,ターゲットのフォルダと同じ階層にconvert-mp3.pyとして保存します.
※ここではmusicをターゲットとしていますが,自身の環境に合わせてinput_diroutput_dirを変更してください.

import os
import shutil
from pathlib import Path
import subprocess

def convert_to_mp3(input_file, output_file):
    """
    ffmpegを使用してファイルをmp3に変換する関数
    """
    result = subprocess.run(['ffmpeg', '-i', input_file, output_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return result.returncode == 0

def process_directory(input_dir, output_dir):
    """
    ディレクトリを再帰的に処理し、mp3ファイルはそのままコピーし、
    その他のファイルはmp3に変換してコピーする関数
    """
    for root, dirs, files in os.walk(input_dir):
        for file in files:
            input_file_path = os.path.join(root, file)
            relative_path = os.path.relpath(root, input_dir)
            output_dir_path = os.path.join(output_dir, relative_path)
            Path(output_dir_path).mkdir(parents=True, exist_ok=True)

            if file.endswith('.mp3'):
                # mp3ファイルはそのままコピー
                shutil.copy(input_file_path, os.path.join(output_dir_path, file))
            else:
                # mp3以外のファイルはmp3に変換してコピー
                output_file_path = os.path.join(output_dir_path, Path(file).stem + '.mp3')
                if not convert_to_mp3(input_file_path, output_file_path):
                    print(f"Failed to convert {input_file_path} to {output_file_path}")

def main():
    input_dir = 'music'
    output_dir = 'music-mp3'
    process_directory(input_dir, output_dir)

if __name__ == '__main__':
    main()

保存できたら,

python onvert-mp3.py

として実行してください.

ファイル数に依存しますが,かぬの環境では1番放置しておいたら終わっていましたので,寝る前などに仕掛けておくことをお勧めします.
参考になれば参考です.
それでは.

タイトルとURLをコピーしました