YouTube API データ活用

youtube-transcript-apiで字幕を取得する方法【Pythonサンプル+実行結果付き】

2025年9月29日

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 → 動画が削除・非公開の場合に発生します。

5. 次に読む

Whisperで文字起こしして要約する方法

YouTubeの情報を取得する方法まとめ(入口へ戻る)

-YouTube API, データ活用