Pythonライブラリ〜Pydubを使ってオーディオファイルを変換するコード
オーディオ変換は頻繁に行う作業の一つではないでしょうか。
顧客へのプレビュー用や、配布用に96khz 24bitでは重すぎる場合、320kbpsのMP3で充分なケースが多いです。
コンバーターソフトやLogicなどのDAWソフトに一度読み込ませてから変換するというのもいいですが、環境構築だけしておいて、ファイルのpathを指定するだけで一発変換できるようにしておくと、日常の作業効率が上がります。
今回はPydubを使って一発変換する方法をシェア。
簡易紹介:こうたろう
1986年生まれ
音大卒業後日本、スウェーデン、ドイツにて音楽活動
その後金田式DC録音のスタジオに弟子入り
プログラミング(C)を株式会社ジオセンスのCEO小林一英氏よりを学ぶ
現在はヒーリングサウンド専門のピアニスト、またスタジオでは音響エンジニア、フォトグラファーなどマルチメディアクリエーターとして活動中
当記事ではプログラマー、音響エンジニアとして知識とスキルをシェアしていきます
全体の手順
まずPythonの環境がまだ構築できていない方はこちらの記事から環境構築していきましょう。
Pydubとffmpegのインストール
Pydubは簡単にpipを使ってインストールできますが、ffmpegはシステムによってインストール方法が異なります。
pip install pydub
ffmpegのインストール方法は、使用しているオペレーティングシステムによって異なります。
多くの場合、ffmpegの公式サイトからダウンロードできます。
あなたがアナコンダを使用している場合はコマンドでインストールできます。
conda install -c conda-forge ffmpeg
Homebrewを使用している場合(Macの場合)はこちら
brew install ffmpeg
apt-getを使用している場合(Ubuntu/Debianの場合)はこちら
sudo apt-get remove ffmpeg
sudo apt-get update
sudo apt-get install ffmpeg
Pythonサンプルコード
WAVファイルをMP3に変換するPythonスクリプトは以下。
このスクリプトでは、WAVファイルのパス(wav_path
)と変換後のMP3ファイルの保存先(mp3_path
)を指定する必要があります。
from pydub import AudioSegment
# WAVファイルのパス
wav_path = 'path/to/your/wavfile.wav'
# 変換後のMP3ファイルの保存先
mp3_path = 'path/to/your/outputfile.mp3'
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
このコードを実行すると、指定したパスにあるWAVファイルが320kbpsのMP3ファイルに変換され、指定した保存先に保存されます。
エラーを避けるために、ファイルパスやファイル名が正しいこと、およびffmpegが正しくインストールされていることを確認してください。
さて、これで変換されたと思いますが、ここからがプログラミングの面白いところ。
デバッグ作業
FileNotFoundError
まずこちらのエラーが表示された場合はファイルのpathが間違っていますので修正してください。
ffmpegが見つからない
おそらく基本的にはこちらのエラーが多いかと思います。
まずは正しくffmpegがインストールされているかどうか、バージョン情報を確認してください。
ffmpeg -version
これでバージョンが表示されれば、OK。
表示されていない場合や、エラーが出る場合は一度アンインストールして、再度インストールした方がいいかもしれません。
アンインストールして再度インストール
conda uninstall ffmpeg
conda install -c conda-forge ffmpeg
Pydubがffmpegを見つけられない
その場合は直接pathを指定してみてください。
from pydub import AudioSegment
# ffmpegのパスを設定(このパスは実際のffmpegのパスに置き換えてください)
AudioSegment.converter = "/path/to/ffmpeg"
# WAVファイルのパス(このパスは実際のWAVファイルのパスに置き換えてください)
wav_path = '/path/to/your/wavfile.wav'
# 変換後のMP3ファイルの保存先(このパスは実際の保存先のパスに置き換えてください)
mp3_path = '/path/to/your/outputfile.mp3'
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
ちなみに現在のpathを探すには
which ffmpeg
をコマンドで叩くと表示されます。
ffprobeのpathを確認して指定
ffmpegと一緒にインストールされるffprobeのpathがPydubに通っていない場合もエラーになります。
こちらも同様にまずはpathを特定し
which ffprobe
コード内にpathを教える1行を追加しましょう。
from pydub import AudioSegment
# ffmpegとffprobeのパスを設定
AudioSegment.converter = "/path/to/ffmpeg" # ffmpegの正しいパス
AudioSegment.ffprobe = "/path/to/ffprobe" # ffprobeの正しいパス
# WAVファイルのパス
wav_path = '/path/to/your/wavfile.wav'
# 変換後のMP3ファイルの保存先
mp3_path = '/path/to/your/outputfile.mp3'
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
環境変数エラーを修正
import os
# ffmpegとffprobeのパスを環境変数に設定
os.environ["PATH"] += os.pathsep + '/opt/homebrew/bin'
from pydub import AudioSegment
# WAVファイルのパス(実際のファイルパスに置き換えてください)
wav_path = '/path/to/your/wavfile.wav'
# 変換後のMP3ファイルの保存先(実際の保存先に置き換えてください)
mp3_path = '/path/to/your/outputfile.mp3'
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
パスを環境変数に設定することでファイルが正しく変換されるかどうかチェックしてみましょう。
環境変数を恒久的に設定
正しく変換することができれば、環境変数に更新してください。
MacOS または Linux
使用しているシェルに応じて、~/.bash_profile
、~/.bashrc
、または ~/.zshrc
ファイルをエディタで開きます。例えば、bashを使用している場合は ~/.bash_profile
または ~/.bashrc
、zshを使用している場合は ~/.zshrc
を編集します。
現在使用しているシェルがわからない場合はコマンドで確認してください。
echo $SHELL
/bin/zshが表示され場合(筆者の環境)のZsh環境変数の設定で進めていきます。
.zshrc
ファイルを編集する: ターミナルで以下のコマンドを使用して、.zshrc
ファイルを編集します。ここでは nano
というテキストエディタを使用しますが、お好みのエディタを使っても構いません。
nano ~/.zshrc
次にPATHにffmpegのパスを追加: ファイルの適切な場所(通常はファイルの最後)に以下の行を追加します。(自己責任でお願いします。)
export PATH="/opt/homebrew/bin:$PATH"
変更を保存し、エディタを終了する: nano
を使用している場合、Ctrl + O
を押して変更を保存し、Ctrl + X
を押してエディタを終了します。
なんからの理由で、Ctrl + O
を押して変更を保存できない場合があるようです。
その場合はCtrl + X
を押してエディタを終了させようとするとセーブしますか?と聞かれるのでY+enterでセーブして終了させればOK。
変更を有効にする: ターミナルで以下のコマンドを実行して、変更を有効にします。
source ~/.zshrc
これで恒久的に変更されました。
以降は次に示す非常に短いコードを走らせるだけで簡単に変換できるようになります。
from pydub import AudioSegment
# WAVファイルのパス(実際のファイルパスに置き換えてください)
wav_path = '/path/to/your/wavfile.wav'
# 変換後のMP3ファイルの保存先(実際の保存先に置き換えてください)
mp3_path = '/path/to/your/outputfile.mp3'
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
フォルダ内のすべてのwavを一括変換する
プログラムを使う醍醐味といえばここです。
特定のフォルダ内にあるすべてのWAVファイルをMP3に変換することが可能です。
フォルダのパスを指定し、そのフォルダ内の全てのWAVファイルをループで処理することで、一括変換を行うことができます。
以下は、指定したフォルダ内のすべてのWAVファイルをMP3に変換するためのPythonスクリプトの例です。
import os
from pydub import AudioSegment
# 変換するフォルダのパス
folder_path = '/path/to/your/folder'
# WAVファイルのみを対象にする
for filename in os.listdir(folder_path):
if filename.endswith('.wav'):
# WAVファイルのフルパス
wav_path = os.path.join(folder_path, filename)
# MP3ファイルの保存先のフルパス(拡張子を変更)
mp3_path = os.path.join(folder_path, os.path.splitext(filename)[0] + '.mp3')
# WAVファイルの読み込み
audio = AudioSegment.from_wav(wav_path)
# MP3に変換して保存(ビットレートを320kbpsに設定)
audio.export(mp3_path, format='mp3', bitrate='320k')
print(f'Converted: {filename} to MP3')
日常の業務を効率的に行っていきましょう。
おまけ:24bit,32bitの場合
24bitを取り扱う場合はこちらのコードが必要です。
from pydub import AudioSegment
# ffmpegを使って24ビットのオーディオファイルを読み込む
audio = AudioSegment.from_file("path/to/your/24bit-audiofile.wav", format="wav")
# 以降、通常のPydubの処理(トリミング、ボリューム調整など)を行うことができます
32bitの処理は
# 32ビットのオーディオファイルを読み込む
audio = AudioSegment.from_file("path/to/your/32bit-file.wav", format="wav")