はじめに
この記事では、Google ColabとWhisperを使用して音声テキストをSRT形式に変換する方法を紹介します。SRT形式とは、映像や動画に字幕を付ける際に使用されるファイル形式です。この形式を使用すると、DaVinci Resolveなどの動画編集ソフトウェアで字幕の追加が非常に簡単になります。
Google ColabとWhisperを使用して文字起こしする方法はこちら
Google Colabを開く
Google Colabは、クラウド上でPythonコードを実行できる無料のツールです。Pythonはプログラミング言語の一つで、データ解析や機械学習などの分野で広く使用されています。
- お使いのブラウザでGoogle Colab にアクセスします。
- 「ノートブックをアップロード」から後述するノートブックをアップロードします。
Whisperのインストール
Whisperは音声をテキストに変換するためのツールです。
!pip install git+https://github.com/openai/whisper.git
!pip install srt
!pip install janome
# # ▓▓▓▓▓▓▓▓▓▓
# # ▒▒▒▒▒▒▒▒▒▒ Whisperライブラリのインストール
# # ░░░░░░░░░░
このコードは、Whisperというツールをインストールするためのものです。pip
はPythonのパッケージ管理ツールで、これを使って様々なライブラリやツールをインストールできます。---
音声ファイルをテキストに変換
Whisperを使って、音声ファイルからテキストに変換します。
# 音声ファイルをロードしてテキストに変換
audio = whisper.load_audio(f"{fileName}")
result = model.transcribe(audio, verbose=True, language=lang)
# ▓▓▓▓▓▓▓▓▓▓
# ▒▒▒▒▒▒▒▒▒▒ 音声ファイルの読み込みとテキスト変換
# ░░░░░░░░░░
このコードで、指定した音声ファイルがテキストに変換され、結果が表示されます。---
テキストをSRT形式に変換
ここでは、得られたテキストをSRT形式に変換します。
from datetime import timedelta
import srt
import os
class SrtGenerator:
def __init__(self, segments, max_line_length=15):
"""
SrtGenerator クラスのコンストラクタ
:param segments: 字幕データのセグメントのリスト
:param max_line_length: 一行あたりの最大文字数(デフォルトは15)
"""
self.segments = segments
self.max_line_length = max_line_length
self.subtitles = []
def add_line(self, text):
"""
文字列を最大行長に従って改行文字で分割する
:param text: 分割する文字列
:return: 分割された文字列
"""
new_string = ''
while len(text) > 0:
if len(text) > self.max_line_length:
new_string += text[:self.max_line_length] + "\n"
text = text[self.max_line_length:]
else:
new_string += text
text = ''
print("---------------------------")
print(new_string)
return new_string
def generate_subs(self):
"""
segments データから srt.Subtitle オブジェクトのリストを生成する
"""
for data in self.segments:
index = data["id"] + 1
start = timedelta(seconds=data["start"])
end = timedelta(seconds=data["end"])
text = self.add_line(data["text"])
subtitle = srt.Subtitle(index=index, start=start, end=end, content=text, proprietary='')
self.subtitles.append(subtitle)
def save_srt_file(self, file_name):
"""
生成された字幕データをSRT形式のファイルとして保存する
:param file_name: 保存するファイル名
"""
base_name, _ = os.path.splitext(file_name)
srt_file_name = f"{base_name}.srt"
with open(srt_file_name, mode="w", encoding="utf-8") as f:
f.write(srt.compose(self.subtitles))
# SrtGenerator クラスのインスタンスを作成
srt_generator = SrtGenerator(segments=result["segments"])
# 字幕データを生成
srt_generator.generate_subs()
# SRTファイルを保存(fileName は保存するファイル名として仮定)
srt_generator.save_srt_file(fileName)
このコードで、テキストがSRT形式に変換されます。
1. 必要なモジュールのインポート
from datetime import timedelta
import srt
import os
timedelta
: 日付や時間の操作に使います。srt
: SRT形式のデータを扱うためのモジュール。os
: ファイルやディレクトリを操作するためのモジュール。
2. SrtGenerator クラスの定義
class SrtGenerator:
このクラスはSRTファイルを生成するためのクラスです。
2.1 コンストラクタ __init__
この関数はクラスのインスタンスを作成する際に呼び出される特別な関数です。
segments
: 字幕データのセグメントのリスト。max_line_length
: 1行あたりの最大文字数。デフォルト値は15。
2.2 add_line 関数
この関数は与えられたテキストを、指定された最大行長に基づいて適切に改行して返します。
2.3 generate_subs 関数
この関数は、segments
からsrt形式の字幕データを生成します。
2.4 save_srt_file 関数
この関数は生成された字幕データをSRT形式のファイルとして保存します。
3. SrtGenerator クラスの利用
srt_generator = SrtGenerator(segments=result["segments"])
上記のコードで、SrtGenerator
クラスのインスタンスを作成しています。ここでresult["segments"]
は、字幕データのセグメントのリストと仮定されています。
srt_generator.generate_subs()
上記のコードで、字幕データを生成しています。
srt_generator.save_srt_file(fileName)
そして、このコードで生成された字幕データをSRT形式のファイルとして保存しています。ここでfileName
は保存するファイル名と仮定されています。
まとめ
このコードは、与えられた字幕データのセグメントからSRT形式の字幕ファイルを生成するためのものです。コードを実行する前に、result["segments"]
とfileName
の値を適切に設定する必要があります
DaVinci Resolveにインポート
DaVinci Resolveなどの動画編集ソフトウェアにインポートします。
このファイルをDaVinci Resolveにインポートすることで、動画に字幕を追加できます。
まとめ
この記事で紹介した方法を使って、WhisperとGoogle Colabを使って音声テキストをSRT形式に変換し、簡単に動画編集ソフトウェアにインポートすることができます。字幕の追加や編集が劇的に簡単になりますので、ぜひ試してみてください。
配布ノートブック
解説動画
@maki.sunwood.ai.labs Google ColabとWhisperを使用して音声テキストをSRT形式に変換する方法を紹介します。SRT形式とは、映像や動画に字幕を付ける際に使用されるファイル形式です。 この形式を使用すると、DaVinci Resolveの字幕作業が一瞬で終わります Google Colabで実行できるノートブックはホームページから配布しています。 #文字起こし #Whisper #動画配信 #GoogleColab #AI #人工知能 #便利ソフト
コメント