今日は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形式の字幕ファイルを生成する […]