高度な表示のできる字幕の存在
YouTubeでこのような字幕が表示される動画を見たことがありますか?
自分でもこんな字幕を作ってみたい!
YouTube独自の字幕ファイル(YTTファイル)について調べていたところ、次の記事を見つけました:
この記事ではYTTファイルの仕様について詳しく解説しています。
しかし、この記事ではYTTファイルのダウンロード方法が記載されていませんでした。
YTTファイルのダウンロード方法
必要な環境
- OS: Windows 11 Pro 22H2
- Python: 3.9.16
- yt-dlp: 2023.7.6
- VSCode: 1.81.1
1. Python環境の構築
Pythonの環境構築については、こちらの記事などを参考にしてください。
2. yt-dlpのインストール
以下のコマンドを実行して、yt-dlpをインストールします。
$ pip install yt-dlp
3. コードを書く
以下のコードをyoutube_subtitle.py
という名前で保存します。
from yt_dlp import YoutubeDL
import requests
id = 'https://www.youtube.com/watch?v=vSHpZeCu8eg' # 'vSHpZeCu8eg' のみでも可
language = 'ja'
subtitle_track_num = 3 # 必要に応じて特定の字幕トラックを選択できます
# YoutubeDLのインスタンスを初期化
ydl_opts = {
'writesubtitles': True,
'allsubtitles': True,
'subtitleslangs': [language],
}
with YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(id, download=False)
# 日本語の字幕が存在するかを確認
if 'subtitles' in info_dict and language in info_dict['subtitles']:
subtitles_info = info_dict['subtitles'][language]
# 字幕トラックが利用可能かを確認
if subtitles_info:
subtitle_track = subtitles_info[subtitle_track_num]
# 字幕の内容を取得
subtitle_content = requests.get(subtitle_track['url']).text
# 動画のタイトルから特殊文字を削除
title = ''.join(char for char in res["title"] if char.isalnum())
# 字幕の内容をファイルに保存
with open(f'{id}_{title}_{language}.{ext}.ytt', 'w', encoding='utf-8') as subtitle_file:
subtitle_file.write(subtitle_content)
print('\033[32m' + 'success : 日本語の字幕をダウンロードして保存しました。' + '\033[0m')
else:
print('\033[31m' + 'failure : 日本語の字幕トラックが見つかりませんでした。' + '\033[0m')
else:
print('\033[31m' + 'failure : この動画には日本語の字幕が利用できません。' + '\033[0m')
4. 実行する
スクリプトを実行すると、指定したYouTube動画の日本語字幕がダウンロードされ、YTTファイルとして保存されます。
保存されたYTTファイルを適用すると、表示が少し崩れることがありますが、ほぼ元の字幕と一致します。
最後に
yt-dlpはYouTubeの仕様変更で動かなくなることがあります。その場合、開発者が対応するまで待ちましょう。
また、ダウンロードしたコンテンツは個人利用の範囲内で楽しみましょう。
この記事が、YouTubeの字幕をダウンロードして活用する際の参考になれば幸いです。