🙆
IIIF Audio/Visual: 複数のvttファイルを記述する
概要
IIIFを用いたAudio/Visual資料の記述について、複数のvttファイルを記述する方法に関する備忘録です。
ここでは、以下のように、日英の文字起こしテキストを記述します。
マニフェストファイルの記述
以下に例を格納しています。
以下の記事も参考にしてください。
具体的には、以下のように複数のアノテーションとして記述することで、rampビューアによって正しく処理されました。
...
"annotations": [
{
"id": "https://nakamura196.github.io/ramp_data/demo/3571280/canvas/page/2",
"type": "AnnotationPage",
"items": [
{
"id": "https://nakamura196.github.io/ramp_data/demo/3571280/canvas/annotation/webvtt",
"type": "Annotation",
"label": {
"ja": [
"日本語 (machine-generated)"
]
},
"motivation": "supplementing",
"body": {
"id": "https://nakamura196.github.io/ramp_data/demo/3571280/3571280.vtt",
"type": "Text",
"format": "text/vtt",
"label": {
"ja": [
"日本語 (machine-generated)"
]
}
},
"target": "https://nakamura196.github.io/ramp_data/demo/3571280/canvas"
},
{
"id": "https://nakamura196.github.io/ramp_data/demo/3571280/canvas/annotation/webvtt/2",
"type": "Annotation",
"label": {
"ja": [
"English (machine-generated)"
]
},
"motivation": "supplementing",
"body": {
"id": "https://nakamura196.github.io/ramp_data/demo/3571280/3571280_en.vtt",
"type": "Text",
"format": "text/vtt",
"label": {
"ja": [
"English (machine-generated)"
]
}
},
"target": "https://nakamura196.github.io/ramp_data/demo/3571280/canvas"
}
]
}
]
...
なお、Cloverでは、2つの文字起こしテキストが連続して表示されました。
(参考)英語の文字起こしテキストの作成
英語の文字起こしテキストの作成にあたっては、以下のようなプログラムを使用しました。以下はGitHub版Whisperを使用した例です。
def format_timestamp(seconds):
"""Converts time in seconds to a formatted string 'HH:MM:SS.mmm'."""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
seconds = seconds % 60
return f"{hours:02}:{minutes:02}:{seconds:06.3f}"
def write_vtt(transcription, file_path):
with open(file_path, 'w') as file:
file.write("WEBVTT\n\n")
for i, segment in enumerate(transcription['segments']):
start = format_timestamp(segment['start'])
end = format_timestamp(segment['end'])
text = segment['text'].strip()
file.write(f"{start} --> {end}\n{text}\n\n") # {i + 1}\n
def translate(input_path, output_path, verbose=False):
model = whisper.load_model('medium')
result = model.transcribe(input_path, verbose=verbose, language="ja", task="translate")
write_vtt(result, output_path)
return result
当初、API版Whisperによる翻訳を以下のように試しましたが、日本語で出力され、うまく英語テキストを作成できませんでした。
transcript = client.audio.translations.create(
model="whisper-1",
file=audio_file,
response_format="vtt",
)
まとめ
複数の文字起こしテキストや字幕ファイルの記述にあたり、参考になりましたら幸いです。
Discussion