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

## はじめに

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

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

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

---

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

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

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

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

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

```bash
pip install youtube-transcript-api
```

### 字幕データの取得と加工

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

```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. **ライブラリのインポート**:
    ```python
    from youtube_transcript_api import YouTubeTranscriptApi
    ```
    `YouTubeTranscriptApi`クラスをインポートします。

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

3. **字幕の取得**:
    ```python
    transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])
    ```
    `get_transcript`メソッドを使用して、日本語（`'ja'`）の字幕データを取得します。字幕が存在しない場合や指定した言語の字幕がない場合はエラーが発生します。

4. **字幕データの表示**:
    ```python
    print(transcript)
    ```
    取得した字幕データは、各字幕の開始時間、終了時間、テキストが辞書形式でリストに格納されています。

5. **テキストの結合**:
    ```python
    transcript_text = ' '.join([item['text'] for item in transcript])
    ```
    各字幕のテキスト部分を取り出し、スペースで結合して一つの文字列にします。これにより、字幕全体のテキストを連続した形で扱うことができます。

6. **加工後のテキストの表示**:
    ```python
    print(transcript_text)
    ```
    結合後のテキストを表示します。

**メリット:**

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

**注意点:**

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

---

## `lang-chain`を使用する方法

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

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

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

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

**解説:**

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

### 字幕データの取得

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

```python
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. **ライブラリのインポート**:
    ```python
    from langchain_community.document_loaders import YoutubeLoader
    ```
    `YoutubeLoader`クラスをインポートします。これはYouTubeの字幕データをロードするためのクラスです。

2. **動画URLの指定**:
    ```python
    url = 'https://www.youtube.com/watch?v=Tzu2onb2yYk'
    ```
    取得したいYouTube動画のURLを指定します。

3. **YouTubeLoaderのインスタンス作成**:
    ```python
    loader = YoutubeLoader.from_youtube_url(
        url,
        add_video_info=False,
        language=["ja"]  # 日本語字幕を指定
    )
    ```
    `from_youtube_url`メソッドを使用して、指定したURLから字幕データをロードするインスタンスを作成します。
    
    - `add_video_info=False`: 動画の追加情報（タイトルや説明など）を含めない設定。
    - `language=["ja"]`: 日本語の字幕を指定。複数言語を指定することも可能です。

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

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

6. **テキストの表示**:
    ```python
    print(text)
    ```
    抽出したテキストを表示します。

**メリット:**

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

**注意点:**

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

---

## まとめ

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

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

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

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

---

**参考リンク:**

- [youtube-transcript-api GitHub](https://github.com/jdepoix/youtube-transcript-api)
- [lang-chain GitHub](https://github.com/hwchase17/langchain)
- [langchain-community GitHub](https://github.com/langchain-ai/langchain-website)

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/