概要
Pythonのffmpegを用いて、webmファイルをwavファイルに変換する
ffmpegはほかにもいろんな音声ファイルに変換できる
事前準備
-
以下の公式サイトからffmpegをダウンロード
https://ffmpeg.org/download.html -
解凍したらbinのなかに入っているexeファイルを適当なフォルダに入れる
-
システム環境変数にそのフォルダのパスを通す
-
VScodeのターミナルなどでffmpegをインストールする
コード
import ffmpeg
input_file = 'aiu.webm'
output_file = 'aiu.wav'
(
ffmpeg
.input(input_file)
.output(output_file)
.run()
)
注意
Error opening input: No such file or directory
このようなエラーが出たときは、実行した際のカレントディレクトリを確認してみて。
そのpythonのファイルからたどった音声ファイルのパスは正しくても、実行時のターミナルのカレントディレクトリが違うとエラーがでたよ
ちなみに
直接データを変更する場合、
aiu.webmのバイナリデータを受け取る
↓
バイナリデータからwavのデータに変換する
↓
wavファイルとして保存する
import ffmpeg
import subprocess
# バイナリデータを読み込む
with open('aiu.webm', 'rb') as f:
input_data = f.read()
# ffmpegプロセスの実行
process = (
ffmpeg
.input('pipe:0', format='webm') # 'pipe:0' は標準入力からデータを受け取る指定
.output('pipe:1', format='wav') # 'pipe:1' は標準出力にデータを出力する指定
.run_async(pipe_stdin=True, pipe_stdout=True, pipe_stderr=True)
)
# ffmpegにデータを渡して、出力データを取得
output_data, err = process.communicate(input=input_data)
# 出力データをファイルに書き込む
with open('aiu.wav', 'wb') as f:
f.write(output_data)
# エラーメッセージを表示(必要に応じて)
if process.returncode != 0:
print("Error:", err.decode())