😀
【Python】YouTubeの動画を文字起こしする方法
Pythonを使ったYouTube動画の文字起こし方法を調べていると、下記3つをよく見かけました。試してみたものをメモしておきます。
- 『youtube-transcript-api』+『LangChain』
- 『pytube』+『moviepy』+『Whisper』
- 『yt-dlp』+『Whisper』
方法 | 精度 | コスト | 簡単さ | 処理時間 |
---|---|---|---|---|
『youtube-transcript-api』+『LangChain』 | △ | ○ | ○ | ○ |
『pytube』+『moviepy』+『Whisper』 | ○ | △ | ○ | △ |
『yt-dlp』+『Whisper』 | ? | △ | △ | ? |
方法1『youtube-transcript-api』+『LangChain』
YouTubeの字幕を取得する方法。
簡単に実行できるけど、自動生成字幕しかない場合は精度が少し下がるかも。また自動字幕もない場合は取得ができませんでした。
pip install langchain youtube-transcript-api
from langchain_community.document_loaders import YoutubeLoader
YOUTUBE_URL = "https://www.youtube.com/watch?v=Rs2ORs1lNqY"
# youtube-transcript-apiで文字起こし ====================================
loader = YoutubeLoader.from_youtube_url(
YOUTUBE_URL, # 取得したいYouTube URL
add_video_info=False, # 動画情報を取得する場合はTrue
language=["ja"], # 取得する字幕の言語指定(複数指定は取得の優先順位づけ)
translation="en", # 字幕を自動翻訳したい場合の言語指定
)
documents = loader.load()
content = documents[0].page_content # 文字起こし出力
print(content)
方法2『pytube』+『moviepy』+『Whisper』
YouTubeの動画をmp3に変換して、その音声データをWhisperで文字起こしする方法。
料金がかかるけど、精度は高い。
pip install pytube moviepy openai
from pytube import YouTube
from moviepy.editor import *
from openai import OpenAI
import os
YOUTUBE_URL = "https://www.youtube.com/watch?v=Rs2ORs1lNqY"
FILE_PATH = "output" # ダウンロードした音声ファイル名指定
# OpenAI API ====================================
os.environ["OPENAI_API_KEY"] = "sk-xxx"
client = OpenAI()
# YouTube動画をmp3に変換 ====================================
yt = YouTube(YOUTUBE_URL) # YouTube動画をロード
audio_stream = yt.streams.filter(only_audio=True).first() # オーディオストリームを取得
temp_file = audio_stream.download() # 一時ファイルを作成(オーディオをダウンロード)
audio_clip = AudioFileClip(temp_file) # 一時ファイルを読み込み
audio_clip.write_audiofile(FILE_PATH + ".mp3", codec="libmp3lame") # mp3ファイルに書き出し
os.remove(temp_file) # 一時ファイルを削除
# Whisper APIで文字起こし ====================================
audio_file= open(f"/content/{FILE_PATH}.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
content = transcript.text # 文字起こし出力
print(content)
方法3『yt-dlp』+『Whisper』
試せていないですが、こんな方法もあるみたいです。
Discussion