【Python/pydub】mp3を指定したフォーマット(周波数など)のwavに変換する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Python/pydub】mp3を指定したフォーマット(周波数など)のwavに変換する

2023-7-12 |

Pythonでpydubを使ってmp3を指定したフォーマット(周波数など)のwavに変換したい!

概要

今回の記事では、Pythonでpydubを使ってmp3を指定したフォーマット(周波数など)のwavに変換するサンプルを掲載する。

仕様書

環境

  • Python 3.10.6

手順書

今回はpydubというライブラリを使うのでインストールする。

pip install pydub

pydubはFFmpegを使うのでbinフォルダにPATHを通しておく。

下記は、mp3フォルダに保存されてるmp3ファイルをwavファイルに変換してwavフォルダに出力する例。

import os
from pydub import AudioSegment

in_dir = "in/"
out_dir = "out/"

to_rate = "44.1k"
to_codec = 'pcm_s16le'
to_channels = 2

for filename in os.listdir(in_dir):
    if filename.endswith(".wav"):
        mp3_path = os.path.join(in_dir, filename)
        print("mp3 to formatted wav: ", mp3_path)
        base_name = os.path.splitext(filename)[0]
        wav_dir = os.path.join(out_dir, base_name + ".wav")
        audio = AudioSegment.from_mp3(mp3_path)
        audio.export(wav_dir, format="wav", codec=to_codec, channels=to_channels, bitrate=to_rate)

今回はCDと同じ音質のWAVファイルに変換してる。

to_rate = "44.1k"
to_codec = 'pcm_s16le'
to_channels = 2

機械学習で使われるFLOAT型に変換したい場合は下記のような感じ。

to_rate = "44.1k"
to_codec = 'pcm_f32le'
to_channels = 2

pydub(FFmpeg)で使えるwavのコーデックの例。

名前 内容
pcm_s16le 16ビットのリトルエンディアンのPCM
pcm_s24le 24ビットのリトルエンディアンのPCM
pcm_s32le 32ビットのリトルエンディアンのPCM
pcm_u8 8ビットの符号なしのPCM
pcm_f32le 32ビットの浮動小数点のリトルエンディアンのPCM
pcm_f64le 64ビットの浮動小数点のリトルエンディアンのPCM

まとめ(感想文)

pydubとFFmpegを使うと簡単に変換できちゃう。numpyとsoundfileを使って変換するよりもコードがめちゃスッキリした!