KOSEN{BLOG}について

youtube-transcript-apiの使い方

youtube-transcript-apiとは,Youtubeから動画の字幕をPythonを使ってPythonオブジェクトでダウンロードできるライブラリです. この記事では,youtube-transcript-apiの導入手順と基本的な使い方を説明する.

WindowsPCでのPythonの環境構築については以下を参考に.

Python環境構築-VScode-win10

導入手順

動画の字幕をPythonを使ってダウンロードするために必要なライブラリとしてyoutube-transcript-apiをインストールする.

youtube-transcript-api公式サイトにアクセス.→公式サイト

pip install youtube-transcript-api

のコマンドをターミナルで叩く.

 

CAUTION
ここで下のようなエラーが出たらanacondaなどを使って環境を変えてください. 私はターミナルでエラーが出たので,anaconda の環境を作成した上でそれを簡単に切り替えることができるVSCode上のターミナルで編集をおこないました.
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/urllib3-1.25.8.dist-info'
Consider using the `--user` option or check the permissions.

そのままpermissionを変更してもいいですが,こちらの方がバージョン変更などに強いのでanacondaを使用しましょう.

確認

$ pip install youtube-transcript-api
Collecting youtube-transcript-api
  Downloading https://files.pythonhosted.org/packages/21/81/c4ae5534b113f4938b482f360babbbe6fda550441a4af8e1007dba518586/youtube_transcript_api-0.3.1-py3-none-any.whl
Requirement already satisfied: requests in /Users/
・
・
・
Installing collected packages: youtube-transcript-api
Successfully installed youtube-transcript-api-0.3.1

 

インストールが成功したら,次は,基本的な使い方

インポート方法

 

Pythonのファイルを開いて,youtube_transcript_apiを使用するために以下のコードを書いてください.

from youtube_transcript_api import YouTubeTranscriptApi

 

字幕(手動)を取得するコード

from youtube_transcript_api import YouTubeTranscriptApi

transcript_list = YouTubeTranscriptApi.list_transcripts('yKrTY4AsB2c')

for transcript in transcript_list:
  print(transcript.fetch())
注意
デフォルトは’en’で字幕を取得する

また,video_idは,

https://www.youtube.com/watch?v=bxVv4NCUI18の動画の

v=以降のことで, ‘bxVv4NCUI18’ のようになります.

出力結果

このコードを実行すれば字幕をPythonオブジェクトで取得することができる.

[{'text': "Vanessa: Hi, I'm Vanessa from SpeakEnglishWithVanessa.com.", 'start': 0.32, 'duration': 3.83}, ・・・

日本語の手動字幕を取得したい場合

 

transcript_list = YouTubeTranscriptApi.list_transcripts('yKrTY4AsB2c',languages=['ja'])

languages = [‘ja’]の部分を追加すればよい.

memo
日本語で手動の字幕はなかなかないですが.

また優先順位をつけることもでき,

languages=[‘ja’,’en’]とすれば,

日本語→英語の優先順位で字幕を取得することができる.

 

手動字幕を翻訳して出力させる

英語の手動字幕を日本語に変更してみたいと思います.

使うものは,transcript.translate('ja').fetch()

from youtube_transcript_api import YouTubeTranscriptApi

transcript_list = YouTubeTranscriptApi.list_transcripts('yKrTY4AsB2c')

for transcript in transcript_list:
  #英語の字幕を日本語に翻訳して出力
  print(transcript.translate('ja').fetch())

これで完了します.

出力結果

[{'text': 'ヴァネッサ:こんにちは、SpeakEnglishWithVanessa.comのヴァネッサです。 ', 'start': 0.32, ・・・

これは,かなり使えるコマンドですね.

 

日本語の自動字幕を取得する

手動字幕がない場合が多いのでこのコマンドも使えると思います.

鍵となるのが transcript_list.find_generated_transcript(['ja'])

from youtube_transcript_api import YouTubeTranscriptApi

transcript_list = YouTubeTranscriptApi.list_transcripts('umelZf5_j80')

transcript = transcript_list.find_generated_transcript(['ja'])

print(transcript.fetch())

出力結果

 

[
    {
        'text': 'Hey there',
        'start': 7.58,
        'duration': 6.13
    },
    {
        'text': 'how are you',
        'start': 14.08,
        'duration': 7.58
    },
    # ...
]

出力結果は,辞書型のリストになっている.このままだと時間の要素が邪魔になるのでテキストだけを取得したい場合について説明すると,

字幕のテキストだけを取得

from youtube_transcript_api import YouTubeTranscriptApi

transcript_list = YouTubeTranscriptApi.list_transcripts('umelZf5_j80')

transcript = transcript_list.find_generated_transcript(['ja'])
#追加するコード↓
for d in transcript.fetch():
    print(d['text'])

これでテキストだけを取得できたと思います.

Pythonの辞書型やリストの詳しい説明はこの記事

PythonオブジェクトをJsonに変換したい場合はこの記事

が参考になると思います.


以上で,youtube-transcript-apiの使い方の紹介でした.かなり使いやすくライブラリを作ってるのでめちゃくちゃ簡単に字幕をダウンロードすることができるようになりました. これはyoutube-dlよりも使いやすいかも?!

youtube-dlを使って動画を簡単にダウンロードする方法[Mac版]

ほかにもいろいろオプションがあります.それについては公式サイトを参考にしてください.

参考 公式サイトyoutube-transcript-api

コメントを残す

メールアドレスが公開されることはありません。