今日はPythonのwhisperというライブラリを使って音声動画からsrt形式の字幕ファイルを生成する方法ついて紹介したいと思います
前準備
メディアファイルの用意
今回使用するのは以下のテキスト読み上げ音声です。
作成方法については下記参照
関連記事:【Python】「gtts」を使ってテキスト読み上げ音声を作成する方法
使用するライブラリのインストール
whisperとsrtをインストールします
$ pip install openai-whisper $ pip install srt
<メモ>
whisperはpypiに2つライブラリが存在し「pip install whisper」としてしまうと「import whisper」で以下のようなエラーが発生するので注意してください
if` ‘/’ in name or ‘\\’ in name:argument of type ‘NoneType’ is not iterable
メディアファイルから字幕ファイル(.srt)を生成するサンプルコード
import whisper from datetime import timedelta from srt import Subtitle import srt def add_line(s): new_s = s s_count = len(s) s_max_count = 15 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 # 字幕生成元のメディアファイル名とPATH file_name = "test.mp3" #指定するファイル名 file_path = file_name # 直下以下にしたい場合はここで親ディレクトリを追加指定する model = whisper.load_model("medium") result = model.transcribe(file_path) segments = result["segments"] subs = [] for data in segments: index = data["id"] + 1 start = data["start"] end = data["end"] text = add_line(data["text"]) sub = Subtitle(index=1, start=timedelta(seconds=timedelta(seconds=start).seconds, microseconds=timedelta(seconds=start).microseconds), end=timedelta(seconds=timedelta(seconds=end).seconds, microseconds=timedelta(seconds=end).microseconds), content=text, proprietary='') subs.append(sub) with open(file_name.split('.')[0] + ".srt", mode="w", encoding="utf-8") as f: f.write(srt.compose(subs))
上記を実行すると以下のような内容が記載されたsrt形式の字幕ファイルが
<実行結果>
1
00:00:00,000 –> 00:00:05,620
過去最強クラスの台風14号が近
づいてきています。2
00:00:05,620 –> 00:00:18,140
九州南部、そして北部の皆さんを
中心に暴風、高波、高潮や大雨などに最大級の警戒をしてください。
関連記事:【Python】Youtube Data APIを使ってYoutubeチャンネルの登録者数・動画投稿数・総再生をスクレイピングする
コメント
[…] 関連記事【Python】whisperを使って音声動画からsrt形式の字幕ファイルを生成する […]
[…] 関連記事【Python】whisperを使って音声動画からsrt形式の字幕ファイルを生成する […]