😀

【Python】YouTubeの動画を文字起こしする方法

2024/02/07に公開

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