0
4

More than 3 years have passed since last update.

Pythonを使ってYoutubeから字幕を抽出する。

Last updated at Posted at 2021-09-06

Youtubeを見ていると自動生成される字幕がでてくると思います。
今回はそれをテキスト化し抜き出してみます。

2021/09/06 さきほど動作確認したところ、エラーが出て動かなくなっていました。。
調べたところYouTube側のAPIの変更などが原因の用です。pytubeがissueを出していたのでバージョンを上げれば動作するかも。。
https://stackoverflow.com/questions/68680322/pytube-urllib-error-httperror-http-error-410-gone
これでうまくいくのかな?

LanguageReactorつかえば?

GoogleChromeのLanguageReactorというプラグインを使うと同じようなことが搭載されています。
字幕の開始時間はとれるんですが今回は終了時刻が欲しかったので別途Pythonで実装しました。

実装

import os
from pytube import YouTube


#字幕出力
def outContext(url):
    #動画のクラス取得
    yt = YouTube(url)
    # 動画の字幕の言語一覧
    print(yt.captions.get_by_language_code)
    # 指定した言語の字幕取得
    caption = yt.captions.get_by_language_code('a.ja')
    # srt形式で取得
    contexts = caption.generate_srt_captions()  
    # ファイルに出力
    f = open('../字幕テキスト/' + yt.video_id + '_字幕.srt', 'w')
    f.write(contexts)
    f.close()

common_url = "https://www.youtube.com/watch?v=sFPqmy1rOmA"
outContext(url)

出力結果

出力を試したものはひろゆきの動画です。
https://www.youtube.com/watch?v=sFPqmy1rOmA

1
00:00:02,500 --> 00:00:05,200
いっ

2
00:00:03,820 --> 00:00:06,640
にっ

3
00:00:05,200 --> 00:00:10,210
村

4
00:00:06,640 --> 00:00:15,340
45敗えっ

5
00:00:10,210 --> 00:00:17,470
8知らせを取れちゃったんですけどあのいつもながらラグが8秒ぐらいあるんですけど

6
00:00:15,340 --> 00:00:23,400
あの今日はな具があの

7
00:00:17,470 --> 00:00:28,320
だから2秒事から柴田はちょっとあの自分のことだから勝手にびっくりしました

8
00:00:23,400 --> 00:00:32,099
えっとですねあの中いつもこう予約して時間が今日5:55いう役だったんですけど

9
00:00:28,320 --> 00:00:38,910
ちょっとあの予約時間前に初めて見たですよね
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4