音響Python

Pythonライブラリ〜Pydubを使ってオーディオファイルを変換するコード

この記事はAmazonをはじめとした各種広告を含みます。

オーディオ変換は頻繁に行う作業の一つではないでしょうか。

顧客へのプレビュー用や、配布用に96khz 24bitでは重すぎる場合、320kbpsのMP3で充分なケースが多いです。

コンバーターソフトやLogicなどのDAWソフトに一度読み込ませてから変換するというのもいいですが、環境構築だけしておいて、ファイルのpathを指定するだけで一発変換できるようにしておくと、日常の作業効率が上がります。

今回はPydubを使って一発変換する方法をシェア。

簡易紹介:こうたろう

1986年生まれ
音大卒業後日本、スウェーデン、ドイツにて音楽活動
その後金田式DC録音のスタジオに弟子入り
プログラミング(C)を株式会社ジオセンスのCEO小林一英氏よりを学ぶ
現在はヒーリングサウンド専門のピアニスト、またスタジオでは音響エンジニア、フォトグラファーなどマルチメディアクリエーターとして活動中
当記事ではプログラマー、音響エンジニアとして知識とスキルをシェアしていきます

Healing Music

全体の手順

まず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")

こうたろう

音大を卒業後ピアニストとして活動。日本で活動後北欧スウェーデンへ。 アーティストLindha Kallerdahlと声帯とピアノによる即興哲学を研究。 その後ドイツ・ケルンに渡りAchim Tangと共にアルバム作品制作。 帰国後、金田式DC録音の第一人者:五島昭彦氏のスタジオ「タイムマシンレコード」にアシスタントとして弟子入り。 独立後音楽レーベル「芸術工房Pinocoa(現:Kotaro Studio)」を結成。 タンゴやクラシックなどアコースティック音楽作品を多数プロデュース。 大阪ベンチャー研究会にて『芸術家皆起業論~変化する社会の中、芸術家で在り続けるために』を講演。 その後、秋山庄太郎氏後継の写真スタジオ「村上アーカイブス」でサウンドデザイナー兼音響担当として映像制作チームに参加。 村上宏治氏の元で本格的に写真、映像技術を学ぶ。 祖父母の在宅介護をきっかけにプログラムの世界に興味を持ち、株式会社 ジオセンスの代表取締役社長:小林一英氏よりプログラムを学ぶ。 現在はKotaro Studioにて『あなたのためのアートスタジオ』音と絵をテーマに芸術家として活動中。 2023年より誰かのための癒しの場所『Curanz Sounds』をプロデュース。