LangChainを使用してYouTube字幕を取得する方法

2024/11/10に公開

はじめに

このノートブックでは、LangChainを使用してYouTube動画から字幕を取得する方法を説明します。LangChainのYouTubeLoaderを使用することで、簡単に字幕データを取得することができます。

必要なライブラリのインストール

まず、必要なライブラリをインストールします。

!pip install langchain-community

このコマンドでLangChainのコミュニティバージョンがインストールされます。

YouTubeLoader のインポート

次に、LangChainからYouTubeLoaderをインポートします。

from langchain_community.document_loaders import YoutubeLoader

YouTube Transcript API のインストール

YouTubeの字幕を取得するために必要なライブラリをインストールします。

%pip install --upgrade --quiet youtube-transcript-api

基本的な字幕の取得

4.1 日本語字幕の取得

loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=Tzu2onb2yYk",
    add_video_info=False,
    language=['ja']  # 日本語字幕を指定
)

# 字幕を取得
documents = loader.load()

4.2 字幕と動画情報の取得

動画のタイトルや説明などの追加情報も取得したい場合は、add_video_info=Trueを指定します。

# pytubeのインストールが必要です
%pip install --upgrade --quiet pytube

loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=Tzu2onb2yYk",
    add_video_info=True,
    language=['ja']
)

# 字幕と動画情報を取得
documents_with_info = loader.load()

高度な使用方法

5.1 複数言語の指定と翻訳

特定の言語が利用できない場合のフォールバック言語を指定したり、翻訳を設定することができます。

loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=Tzu2onb2yYk",
    add_video_info=True,
    language=["ja", "en"],  # 日本語を優先、なければ英語
    translation="en"        # 英語に翻訳
)

5.2 タイムスタンプ付きチャンク分割

字幕を一定時間ごとのチャンクに分割して取得することもできます。

from langchain_community.document_loaders.youtube import TranscriptFormat

loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=Tzu2onb2yYk",
    add_video_info=True,
    transcript_format=TranscriptFormat.CHUNKS,
    chunk_size_seconds=30  # 30秒ごとにチャンク分割
)

# チャンク分割された字幕を取得
chunked_documents = loader.load()

エラーハンドリング

字幕取得時の一般的なエラーとその対処方法:

try:
    loader = YoutubeLoader.from_youtube_url(
        "https://www.youtube.com/watch?v=Tzu2onb2yYk",
        language=['ja']
    )
    documents = loader.load()
except Exception as e:
    if "No transcript found" in str(e):
        print("指定された言語の字幕が見つかりませんでした")
    elif "Video unavailable" in str(e):
        print("動画が利用できません")
    else:
        print(f"エラーが発生しました: {e}")

注意点

  • 字幕が設定されていない動画からは取得できません
  • 自動生成字幕の品質は動画によって異なります
  • 一部の動画では字幕が無効化されている場合があります
  • APIの利用制限に注意が必要です

まとめ

LangChainのYouTubeLoaderを使用することで、以下のことが可能になります:

  • 複数言語の字幕取得
  • 動画情報の取得
  • 字幕の翻訳
  • タイムスタンプ付きのチャンク分割
  • エラーハンドリング

これらの機能を組み合わせることで、YouTubeコンテンツの分析や処理を効率的に行うことができます。

📒ノートブック

https://colab.research.google.com/drive/1VMiSULrT_md-C83Vy5YtAa5J0edQ5dfz?usp=sharing

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Discussion