本記事では、YouTubeのデータ取得・分析を行う際に欠かせない非公式ツール 「yt-dlp」 の基本的な使い方をまとめます。
動画・音声・字幕を効率的に保存できるほか、Whisperによる文字起こしや YouTube APIを使った分析の前処理にも活用可能です。
同シリーズの他記事(字幕取得や 文字起こしなど)では 公式APIベースの処理を扱っていますが、本記事は「素材を直接扱う」ことを目的としています。
CLI操作からPythonスクリプトまで、実務での自動処理パイプライン化を意識した設計を紹介します。
注意事項
- 利用は 個人利用・研究用途 に限定してください。
- 著作権者の許可なく動画・音声・字幕を再配布することは禁止されています。
- YouTube利用規約に反する方法での利用は行わないでください。
- ffmpegのインストールとPATH設定(Windows) が必須です。
youtube-dlとの違いと選び方
yt-dlpはyoutube-dlをベースに開発されたフォークであり、更新頻度と対応サイト数で上回っています。以下では代表的な違いをまとめます。
| 項目 | yt-dlp | youtube-dl |
|---|---|---|
| 更新頻度 | 活発(週単位) | 停止気味 |
| 対応サイト | 1500+ | 1300+ |
yt-dlpとYouTube Data APIの使い分け
yt-dlpは、YouTubeの公式APIでは取得できない「実際の動画・音声・字幕ファイル」に直接アクセスできます。
一方、YouTube Data APIではチャンネルやコメントなどの メタデータを安全に取得できます。
分析用途では、yt-dlpで素材データを抽出 → Whisperで文字起こし → APIでメタ情報付与という 組み合わせが現実的です。
おすすめの活用シーン
- Vtuber配信のアーカイブ音声を文字起こしして分析したい
- 講義動画や勉強会をローカルで整理・検索したい
- コメント解析や視聴時間分析の前処理として音声抽出を行いたい
1. CLI(コマンドライン)で使う方法
① yt-dlpのインストール
pip install -U yt-dlp
yt-dlp --version
② 音声だけ保存(WAV / MP3)
Whisper用の音声抽出に便利です。
# WAV形式で保存
yt-dlp -x --audio-format wav -o "D:/youtube_downloads/%(title)s.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"
# MP3形式で保存
yt-dlp -x --audio-format mp3 -o "D:/youtube_downloads/%(title)s.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"
③ 動画を保存(MP4形式)
yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/b" --merge-output-format mp4 -o "D:/youtube_downloads/%(title)s.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"
④ 字幕を保存(日本語のみ)
yt-dlp --skip-download --write-subs --write-auto-sub --sub-langs "ja" --sub-format vtt -o "D:/youtube_downloads/%(title)s.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"
⑤ プレイリスト・部分保存
# プレイリスト丸ごと
yt-dlp -o "D:/youtube_downloads/%(playlist_title)s/%(playlist_index)03d - %(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLAYLIST_ID"
# プレイリストの一部(1~10番目)
yt-dlp --playlist-start 1 --playlist-end 10 -o "D:/youtube_downloads/%(playlist_title)s/%(playlist_index)03d - %(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLAYLIST_ID"
# 動画の一部分(1分~3分)
yt-dlp --download-sections "*00:01:00-00:03:00" -o "D:/youtube_downloads/%(title)s.%(ext)s" "https://www.youtube.com/watch?v=VIDEO_ID"
2. Pythonで使う方法
Pythonから呼び出すことで自動処理やデータ分析パイプラインに組み込めます。
① 保存場所設定(基本形)
import yt_dlp
VIDEO_ID = "XXXXXXXXXXX"
URL = f"https://www.youtube.com/watch?v={VIDEO_ID}"
OUTPUT = r"D:\youtube_downloads\%(title)s.%(ext)s"
ydl_opts = {"outtmpl": OUTPUT}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(URL, download=False)
print("title:", info.get("title"))
print("ext :", info.get("ext"))
② 音声のみ保存(WAV形式・Whisper向け)
import yt_dlp
VIDEO_ID = "XXXXXXXXXXX"
URL = f"https://www.youtube.com/watch?v={VIDEO_ID}"
OUTPUT = r"D:\youtube_downloads\%(title)s.%(ext)s"
ydl_opts = {
"format": "bestaudio/best",
"outtmpl": OUTPUT,
"postprocessors": [{
"key": "FFmpegExtractAudio",
"preferredcodec": "wav",
"preferredquality": "192",
}],
"retries": 10,
"extractor_retries": 10,
"sleep_requests": 1.5,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([URL])
③ 動画+字幕を保存(MP4+日本語字幕)
import yt_dlp
VIDEO_ID = "XXXXXXXXXXX"
URL = f"https://www.youtube.com/watch?v={VIDEO_ID}"
OUTPUT = r"D:\youtube_downloads\%(title)s.%(ext)s"
ydl_opts = {
"format": "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/b",
"merge_output_format": "mp4",
"outtmpl": OUTPUT,
"writesubtitles": True,
"writeautomaticsub": True,
"subtitleslangs": ["ja"],
"subtitlesformat": "vtt",
"retries": 10,
"extractor_retries": 10,
"sleep_requests": 1.5,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([URL])
④ プレイリスト保存(例:1〜10番目を音声MP3で保存)
import yt_dlp
PLAYLIST_ID = "XXXXXXXXXXX"
PLAYLIST_URL = f"https://www.youtube.com/playlist?list={PLAYLIST_ID}"
OUTPUT = r"D:\youtube_downloads\%(playlist_title)s\%(playlist_index)03d - %(title)s.%(ext)s"
ydl_opts = {
"outtmpl": OUTPUT,
"playliststart": 1,
"playlistend": 10,
"format": "bestaudio/best",
"postprocessors": [{
"key": "FFmpegExtractAudio",
"preferredcodec": "mp3",
"preferredquality": "192",
}],
"retries": 10,
"extractor_retries": 10,
"sleep_requests": 1.5,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([PLAYLIST_URL])
⑤ 時間指定保存(例:1分〜3分をMP4で切り出し)
import yt_dlp
VIDEO_ID = "XXXXXXXXXXX"
URL = f"https://www.youtube.com/watch?v={VIDEO_ID}"
OUTPUT = r"D:\youtube_downloads\%(title)s.%(ext)s"
ydl_opts = {
"outtmpl": OUTPUT,
"format": "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/b",
"merge_output_format": "mp4",
"download_sections": ["*00:01:00-00:03:00"],
"retries": 10,
"extractor_retries": 10,
"sleep_requests": 1.5,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([URL])
3. 実行結果・よくあるエラー・Tips
よくあるエラーと対処法
- 音声が出ない(無音MP4) →
ba[ext=m4a]を指定して再取得(Opus回避) - HTTP 429 Too Many Requests →
subtitleslangs=["ja"]に限定+sleep_requests - ffmpegが見つからない → ffmpegのインストールとPATH設定 を確認
- Impersonation warning → 無視してOK(特殊ライブラリ未導入の警告)
Tips
%(uploader)s/%(upload_date)s - %(title)s.%(ext)sで自動フォルダ分け可能.wav保存は Whisper にそのまま投入できる- 字幕はデフォルト
.vtt。srt形式も選べる