YouTube学習と分析を効率化！無料で文字起こし・要約・対話が可能な「YouTube Video GPT」を公開しました

## **1. はじめに**

### **プロジェクトの動機**

日常生活や学習において、YouTubeは非常に重要な情報源として活用されています。しかし、次のような課題に直面することが多々あります：

- **動画内容が一度では理解しきれない**講義や専門的な解説動画など、一度聞いただけでは内容を完全に消化できない場合がよくあります。
- **外国語の動画はハードルが高い**英語やその他の言語で作られた有用なコンテンツにアクセスしても、リスニング能力に自信がないと理解が難しいことがあります。
- **既存のツールはコストが高い**市場には文字起こしや要約を行うサービスが多数存在しますが、多くは有料であり、特に学生や個人ユーザーにとっては利用しづらい状況です。

こうした課題を解決し、YouTube動画を効率的に活用できる環境を提供したいと考えました。本プロジェクトは、以下の3つの特徴を備えた無料かつオープンソースのツールで、必要なのは **自身のOpenAI APIキーを用意するだけ** です。利用料金はAPIの使用量に基づいて決定されるため、自分の使い方に応じて費用を管理できます。

1. **文字起こし**：YouTube動画の音声を高精度で文字データ化します。
2. **要約生成**：文字起こし結果をGPTモデルを使って要約し、重要なポイントを抽出します。
3. **対話機能**：文字起こしデータを基にGPTと自由に会話でき、内容を深く理解する手助けをします。
- プロジェクトのリンク

https://github.com/yh00722/youtube-video-gpt

## **2. プロジェクト概要**

### **2.1 主な機能**

1. **動画の文字起こし**
    
    `yt_dlp` で音声をダウンロードし、Whisper モデルを使って文字起こしを実行
    
2. **文字起こし内容の要約**
    OpenAI GPT モデルで要約を生成し、重要なポイントを抽出
    
3. **対話機能**
    文字データを基に GPT と自由に対話
### **2.2 技術スタック**

- **音声ダウンロード**：`yt_dlp`
- **文字起こし**：`OpenAI Whisper`
- **要約と対話**：`OpenAI GPT`
- **フロントエンド**：`Streamlit`

### **2.3 処理フロー**

```mermaid
graph TD
    A[動画リンク入力] --> B[音声ダウンロード]
    B --> C{モード選択}
    C -->|ローカル| D[文字起こし]
    C -->|API| E[文字起こし]
    D --> F[保存]
    E --> F
    F --> G[要約生成]
    G --> H[対話機能]

    %% 配置图表布局的紧凑性
    classDef compactGraph stroke-width:1px,font-size:12px;
    class A,B,C,D,E,F,G,H compactGraph;

```

## **3. 実装方法**

### **3.1 音声ダウンロード**

YouTube動画の音声部分を `yt_dlp` を使ってダウンロードします。このプロセスでは動画のメタデータを取得し、音声ファイルをMP3形式で保存します。以下のコマンドで実行可能です：

```bash
yt_dlp -x --audio-format mp3 <YouTube URL>
```

`YouTubeTranscriber` クラスの `download_audio` メソッドを使用すると、動画タイトルを自動的に取得し、安全なファイル名に変換した上でダウンロードを行います。

**主なポイント**：

- 動画情報を取得してファイル名をサニタイズ（特殊文字を置換）。
- ダウンロード後に `FFmpeg` でMP3ファイルに変換。
- 保存先のフォルダが存在しない場合は自動作成。

### **3.2 文字起こし**

ダウンロードした音声ファイルを Whisper モデルで文字起こしします。以下のPythonコードで簡単に実行できます：

```python
from whisper import load_model
model = load_model('base')
result = model.transcribe('audio.mp3')
print(result['text'])
```

**ローカルモードとAPIモード**：

- **ローカルモード**：Whisper モデルを自分の環境にロードして使用。
- **APIモード**：OpenAI Whisper API を利用（大容量ファイルは分割処理）。

`transcribe_audio_local` メソッドでは、音声言語の自動検出機能を活用し、高精度な文字起こしを実現します。

### **3.3 要約機能**

生成された文字起こしをOpenAI GPTを使って要約します。以下のコードで簡単に実現できます：

```python
import openai
response = openai.Completion.create(
    engine="gpt-3.5-turbo",
    prompt="以下内容を要約してください：\n" + transcription_text,
    max_tokens=200
)
print(response['choices'][0]['text'])
```

`YouTubeTranscriber` クラスでは、文字起こしデータを入力として要約を生成するプロセスがシームレスに統合されています。

### **3.4 対話機能**

文字起こしデータを基に、GPTと対話可能なインターフェースを提供します。以下のようにして実装します：

```python
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "この内容について教えてください：\n" + transcription_text}
    ]
)
print(response['choices'][0]['message']['content'])
```

### **補足説明**

- **大容量音声の処理**
    
    APIモードでは、25MBを超えるファイルは自動的に分割され、各セグメントを個別に文字起こし後、結果を結合します。
    
- **音声ダウンロード時の品質設定**
    
    `yt_dlp` を使用して音声をダウンロードする際、音質を自由に設定することが可能です。本プロジェクトでは、ダウンロードした音声ファイルの品質を **192kbps** に固定していますが、必要に応じてソースコードにて他のビットレート（例：128kbps、320kbps）に変更します。
    
    具体的な設定は以下のように記述されています：
    
    ```python
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',  # 音質を192kbpsに固定
        }],
        'quiet': False,
        'no_warnings': True,
    }
    ```
    

## **4. 実際の操作手順**

### **4.1 アプリの起動**

プロジェクトディレクトリで以下のコマンドを実行し、Streamlit アプリを起動：

```bash
git clone https://github.com/yh00722/youtube-video-gpt.git
cd youtube-video-gpt

rye sync
source .venv/bin/activate
streamlit run src/app.py
```

ブラウザでウェブインターフェースが開きます。

### **4.2 操作ガイド**

### **Step 1：文字起こし**

1. **「Transcription」タブを選択**
2. **YouTube 動画 URL を入力**
3. **文字起こし設定を選択**
    - **Whisper モデル**：`tiny`～`large` から選択
    - **言語設定**：特定の言語を選択、または「None (Auto-detect)」
    - **音声保存**：必要なら「Keep downloaded audio file」にチェック
4. **「Generate Transcription」ボタンをクリック**→ 結果が表示さる
5. **ダウンロードオプション**
    - **Download Transcription**：文字起こしを保存
    - **Download Audio**：音声ファイルを保存（保存設定時）

![](https://storage.googleapis.com/zenn-user-upload/56423592f4c4-20250113.png)

### **Step 2：生成总结（要約生成）**

1. **「Summary」タブを選択**
2. **文字起こし結果を確認**
3. **カスタムプロンプトを入力（オプション）**
4. **「Generate Summary」ボタンをクリック**→ 要約が生成される
5. **要約のダウンロード**：下部にスクロールし、Markdown ファイルとして保存

![](https://storage.googleapis.com/zenn-user-upload/ce23045873cb-20250113.png)

### **Step 3：チャットモード**

1. **「Chat」タブを選択**
2. **ChatGPT を初期化**：「Initialize/Reset ChatGPT」ボタンをクリック

![](https://storage.googleapis.com/zenn-user-upload/243fe67414df-20250113.png)

## **5. メリットと改善点**

### **メリット**

- **無料で利用可能**：オープンソースで追加費用不要
- **高精度な文字起こし**：OpenAI Whisper による正確な音声解析
- **多言語対応**：様々な言語に対応し、学習効率を向上
- **カスタムプロンプト**：個人の発想やニーズに応じた要約や分析を実現
- **プライバシー保護**：データは全てローカル環境で処理

### 改善点

- 長時間動画の処理に時間がかかる場合がある
- 一部言語での文字起こし精度が改善の余地あり

## **6. 参考資料**

https://github.com/yt-dlp/yt-dlp

https://platform.openai.com/docs/guides/speech-to-text

https://streamlit.io/

## **7. おわりに**

「YouTube Video GPT」は、学習やコンテンツ分析を効率化する便利なツールであり、特に学生、研究者、コンテンツクリエイターの皆様にご活用いただけます。本プロジェクトにご関心をお持ちの方は、ぜひ以下のリンクからご覧ください。ご意見やフィードバックをお待ちしております。

https://github.com/yh00722/youtube-video-gpt

私は、**yhooai ソリューション**として、AIを活用しお客様の課題解決を支援することに取り組んでいます。これまでのプロジェクトや取り組みについては、[公式ウェブサイト](https://yhooai.com/) に詳しく記載しております。お仕事のご依頼や相談がございましたら、[こちら](https://yhooai.com/#contact)よりお気軽にご連絡ください。
今後ともどうぞよろしくお願いいたします！