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