【Python/pydub】mp3を指定したフォーマット(周波数など)のwavに変換する
2023-7-12 | Python
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を使って変換するよりもコードがめちゃスッキリした!