WEBVTT(Web Video Text Tracks)フォーマットの字幕ファイルから生成AIに最適な会話文形式のファイルに変換する
AWS事業本部コンサルティング部の石川です。WEBVTT(Web Video Text Tracks)フォーマットの字幕ファイルから生成AIに最適な会話文形式のファイルに変換する方法をご紹介します。
WEBVTT(Web Video Text Tracks)フォーマットの字幕ファイルとは
字幕ファイルは、動画コンテンツに字幕やキャプションを追加するために使用される特殊なテキストファイルです。WEBVTT(Web Video Text Tracks)フォーマットの字幕ファイルは、字幕ファイルの中でも特に広く使用されているフォーマットで、Microsoft Teamsの文字おこしファイルでも採用されているフォーマットです。
- テキスト形式:単純なテキストファイルで、特定の構造を持っています。
- タイムコード情報:字幕の表示開始時間と終了時間を指定します。
- 字幕テキスト:実際に画面に表示される文字情報が含まれています。
- 互換性:多くの動画プレイヤーやプラットフォームでサポートされています。
WEBVTT(Web Video Text Tracks)フォーマット
.vvtファイルは、WEBVTT(Web Video Text Tracks)フォーマットのテキストファイルです。主にウェブ上の音声や動画コンテンツに字幕やキャプションなどの時系列テキスト情報を追加するために使用されます。
- ファイル形式: プレーンテキストファイルで、UTF-8でエンコードされています。
- 拡張子: .vtt
- MIME タイプ: text/vtt
WEBVTT(Web Video Text Tracks)フォーマットの例
WEBVTT
00:00:00.000 --> 00:00:02.500
<v Alice>こんにちは、Bob。今日はいい天気ですね。</v>
00:00:02.700 --> 00:00:05.200
<v Bob>ああ、Alice。本当にそうですね。散歩日和です。</v>
00:00:05.400 --> 00:00:08.900
<v Alice>そうですね。ところで、今週末の会議の準備はどうですか?</v>
00:00:09.100 --> 00:00:12.600
<v Bob>ほぼ終わっています。あとは資料の最終確認だけです。</v>
00:00:12.600 --> 00:00:13.600
<v Bob>私は天才です。</v>
00:00:13.800 --> 00:00:17.300
<v Alice>さすがですね。私もあと少しで終わりそうです。</v>
00:00:17.500 --> 00:00:21.000
<v Bob>よかったです。では、会議で会いましょう。お疲れ様です。</v>
00:00:21.200 --> 00:00:23.700
<v Alice>はい、お疲れ様です。また来週。</v>
会話文形式のファイルに変換する理由
ファイルのサイズを小さくするためです。ファイルのサイズを小さくすることで、少ないコンテキストサイズで生成AIモデルの利用費を削減することができます。また、ベクトルデータベースに格納する際のチャンキング戦略としても有効です。そして、何よりも人が読んでわかりやすい(ヒューマンリーダブル)です。
WEBVTTフォーマットのファイルから会話文形式のファイルに変換する
変換プログラム
以下のPythonプログラム(vtt2text.py)を作成しました。
import sys
import re
def clean_speaker_name(name):
# 姓名から姓のみを取り出す(例:'山田 太郎' -> '山田')
return name.split()[0]
def convert_vtt_to_dialogue(input_file):
# 出力ファイル名を生成
output_file = input_file.rsplit('.', 1)[0] + '.txt'
# 会話データを保持する変数
dialogues = []
current_speaker = None
current_text = []
try:
with open(input_file, 'r', encoding='utf-8') as f:
for line in f:
# 空行、WEBVTT、タイムスタンプ、ID行をスキップ
line = line.strip()
if (not line or
line == 'WEBVTT' or
'-->' in line or
re.match(r'^[0-9a-f-]+/\d+-\d+$', line)):
continue
# タグ形式の行を解析
match = re.match(r'<v ([^>]+)>(.*)</v>', line)
if match:
speaker = clean_speaker_name(match.group(1))
text = match.group(2).strip()
# 新しい話者の場合
if speaker != current_speaker:
# 前の話者の内容を保存
if current_speaker and current_text:
dialogues.append(f"{current_speaker}:{''.join(current_text)}\n")
current_speaker = speaker
current_text = [text]
else:
# 同じ話者の場合は内容を追加
current_text.append(' ' + text)
# 最後の会話を追加
if current_speaker and current_text:
dialogues.append(f"{current_speaker}:{''.join(current_text)}\n")
# ファイルに書き出し
with open(output_file, 'w', encoding='utf-8') as f:
for dialogue in dialogues:
f.write(dialogue + '\n')
print(f"変換が完了しました。出力ファイル: {output_file}")
except Exception as e:
print(f"エラーが発生しました: {str(e)}")
sys.exit(1)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py input.vtt")
sys.exit(1)
input_file = sys.argv[1]
convert_vtt_to_dialogue(input_file)
実行例
プログラム(vtt2text.py)の引数にVTTフォーマットの入力ファイル(sample.vvt)を指定します。指定すると拡張子を.txtに置き換えた会話文形式のファイル(sample.txt)が出力されます。
% python vtt2text.py sample.vtt
変換が完了しました。出力ファイル: sample.txt
処理した会話の数: 6
出力ファイル
会話文に変換してファイル出力されました。チャンクに収まりやすいように同じ話者が連続的に話した場合は内容を追加するようにしました。
Alice:こんにちは、Bob。今日はいい天気ですね。
Bob:ああ、Alice。本当にそうですね。散歩日和です。
Alice:そうですね。ところで、今週末の会議の準備はどうですか?
Bob:ほぼ終わっています。あとは資料の最終確認だけです。 私は天才です。
Alice:さすがですね。私もあと少しで終わりそうです。
Bob:よかったです。では、会議で会いましょう。お疲れ様です。
Alice:はい、お疲れ様です。また来週。
最後に
WEBVTT(Web Video Text Tracks)フォーマットの字幕ファイルから生成AIに最適な会話文形式のファイルへの変換は、効率的なデータ処理と活用のための重要なプロセスです。この変換プロセスにより、ファイルサイズの縮小、生成AIモデルの利用コスト削減、ベクトルデータベースへの効果的な格納が可能となります。
会話形式の人間にとって読みやすい形式に変換することで、データの可読性が向上します。生成AIで利用しない場合でも、WEBVTTフォーマットを会話形式に変換しておくと良いかもしれません。