こんにちはーー
音声ファイルを文字起こししたくて、Google Speech Recognitionを使用したら、
1分以上のファイルはエラーが出たので、wav分割するプログラムを作りました。
mp3からwavふぁるに変更する方法は↓に載せています。
この記事が誰かの役に立てば幸いです。
プログラム
Pythonで書いた↓のプロムラムを実行するこで分割できました。
f_nameに分割したいwavファイル
cut_timeに切り取り時間を定義する必要があります。
import wave import struct import math import os from scipy import fromstring, int16 #読み込むファイル名 f_name = "test" #切り取り時間[sec] cut_time = 20 # 保存するフォルダの作成 file = os.path.exists("output") print(file) if file == False: os.mkdir("output") def wav_cut(filename,time): # ファイルを読み出し wavf = filename + '.wav' wr = wave.open(wavf, 'r') # waveファイルが持つ性質を取得 ch = wr.getnchannels() width = wr.getsampwidth() fr = wr.getframerate() fn = wr.getnframes() total_time = 1.0 * fn / fr integer = math.floor(total_time) # 小数点以下切り捨て t = int(time) # 秒数[sec] frames = int(ch * fr * t) num_cut = int(integer//t) # 確認用 print("Channel: ", ch) print("Sample width: ", width) print("Frame Rate: ", fr) print("Frame num: ", fn) print("Params: ", wr.getparams()) print("Total time: ", total_time) print("Total time(integer)",integer) print("Time: ", t) print("Frames: ", frames) print("Number of cut: ",num_cut) # waveの実データを取得し、数値化 data = wr.readframes(wr.getnframes()) wr.close() X = fromstring(data, dtype=int16) print(X) for i in range(num_cut): print(i) # 出力データを生成 outf = 'output/' + str(i) + '.wav' start_cut = i*frames end_cut = i*frames + frames print(start_cut) print(end_cut) Y = X[start_cut:end_cut] outd = struct.pack("h" * len(Y), *Y) # 書き出し ww = wave.open(outf, 'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(fr) ww.writeframes(outd) ww.close() wav_cut(f_name,cut_time)
以上になります!
コメント