Spaces:
Running
Running
File size: 2,174 Bytes
c43f92d 7375917 c43f92d 7375917 042eae0 7375917 042eae0 c43f92d 7375917 c43f92d 042eae0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import os
from faster_whisper import WhisperModel
class TranscriptionMaker():
#書き起こしファイルを吐き出すディレクトリを指定
def __init__(self,output_dir=os.path.abspath("/tmp/data/transcriptions")):
self.model = WhisperModel("base", device="cpu")
self.output_dir = output_dir
try:
if not os.path.exists(self.output_dir):
os.makedirs(self.output_dir)
except OSError as e:
print(f"Error creating directory {self.output_dir}: {e}")
raise
#音声ファイルのディレクトリを受け取り、書き起こしファイルを作成する
def create_transcription(self,audio_directory):
results = []
#ディレクトリ内のファイルを全て取得
if not os.path.isdir(audio_directory):
raise ValueError(f"The specified path is not a valid directory: {audio_directory}")
audio_files = os.listdir(audio_directory)
for audio_file in audio_files:
if os.path.splitext(audio_file)[-1].lower() != '.wav':
continue
audio_path = os.path.join(audio_directory, audio_file)
try:
segments,info = list(self.model.transcribe(audio_path))
except Exception as e:
print(f"Error transcripting file {audio_path}: {e}")
raise
for segment in segments:
results.append({
"start": segment.start,
"end": segment.end,
"text": segment.text
})
#ファイルの書き込み。ファイル名は"読み込みディレクトリ名_transcription.txt"
output_file=os.path.join(self.output_dir,os.path.basename(audio_directory)+"_transcription.txt")
try:
with open(output_file,"w",encoding="utf-8") as f:
for result in results:
f.write(f"{result['text']}\n")
except OSError as e:
print(f"Error writing transcription file: {e}")
raise
return output_file |