【Python特化】おすすめのオンラインプログラミングスクール

【Python】yt-dlpによる字幕ファイルダウンロードと使い方

yt-dlp-vtt-download

特に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-subYouTube動画にて自動で字幕ファイルを生成する
–sub-lang LANGS字幕言語を指定する
–get-title動画タイトルを取得する
–get-id動画IDを取得する
yt-dlpの各オプション名と説明

上記のオプションはCLIにて利用するため、Pythonで扱う場合にsubprocessを活用します。

yt-dlpによるvttファイル(字幕)のダウンロード

それでは、yt-dlpを利用したvttファイル(字幕ファイル)のダウンロードについて解説します。

以下の流れでPythonプログラムを作成していきます。

プログラム実行までの手順と結果
  • 必要な各種ライブラリ
  • yt-dlpによる字幕ファイルダウンロードPythonプログラム
  • ダウンロードPythonプログラムの実行結果

必要な各種ライブラリ

以下で、本プログラムで使用するライブラリ・モジュールを記載します。

ライブラリ名説明
subprocessPythonプログラムにて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動画データを取得したい場合は活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

sugiのアバター sugi SUGI

【経歴】玉川大学工学部卒業→新卒SIer企業入社→2年半後に独立→プログラミングスクール運営/受託案件→フリーランスエンジニア&SEOコンサル→Python特化のコンテンツサイトJob Code運営中

コメント

コメントする

目次