YouTube動画の字幕データを取得し、それをLangChainを用いて加工・解析することで、動画の要約や特定の質問への回答を自動化できます。
本記事では、字幕データの取得方法からLangChainを使った応用例まで、詳しく解説します。

AI技術が発達してPythonで本当にたくさんなことができるようになりました!
Youtubeの音声の情報から分析や要約をしてみたいんですが可能ですか?

それなら「youtube-transcript-api」を用いて音声字幕を取得して「LangChain」を用いて加工・解析するの良いですよ!
ただし、Youtubeの動画から取得した字幕情報の権利を侵害しないように2次利用には細心の注意を払ってくださいね!
YouTubeの字幕データを取得する方法
字幕データを取得するためには、Pythonライブラリ「youtube-transcript-api
」を使用します。
このライブラリを使うことで、YouTube動画から簡単に字幕情報を取得可能です。
1. YouTubeの動画IDを取得する
YouTube動画には、固有の「動画ID」が割り振られています。
動画IDは、動画URLの v=
パラメータ部分に記載されています。
例
URL:
https://www.youtube.com/watch?v=dQw4w9WgXcQ
動画ID:
dQw4w9WgXcQ
2. 字幕データを取得する
youtube-transcript-api
をインストールし、動画IDから字幕データを取得します。
ライブラリのインストール
以下のコマンドを実行してインストールします:
pip install youtube-transcript-api
字幕データの取得
以下のコードで、字幕データを取得できます:
from youtube_transcript_api import YouTubeTranscriptApi
def get_youtube_transcript(video_id):
try:
# 字幕データを取得
transcript = YouTubeTranscriptApi.get_transcript(video_id)
# タイムスタンプ付き字幕を結合して一つのテキストに
full_transcript = " ".join([entry['text'] for entry in transcript])
return full_transcript
except Exception as e:
return f"エラー: {str(e)}"
# 動画IDを指定
video_id = "dQw4w9WgXcQ"
transcript = get_youtube_transcript(video_id)
print(transcript)
字幕データの形式
youtube-transcript-api
が返す字幕データはJSON形式で、以下のような構造になっています:
[
{"text": "Hello, world!", "start": 0.0, "duration": 2.0},
{"text": "This is a test.", "start": 2.0, "duration": 2.5}
]
- text: 字幕の内容
- start: 字幕が表示される開始時間(秒単位)
- duration: 字幕が表示される時間の長さ(秒単位)
3. 字幕取得時の注意点
字幕がない動画の場合
字幕が有効になっていない動画では、字幕データを取得できません。
この場合、以下のエラーが発生します:
TranscriptsDisabled: The requested video does not have any transcripts available.
対応言語の制限
動画によっては、字幕が特定の言語でしか利用できない場合があります。
利用可能な言語を確認するには以下のコードを使用します:
from youtube_transcript_api import YouTubeTranscriptApi
transcript_list = YouTubeTranscriptApi.list_transcripts("dQw4w9WgXcQ")
print(transcript_list)
LangChainを使った字幕データの解析
LangChainは、大規模言語モデル(LLM)を活用して、字幕データを加工・解析するための強力なフレームワークです。
字幕を要約したり、質問応答を行う処理を簡単に実装できます。
1. LangChainの基本構造
PromptTemplate
LLMへの指示文(プロンプト)をテンプレートとして管理します。
from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate(
input_variables=["text"],
template="以下の字幕データを簡潔に要約してください:\n\n{text}"
)
LLM(Large Language Model)
LangChainは、OpenAIのGPTモデル(例: GPT-3やGPT-4)と連携できます。
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
Chain
字幕データから要約や質問応答を行う一連の処理をチェーンとして定義します。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt_template)
2. 字幕データの要約
字幕データを簡潔に要約するプロセスを以下のコードで実装できます:
def summarize_transcript(transcript: str):
"""
字幕データをLangChainで要約する関数
"""
# プロンプト設定
prompt_template = PromptTemplate(
input_variables=["text"],
template="以下の字幕データを簡潔に要約してください。\n\n{text}"
)
# モデルとチェーンの設定
llm = OpenAI(model_name="text-davinci-003")
chain = LLMChain(llm=llm, prompt=prompt_template)
# 要約実行
return chain.run(text=transcript)
実行例
summary = summarize_transcript(transcript)
print("=== 要約結果 ===")
print(summary)
3. 字幕データから質問応答
字幕を元に特定の質問に答える処理を実装する例です:
def answer_question_about_transcript(transcript: str, question: str):
"""
字幕データを元に質問に回答する関数
"""
# プロンプト設定
prompt_template = PromptTemplate(
input_variables=["text", "question"],
template=(
"以下は動画の字幕データです。\n\n{text}\n\n"
"この内容に基づいて、次の質問に答えてください:\n{question}"
)
)
# モデルとチェーンの設定
llm = OpenAI(model_name="text-davinci-003")
chain = LLMChain(llm=llm, prompt=prompt_template)
return chain.run(text=transcript, question=question)
実行例
question = "この動画の内容を簡単に説明してください。"
answer = answer_question_about_transcript(transcript, question)
print("=== 質問への回答 ===")
print(answer)
応用例
キーワード抽出
字幕データから重要なキーワードを抽出します。
prompt_template = PromptTemplate(
input_variables=["text"],
template="以下の字幕データから重要なキーワードを抽出してください:\n\n{text}"
)
カテゴリ分類
字幕データを解析し、動画がどのカテゴリに属するかを分類します。
prompt_template = PromptTemplate(
input_variables=["text"],
template="以下の字幕データに基づいて、この動画がどのカテゴリに属するか判断してください:\n\n{text}"
)
要約付きレポート生成
字幕データを元に、詳細なレポートを生成します。
字幕データ処理時の制約と対応策
長い字幕データの分割処理
LLMのトークン制限に対応するため、字幕データを一定の長さに分割して処理します。
def split_text(text, max_length):
return [text[i:i+max_length] for i in range(0, len(text), max_length)]
部分的な要約の統合
分割処理した各部分を要約し、最後にそれらを統合します。
まとめ
本記事では、YouTube字幕データの取得からLangChainを用いた解析までの方法を解説しました。
字幕データを効率的に活用することで、動画の要約や内容分析が容易になります。
LangChainを使った高度な処理を応用すれば、さらに多くの可能性が広がります。
ぜひ試してみてください!
本ブログ「ゴマフリーダムのPython教室」のトップページへは以下へアクセス!
コメント