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