解決する課題
手作業の文字起こしでは研究対象が数十本の動画に限られ、場当たり的なスクレイピングスクリプトは壊れやすく再現も困難です。研究者には、定義したチャンネルと期間のサンプルについて完全な文字起こしを確実に収集し、メタデータとともに保存し、他者が再現できるよう手法を共有する手段が必要です。
最初のバージョンに含めるべき機能
- 文書化されたチャンネルのサンプルと期間
- メタデータ付きの生のJSONとして保存された完全な文字起こし
- 動画ごとの字幕ソースの記録(手動、自動、AI)
- R、Python、NVivo、ATLAS.ti向けのCSVまたはテキストへのエクスポート
- 再現のために再実行できる収集スクリプト
開発手順(ステップごとに解説)
- 01
サンプルを定義する
研究対象のチャンネルと期間を列挙し、方法のセクション用に選定基準を記録します。
- 02
動画リストを取得する
各チャンネルについて/channels/resolveを呼び出し、結果を公開日で絞り込みます。
- 03
文字起こしを収集する
動画IDを/batchに送り、各文字起こしの言語と字幕ソースを含むJSONレスポンス全体を保存します。
- 04
分析の準備をする
動画ID、チャンネル、日付、タイムスタンプ付きで文字起こしをテキストまたはCSVとしてエクスポートし、トピックモデル、キーワード頻度、質的コーディングで分析します。
サンプルコード
このアイデアは「レシピ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作る価値がある理由
研究者にとっての見返りは、手作業の文字起こしのごく一部のコストと時間で得られる、再現性のあるデータセットです。メディアモニタリング企業やシンクタンク向けに、有料データセットや分析サービスを構築するチームもあります。
避けるべき失敗
- 自動字幕と人による字幕を区別せずに混在させること:精度が異なるため字幕ソースを記録しましょう。
- 生のレスポンスを保存しないこと:分析を再実行できるよう元のJSONを保存しましょう。
- 倫理審査とプラットフォーム規約を無視すること:データセットを公開する前に、所属機関の要件とYouTubeの規約を確認しましょう。
このアイデアに関する質問
YouTubeの文字起こしを学術研究に使えますか?
多くの研究者が使っています。特にデータセットを公開する前に、所属機関の倫理要件、YouTubeの規約、著作権法を確認してください。
YouTubeの自動字幕はどのくらい正確ですか?
音質、アクセント、話題によって異なります。APIは各文字起こしが手動字幕、自動字幕、AI音声認識のどれによるものかを返すので、それを考慮に入れられます。
一度に何本の動画を収集できますか?
Businessプランでは、1回のバッチリクエストで最大3,000件の動画IDを受け付けます。より大規模な研究では複数のバッチを実行できます。