解決する課題
学校や講座制作者は、文字起こしのない動画を何百本も抱えていたり、ドキュメントとしては読めない自動字幕しかなかったりします。障害学生支援室には、配慮の依頼が1件ずつ届きます。すべての動画に読みやすい文字起こしを公開すれば、滞留が解消され、すべての学習者のためになります。
最初のバージョンに含めるべき機能
- 講座やチャンネル内のすべての動画の文字起こし
- 字幕のない動画向けのAI音声認識
- 読みやすさのための段落と話者ラベル
- スクリーンリーダーで操作しやすいHTMLの文字起こしページ
- ダウンロード可能なテキストと字幕ファイル
開発手順(ステップごとに解説)
- 01
動画を棚卸しする
講座の再生リストやチャンネルを解決し、文字起こしが必要なすべての動画を一覧化します。
- 02
一括で文字起こしする
format.paragraphsを指定してIDを/batchに送信します。allow_asrとWebhookを有効にすると、字幕のない動画はAI音声認識で文字起こしされます。
- 03
読みやすくする
複数の話者がいる講義ではASRの話者ラベルを使います。文字起こしがドキュメントのように読めるよう、段落区切りと見出しを残します。
- 04
公開する
各文字起こしを、動画の下にHTMLページまたは折りたたみセクションとして表示し、ダウンロードリンクを付けます。
サンプルコード
このアイデアは「レシピ3:再生リストをナレッジベースに一括登録」パターンをベースにしています。チャンネル、プロンプト、保存先はご自身のものに置き換えてください。
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DB作る価値がある理由
教育機関にとっての見返りは、アクセシビリティ義務をより早く満たし、講座コンテンツをより使いやすく見つけやすくできることです。代理店やプラットフォームは、文字起こしの公開を学校向けサービスとして販売できます。
避けるべき失敗
- 自動字幕を区切りのない1つのテキストの塊として公開すること:段落と話者で整形しましょう。
- 文字起こしをダウンロードの奥に隠すこと:読みやすくインデックスされるよう、テキストをページ上に置きましょう。
- AIの出力が完璧だと思い込むこと:特に必要な配慮に対応する場合は、専門用語や名前を誰かが抜き取りで確認しましょう。
このアイデアに関する質問
文字起こしは動画のアクセシビリティに役立ちますか?
はい。文字起こしにより、聴覚に障害のあるユーザーやスクリーンリーダーの利用者も話された内容に完全にアクセスでき、一般的なアクセシビリティガイドラインでも字幕と併せて推奨されています。
文字起こしはSEOに役立ちますか?
ページ上にテキストとして公開した文字起こしは、動画の埋め込みだけの場合よりも多くの関連コンテンツを検索エンジンに提供します。
字幕のない動画はどうなりますか?
AI音声認識を有効にすれば、APIが99言語のいずれでも音声を文字起こしします。