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
のコマンドをターミナルで叩く.
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())
また,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’]の部分を追加すればよい.
また優先順位をつけることもでき,
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に変換したい場合はこの記事
が参考になると思います.
ファイルに出力したい方
from youtube_transcript_api import YouTubeTranscriptApi
transcript_list = YouTubeTranscriptApi.list_transcripts('umelZf5_j80')
transcript = transcript_list.find_generated_transcript(['ja'])
#追加するコード↓
file = open('sample.txt', mode='w', encoding='utf_8')
for d in transcript.fetch():
text = d['text']
file.write(text)
追加するコードから追加してあげればできます。
「sample.txt」はファイル名です。
ファイル形式さえ合ってれば変えれます。
また、ファイルの拡張子を .py とか .docx 、 .xls などにすると任意のファイル形式で保存可能です。
以上で,youtube-transcript-apiの使い方の紹介でした.かなり使いやすくライブラリを作ってるのでめちゃくちゃ簡単に字幕をダウンロードすることができるようになりました. これはyoutube-dlよりも使いやすいかも?!
youtube-dlを使って動画を簡単にダウンロードする方法[Mac版]ほかにもいろいろオプションがあります.それについては公式サイトを参考にしてください.
参考 公式サイトyoutube-transcript-api