YouTube動画にはアップロード字幕や自動生成字幕が用意されている場合があります。youtube-transcript-api
を使うと、動画IDを指定してこれらの字幕をPythonから取得できます。本記事では、字幕の取得からCSV保存までを実際のコード付きで解説します。
1. ライブラリのインストール
pip install youtube-transcript-api pandas
※ 環境によっては pip install --upgrade youtube-transcript-api
で最新版へアップデートしておくと安心です。
2. サンプルコード(字幕を取得して保存)
最新版(v1系)では get_transcript()
は廃止され、fetch()
を使います。
from youtube_transcript_api import YouTubeTranscriptApi, NoTranscriptFound, TranscriptsDisabled, VideoUnavailable
import pandas as pd
VIDEO_ID = "dQw4w9WgXcQ" # 任意のYouTube動画ID
langs = ['ja', 'ja-JP', 'en'] # 日本語を優先、なければ英語
try:
ytt = YouTubeTranscriptApi()
try:
# 指定言語で字幕を取得
fetched = ytt.fetch(VIDEO_ID, languages=langs)
data = fetched.to_raw_data()
except NoTranscriptFound:
# アップロード字幕が無ければ自動生成字幕を探す
tlist = ytt.list(VIDEO_ID)
data = tlist.find_generated_transcript(langs).fetch().to_raw_data()
# DataFrameに変換
df = pd.DataFrame(data)
# CSV保存(全件)
df.to_csv("transcript.csv", index=False, encoding="utf-8-sig")
print("Saved to transcript.csv")
# 件数と先頭50件を表示
print("Total captions:", len(df))
print(df.head(50))
except TranscriptsDisabled:
print("Error: この動画は字幕機能が無効化されています。")
except VideoUnavailable:
print("Error: 動画が利用できません。")
except NoTranscriptFound:
print("Error: 指定言語の字幕が見つかりませんでした。")
except Exception as e:
print("Unexpected Error:", e)
3. 実行結果サンプル
Saved to transcript.csv
Total captions: 352
text start duration
0 こんにちは!今日はAIについて話します。 0.00 3.2
1 [音楽] 3.20 2.1
2 [拍手] 5.40 1.8
3 [音楽] 7.25 2.9
4 まず最初に、AIがどのように進化してきたかを見ていきましょう。 10.20 4.5
4. よくあるエラーと対処法
- AttributeError: 'YouTubeTranscriptApi' has no attribute 'get_transcript' → v1系では
get_transcript()
が廃止されています。代わりにfetch()
を使用してください。 - NoTranscriptFound → 指定言語の字幕が存在しません。
languages
の優先順を変えるか、他の動画で試してください。 - TranscriptsDisabled → 動画投稿者が字幕を無効化しています。この場合は取得できません。
- VideoUnavailable → 動画が削除・非公開の場合に発生します。