1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YouTube動画から字幕を取得するPythonコード完全解説

Posted at

はじめに

YouTubeの字幕データを取得する方法はいくつか存在しますが、今回は以下の2つの方法に焦点を当てて解説します。

  1. youtube-transcript-api: シンプルで使いやすい字幕取得ライブラリ。
  2. lang-chain: より高度なドキュメント処理が可能なライブラリ。

それぞれの方法のメリットや使用手順を理解し、目的に応じて適切な方法を選択できるようにしましょう。


1. youtube-transcript-apiを使用する方法

youtube-transcript-apiは、YouTubeの字幕データを簡単に取得できるPythonライブラリです。

以下に具体的な使用手順を示します。

ライブラリのインストール

まず、youtube-transcript-apiをインストールします。以下のコマンドを実行してください。

pip install youtube-transcript-api

字幕データの取得と加工

次に、Pythonコードを用いて字幕データを取得し、テキスト形式に加工します。

from youtube_transcript_api import YouTubeTranscriptApi

# 対象のYouTube動画のIDを指定
video_id = 'BzJHh5IZV2o'

# 日本語の字幕を取得
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])

# 字幕データを表示
print(transcript)

# 字幕テキストを結合して一つの文字列にする
transcript_text = ' '.join([item['text'] for item in transcript])

# 加工後のテキストを表示
print(transcript_text)

コード解説:

  1. ライブラリのインポート:

    from youtube_transcript_api import YouTubeTranscriptApi
    

    YouTubeTranscriptApiクラスをインポートします。

  2. 動画IDの指定:

    video_id = 'BzJHh5IZV2o'
    

    取得したいYouTube動画のIDを指定します。動画のURLが https://www.youtube.com/watch?v=BzJHh5IZV2o の場合、vパラメータの値が動画IDです。

  3. 字幕の取得:

    transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])
    

    get_transcriptメソッドを使用して、日本語('ja')の字幕データを取得します。字幕が存在しない場合や指定した言語の字幕がない場合はエラーが発生します。

  4. 字幕データの表示:

    print(transcript)
    

    取得した字幕データは、各字幕の開始時間、終了時間、テキストが辞書形式でリストに格納されています。

  5. テキストの結合:

    transcript_text = ' '.join([item['text'] for item in transcript])
    

    各字幕のテキスト部分を取り出し、スペースで結合して一つの文字列にします。これにより、字幕全体のテキストを連続した形で扱うことができます。

  6. 加工後のテキストの表示:

    print(transcript_text)
    

    結合後のテキストを表示します。

メリット:

  • 簡単に字幕データを取得できる。
  • 指定した言語の字幕を取得可能。
  • シンプルなAPI設計で初心者にも扱いやすい。

注意点:

  • 字幕が存在しない動画や、指定した言語の字幕が存在しない場合はエラーが発生します。
  • 自動生成字幕の場合、精度が低いことがあります。

lang-chainを使用する方法

lang-chainは、自然言語処理やドキュメント処理に特化した強力なライブラリです。
今回は、lang-chainのコミュニティ版であるlangchain-communityを使用してYouTubeの字幕データを取得します。

ライブラリのインストール

まず、必要なライブラリをインストールします。以下のコマンドを実行してください。

pip install langchain-community
pip install --upgrade --quiet youtube-transcript-api

解説:

  • langchain-community: lang-chainのコミュニティ版で、YouTubeLoaderなどの便利な機能が含まれています。
  • youtube-transcript-api: 前述のyoutube-transcript-apiをアップグレードして最新バージョンを確保します。

字幕データの取得

次に、lang-chainを使用して字幕データを取得します。

from langchain_community.document_loaders import YoutubeLoader

# 対象のYouTube動画のURLを指定
url = 'https://www.youtube.com/watch?v=BzJHh5IZV2o'

# YouTubeLoaderのインスタンスを作成
loader = YoutubeLoader.from_youtube_url(
    url,
    add_video_info=False,
    language=["ja"]  # 日本語字幕を指定
)

# ドキュメントをロード
documents = loader.load()

# ドキュメントからテキストを取得
text = documents[0].page_content

# テキストを表示
print(text)

コード解説:

  1. ライブラリのインポート:

    from langchain_community.document_loaders import YoutubeLoader
    

    YoutubeLoaderクラスをインポートします。これはYouTubeの字幕データをロードするためのクラスです。

  2. 動画URLの指定:

    url = 'https://www.youtube.com/watch?v=Tzu2onb2yYk'
    

    取得したいYouTube動画のURLを指定します。

  3. YouTubeLoaderのインスタンス作成:

    loader = YoutubeLoader.from_youtube_url(
        url,
        add_video_info=False,
        language=["ja"]  # 日本語字幕を指定
    )
    

    from_youtube_urlメソッドを使用して、指定したURLから字幕データをロードするインスタンスを作成します。

    • add_video_info=False: 動画の追加情報(タイトルや説明など)を含めない設定。
    • language=["ja"]: 日本語の字幕を指定。複数言語を指定することも可能です。
  4. ドキュメントのロード:

    documents = loader.load()
    

    loadメソッドを呼び出して、字幕データを取得します。返されるdocumentsはリスト形式で、各要素がドキュメント(ここでは字幕のセグメント)になります。

  5. テキストの抽出:

    text = documents[0].page_content
    

    最初のドキュメントからテキスト部分を抽出します。lang-chainでは、ドキュメントのメタデータやコンテンツがオブジェクトとして管理されているため、page_content属性を使用してテキストを取得します。

  6. テキストの表示:

    print(text)
    

    抽出したテキストを表示します。

メリット:

  • lang-chainの強力なドキュメント処理機能と統合可能。
  • 複数のデータソースや言語に対応しやすい。
  • 高度な処理や分析を行う際に拡張性が高い。

注意点:

  • lang-chainは他のライブラリに比べてやや複雑で、導入に時間がかかる場合があります。
  • 基本的な字幕取得にはyoutube-transcript-apiの方がシンプルかもしれませんが、後々の拡張性を考えると有利です。

まとめ

YouTubeの字幕データを取得する方法として、youtube-transcript-apilang-chainの2つを紹介しました。

  • youtube-transcript-api:

    • シンプルで迅速に字幕データを取得できる。
    • 初心者や簡単な用途に最適。
  • lang-chain:

    • 高度なドキュメント処理や自然言語処理と組み合わせて使用できる。
    • 拡張性が高く、複雑な分析や処理を行いたい場合に適している。

用途やプロジェクトの規模に応じて、最適な方法を選択してください。
両方の方法を理解することで、YouTubeの字幕データを効果的に活用できるようになります。


参考リンク:

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?