【Python】YouTube動画におけるトランスクリプト・字幕の取得

【Python】YouTube動画におけるトランスクリプト・字幕の取得 プログラミング

「YouTube動画の字幕を全文取得したい」
「Seleniumなどを使わずに、とにかく簡単にトランスクリプトを取得したい」

このような場合には、youtube-transcript-apiがオススメです。
この記事では、youtube-transcript-apiについて解説しています。

本記事の内容

  • youtube-transcript-apiとは?
  • youtube-transcript-apiのシステム要件
  • youtube-transcript-apiのインストール
  • youtube-transcript-apiの動作確認

それでは、上記に沿って解説していきます。

youtube-transcript-apiとは?

youtube-transcript-apiとは、YouTube動画のトランスクリプト・字幕を取得できるPythonライブラリです。
自動生成された字幕にも対応しています。

とにかく、簡単に動かすことができます。
APIキーやSeleniumのようなヘッドレスブラウザも不要です。

ただし、注意点があります。
YouTube側が仕様を変更すると、動かなくなる可能性があるということです。

まあ、外部システムに依存する以上は仕方がないでしょうね。
それに公式のAPIを利用している訳でもありませんし。

そのような際には、ライブラリの開発者は修正するように努力は行うと言ってくれています。

以上、youtube-transcript-apiについて説明しました。
次は、youtube-transcript-apiのシステム要件を説明しました。

youtube-transcript-apiのシステム要件

現時点(2023年10月21日)でのyoutube-transcript-apiの最新バージョンは、0.6.1となります。

更新は、YouTube側の仕様変更に合わせてという感じでしょうかね。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.5
  • Python 3.6
  • Python 3.7
  • Python 3.8

しかし、これは参考になりません。
おそらく、setup.pyの更新が漏れているだけでしょう。

pure Pythonであるため、バージョンを問わずに動くはずです。
実際、Python 3.10では問題なく動いています。

とりあえず、利用する側としてはPython公式開発サイクルに従いましょう。

バージョンリリース日サポート期限
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月
3.112022年10月24日2027年10月
3.122023年10月2日2028年10月

Python公式開発サイクルによると、Python 3.8以降が対象となります。
よって、ここではPython 3.8以降を推奨しておきます。

以上、youtube-transcript-apiのシステム要件を説明しました。
次は、youtube-transcript-apiをインストールします。

youtube-transcript-apiのインストール

検証は、次のバージョンのPythonで行います。

> python -V
Python 3.10.4

まずは、現状のインストール済みパッケージを確認しておきます。
その前に、pipとsetuptoolsの更新を実施しておきましょう。

python -m pip install --upgrade pip setuptools

インストール済みパッケージを確認した結果は、以下。

> pip list
Package    Version
---------- -------
pip        23.3
setuptools 68.2.2
wheel      0.38.4

では、youtube-transcript-apiのインストールです。
youtube-transcript-apiのインストールは、以下のコマンドとなります。

pip install youtube-transcript-api

youtube-transcript-apiのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

> pip list
Package                Version
---------------------- ---------
certifi                2023.7.22
charset-normalizer     3.3.0
idna                   3.4
pip                    23.3
requests               2.31.0
setuptools             68.2.2
urllib3                2.0.7
wheel                  0.38.4
youtube-transcript-api 0.6.1

ネットワークアクセスを行うために必要なライブラリがインストールされていますね。
未知のライブラリなどは確認できません。

以上、youtube-transcript-apiのインストールを説明しました。
次は、youtube-transcript-apiの動作確認を説明します。

youtube-transcript-apiの動作確認

youtube-transcript-apiの動作確認を行います。
おそらく最も需要があるであろう処理を対象にします。

その処理とは、字幕データをすべて取得することになります。
そのコードは、以下。

# 必要なライブラリをインポート
from youtube_transcript_api import YouTubeTranscriptApi

# 与えられたYouTubeのビデオURLから日本語のトランスクリプトを取得する関数
def get_transcripts(video_url):
    # URLからビデオIDを抽出
    video_id = video_url.split('v=')[-1]
    try:
        # YouTubeTranscriptApiを使用して日本語のトランスクリプトを取得
        transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])
        return transcript
    except Exception as e:
        # トランスクリプトの取得に失敗した場合のエラーメッセージを表示
        print(f"Error: {e}")
        return None

# 取得したいビデオのURL
video_url = "**YouTube動画のURL**"
# 上記の関数を使用してトランスクリプトを取得
transcripts = get_transcripts(video_url)

# トランスクリプトの各項目からテキスト部分を取り出し、スペースで連結
combined_text = " ".join([item['text'] for item in transcripts])

# トランスクリプトをテキストファイルに保存
with open('transcript.txt', 'w', encoding='utf-8') as file:
    file.write(combined_text)

# 保存が完了したことをユーザーに通知
print("Transcript saved to transcript.txt")

今回は、以下の動画を対象にします。
https://www.youtube.com/watch?v=GCwEIvzxPSc

この場合、コード上は以下のように書き換えます。

# 取得したいビデオのURL
video_url = "https://www.youtube.com/watch?v=GCwEIvzxPSc"

そして、コードを実行すると「transcript.txt」というファイルを作成します。
プログラムと同じディレクトリ上に保存されています。

transcript.txtを開いてみましょう。
その中から、最初と最後の部分を確認します。

最初の部分

最後の部分

そして、YouTube上の文字起こし機能で最初と最後の方を確認します。

最初の部分

最後の部分

問題ありませんね。
動画から字幕データをすべて取れていることを確認できました。

追記 2032年10月22日
この記事で紹介したコードをもとにデスクトップアプリを開発しています。

以上、youtube-transcript-apiの動作確認を説明しました。

タイトルとURLをコピーしました