時間とコストを削減する!Pythonを使ったビジネスにおすすめの文字起こし方法

IT

はじめに

前回は、whisperを使ってアプリを作ってみました。
今回は、オリジナルより4倍高速だと言われるfaster-whisperを使って作り直してみたいと思います。

事前準備

1.FFMPEGをダウンロードして使えるようにします。
①. 下記よりダウンロードして解凍した後、「C:\Tools」にコピーする。

②. 環境変数「PATH」に以下を追加する。

C:\Tools\ffmpeg\bin

2.仮想環境を作成しましょう。

conda create -n tmp1
activate tmp1
conda install pip
pip install ffmpeg-python
pip install git+https://github.com/guillaumekln/faster-whisper.git

実際のプログラム

前回のプログラムを少しいじっただけです。
今回は、早くなったということで、「large-v2」を使っています。
また私のラックトップは、GPU積んでないので、CPUで動くようにしていますので、必要に応じて変更してください。

import sys
from faster_whisper import WhisperModel
import ffmpeg
import re

model_size = "large-v2"


def whisper_mp3(attach):
    for i, file in enumerate(attach):

        # 対象ファイル
        print(f'{i}:{file}')

        # MP3ファイル以外は変換する。
        if not file.endswith('.mp3'):
            file = ffmpeg_mp3(file)
            print('- MP3変換:', file)

        outfile = re.sub(r'\.(mp3|MP3)$', '.txt', file)
        # print(outfile)
        result = whisper_proc(file)

        # with open(f'{dname}\\{outfile_name}', "w") as f:
        with open(outfile, "w") as f:
            f.write(result)


def add_line(s):
    new_s = s
    s_count = len(s)
    s_max_count = 40
    if s_count >= s_max_count:
        if (s_count - s_max_count) >= 3:
            # 15文字以上、かつ、2行目が3文字以上あれば、改行する
            # つまり、18文字以上であれば、15文字で改行する
            new_s = s[:s_max_count] + "\n" + s[s_max_count:]
    return new_s + "\n"


def whisper_proc(file):
    model = WhisperModel(model_size, device="cpu", compute_type="int8")
    segments, info = model.transcribe(file, beam_size=5)
    subs = []
    for data in segments:
        print("[%.2fs -> %.2fs] %s" % (data.start, data.end, data.text))
        text = add_line(data.text)
        subs.append(text)
    return ''.join(subs)


def ffmpeg_mp3(file):
    result_file = file + '.mp3'
    ffmpeg.run(
        ffmpeg.output(
            ffmpeg.input(file),
            result_file)
        )
    return result_file


if __name__ == '__main__':
    whisper_mp3(sys.argv[1:])
    print('文字起こし処理が完了しました。')

EXE化するために

下記のコマンドを実行して、EXE化してみましょう。

pip install pyinstaller
pyinstaller demo_firstwhisper.py --onefile

まとめ

いかがだったでしょうか?
自宅のノートでも、かなり正確に文字起こしが出来るようになりました。
是非、皆さんもお試しください。

タイトルとURLをコピーしました