特にYouTube動画関連で分析用データを取得したい場面があります。
本記事では、ランサーズ案件にてYouTubeから字幕ファイル生成を依頼されたため備忘録として記載します。
- yt-dlpを利用するまでの環境構築方法
- yt-dlpにおけるオプションの使い方
- yt-dlpを利用した字幕ファイルの生成・ダウンロード方法
- SIer/Web系企業での実務経験があるフリーランスエンジニア
- プログラミングスクールでの講師実績あり
- HR領域によるエンジニア特化の採用代行を業務委託で兼務
yt-dlpとは
YouTube・ニコニコ動画や様々なSNSなどの動画をダウンロードするために開発されたライブラリが「yt-dlp」です。
yt-dlpは、各配信サービスに合わせて機能追加・修正が実施されており、画像・動画・音声などのダウンロードを可能にしています。
また、オプションを利用して指定時間の範囲を取り決め、切り抜き用のダウンロードができるなど、動画編集前の効率的なデータ整形にも役立ちます。
yt-dlpのインストール方法
ここでは、環境としてプログラミング言語Pythonを前提とし、インストールにおける操作を実施しています。
自身で利用したいフォルダにパスを通し、pipライブラリにてyt-dlpをインストールします。
pip install yt-dlp
yt-dlpのインストール実行画面
Collecting yt-dlp
Downloading yt_dlp-2023.3.4-py2.py3-none-any.whl (2.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 4.1 MB/s eta 0:00:00
Collecting mutagen (from yt-dlp)
Downloading mutagen-1.46.0-py3-none-any.whl (193 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 193.6/193.6 kB 7.5 MB/s eta 0:00:00
Collecting pycryptodomex (from yt-dlp)
Downloading pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl (1.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 6.2 MB/s eta 0:00:00
Collecting websockets (from yt-dlp)
Downloading websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl (120 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.0/121.0 kB 6.7 MB/s eta 0:00:00
Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (from yt-dlp) (2021.5.30)
Collecting brotli (from yt-dlp)
Downloading Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl (421 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 421.1/421.1 kB 8.5 MB/s eta 0:00:00
Installing collected packages: brotli, websockets, pycryptodomex, mutagen, yt-dlp
Successfully installed brotli-1.0.9 mutagen-1.46.0 pycryptodomex-3.18.0 websockets-11.0.3 yt-dlp-2023.3.4
Successfullyが表示されていれば、インストール完了です。
yt-dlpの使い方
ここでは、字幕ファイルの収集案件(ランサーズ)にて利用したオプションを記載しています。
今後もYouTube関連の動画データ収集案件が増加する傾向なため、利用するオプションが増えるたびに追記しようと思います。
オプション名 | オプションの説明 |
–skip-download | 動画ダウンロードは実施しないが関連ファイルの書き込みは実施する |
–write-auto-sub | YouTube動画にて自動で字幕ファイルを生成する |
–sub-lang LANGS | 字幕言語を指定する |
–get-title | 動画タイトルを取得する |
–get-id | 動画IDを取得する |
上記のオプションはCLIにて利用するため、Pythonで扱う場合にsubprocessを活用します。
yt-dlpによるvttファイル(字幕)のダウンロード
それでは、yt-dlpを利用したvttファイル(字幕ファイル)のダウンロードについて解説します。
以下の流れでPythonプログラムを作成していきます。
- 必要な各種ライブラリ
- yt-dlpによる字幕ファイルダウンロードPythonプログラム
- ダウンロードPythonプログラムの実行結果
必要な各種ライブラリ
以下で、本プログラムで使用するライブラリ・モジュールを記載します。
ライブラリ名 | 説明 |
---|---|
subprocess | PythonプログラムにてCLIコマンドを実行する |
re | ファイルエラーを回避するために正規表現で整形 |
os | 指定フォルダへアクセス |
yt-dlpによる字幕ファイルダウンロードPythonプログラム
ここから本プログラムの解説になります。
【Python】字幕ファイルダウンロードプログラム
import subprocess
import re
import os
def download_vtt(url, folder):
command = ['yt-dlp', '--skip-download', '--write-auto-sub', '--sub-lang', 'ja', '--get-title', '--get-id', url]
output = subprocess.check_output(command, universal_newlines=True)
video_title = re.sub(r'[^\w\s-]', '', output.splitlines()[0].strip())
video_id = output.splitlines()[1].strip()
vtt_filename = f'{video_title}_{video_id}'
vtt_path = os.path.join(folder, vtt_filename)
vtt_download_command = ['yt-dlp', '--skip-download', '--write-auto-sub', '--sub-lang', 'ja', '--output', vtt_path, url]
subprocess.call(vtt_download_command)
# ダウンロードフォルダのパス
download_folder = '/path/to/download/folder'
# 動画のURLを指定してvttファイルをダウンロード
video_url = 'https://www.youtube.com/watch?v=TARGET_VIDEO_ID'
download_vtt(video_url, download_folder)
上記のコードでは、download_vtt関数を定義しています。
まず、yt-dlpを実行して動画のタイトルとIDを取得します。
その後、動画タイトルとIDを組み合わせてvttファイルの名前を作成し、指定したフォルダ内に保存するためのパスを作成します。
最後に、yt-dlpを再度実行してvttファイルをダウンロードし、指定したパスに保存します。
指定するダウンロードフォルダのパスをdownload_folder変数に設定し、動画のURLをvideo_url変数に指定してdownload_vtt関数を呼び出すことで、vttファイルを指定したフォルダ内に保存できます。
ダウンロードフォルダが存在しない場合は、事前にフォルダを作成する必要があります。
また、適切なアクセス権限があることを確認してください。
ダウンロードPythonプログラムの実行結果
[youtube] Extracting URL: https://www.youtube.com/watch?v=LiaW-pWeqio
[youtube] LiaW-pWeqio: Downloading webpage
[youtube] LiaW-pWeqio: Downloading android player API JSON
[info] LiaW-pWeqio: Downloading subtitles: ja
[info] LiaW-pWeqio: Downloading 1 format(s): 248+251
[info] Writing video subtitles to: download/勉強する意義 三大難関資格を持つ河野玄斗が語る学びの真価_LiaW-pWeqio.vtt.ja.vtt
[download] Destination: download/勉強する意義 三大難関資格を持つ河野玄斗が語る学びの真価_LiaW-pWeqio.vtt.ja.vtt
[download] 100% of 125.25KiB in 00:00:00 at 438.25KiB/s
特定の動画IDをセットすることで、vttファイル(字幕ファイル)を取得できました。
for文などを利用することで、一括ダウンロードプログラムも実装できるため、大量のYouTube動画データを取得したい場合は活用してみてください。
コメント