YouTube学習と分析を効率化!無料で文字起こし・要約・対話が可能な「YouTube Video GPT」を公開しました
1. はじめに
プロジェクトの動機
日常生活や学習において、YouTubeは非常に重要な情報源として活用されています。しかし、次のような課題に直面することが多々あります:
- 動画内容が一度では理解しきれない講義や専門的な解説動画など、一度聞いただけでは内容を完全に消化できない場合がよくあります。
- 外国語の動画はハードルが高い英語やその他の言語で作られた有用なコンテンツにアクセスしても、リスニング能力に自信がないと理解が難しいことがあります。
- 既存のツールはコストが高い市場には文字起こしや要約を行うサービスが多数存在しますが、多くは有料であり、特に学生や個人ユーザーにとっては利用しづらい状況です。
こうした課題を解決し、YouTube動画を効率的に活用できる環境を提供したいと考えました。本プロジェクトは、以下の3つの特徴を備えた無料かつオープンソースのツールで、必要なのは 自身のOpenAI APIキーを用意するだけ です。利用料金はAPIの使用量に基づいて決定されるため、自分の使い方に応じて費用を管理できます。
- 文字起こし:YouTube動画の音声を高精度で文字データ化します。
- 要約生成:文字起こし結果をGPTモデルを使って要約し、重要なポイントを抽出します。
- 対話機能:文字起こしデータを基にGPTと自由に会話でき、内容を深く理解する手助けをします。
- プロジェクトのリンク
2. プロジェクト概要
2.1 主な機能
-
動画の文字起こし
yt_dlp
で音声をダウンロードし、Whisper モデルを使って文字起こしを実行 -
文字起こし内容の要約
OpenAI GPT モデルで要約を生成し、重要なポイントを抽出 -
対話機能
文字データを基に GPT と自由に対話
2.2 技術スタック
-
音声ダウンロード:
yt_dlp
-
文字起こし:
OpenAI Whisper
-
要約と対話:
OpenAI GPT
-
フロントエンド:
Streamlit
2.3 処理フロー
3. 実装方法
3.1 音声ダウンロード
YouTube動画の音声部分を yt_dlp
を使ってダウンロードします。このプロセスでは動画のメタデータを取得し、音声ファイルをMP3形式で保存します。以下のコマンドで実行可能です:
yt_dlp -x --audio-format mp3 <YouTube URL>
YouTubeTranscriber
クラスの download_audio
メソッドを使用すると、動画タイトルを自動的に取得し、安全なファイル名に変換した上でダウンロードを行います。
主なポイント:
- 動画情報を取得してファイル名をサニタイズ(特殊文字を置換)。
- ダウンロード後に
FFmpeg
でMP3ファイルに変換。 - 保存先のフォルダが存在しない場合は自動作成。
3.2 文字起こし
ダウンロードした音声ファイルを Whisper モデルで文字起こしします。以下の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を使って要約します。以下のコードで簡単に実現できます:
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と対話可能なインターフェースを提供します。以下のようにして実装します:
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)に変更します。具体的な設定は以下のように記述されています:
ydl_opts = { 'format': 'bestaudio/best', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', # 音質を192kbpsに固定 }], 'quiet': False, 'no_warnings': True, }
4. 実際の操作手順
4.1 アプリの起動
プロジェクトディレクトリで以下のコマンドを実行し、Streamlit アプリを起動:
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:文字起こし
- 「Transcription」タブを選択
- YouTube 動画 URL を入力
-
文字起こし設定を選択
-
Whisper モデル:
tiny
~large
から選択 - 言語設定:特定の言語を選択、または「None (Auto-detect)」
- 音声保存:必要なら「Keep downloaded audio file」にチェック
-
Whisper モデル:
- 「Generate Transcription」ボタンをクリック→ 結果が表示さる
-
ダウンロードオプション
- Download Transcription:文字起こしを保存
- Download Audio:音声ファイルを保存(保存設定時)
Step 2:生成总结(要約生成)
- 「Summary」タブを選択
- 文字起こし結果を確認
- カスタムプロンプトを入力(オプション)
- 「Generate Summary」ボタンをクリック→ 要約が生成される
- 要約のダウンロード:下部にスクロールし、Markdown ファイルとして保存
Step 3:チャットモード
- 「Chat」タブを選択
- ChatGPT を初期化:「Initialize/Reset ChatGPT」ボタンをクリック
5. メリットと改善点
メリット
- 無料で利用可能:オープンソースで追加費用不要
- 高精度な文字起こし:OpenAI Whisper による正確な音声解析
- 多言語対応:様々な言語に対応し、学習効率を向上
- カスタムプロンプト:個人の発想やニーズに応じた要約や分析を実現
- プライバシー保護:データは全てローカル環境で処理
改善点
- 長時間動画の処理に時間がかかる場合がある
- 一部言語での文字起こし精度が改善の余地あり
6. 参考資料
7. おわりに
「YouTube Video GPT」は、学習やコンテンツ分析を効率化する便利なツールであり、特に学生、研究者、コンテンツクリエイターの皆様にご活用いただけます。本プロジェクトにご関心をお持ちの方は、ぜひ以下のリンクからご覧ください。ご意見やフィードバックをお待ちしております。
私は、yhooai ソリューションとして、AIを活用しお客様の課題解決を支援することに取り組んでいます。これまでのプロジェクトや取り組みについては、公式ウェブサイト に詳しく記載しております。お仕事のご依頼や相談がございましたら、以下のリンクよりお気軽にご連絡ください。 今後ともどうぞよろしくお願いいたします!
Discussion