yt-dlp
は YouTube などの動画サイトから動画・音声・字幕を保存できる非公式ツールです。本記事では CLI(コマンドライン) と Python の両方で利用する方法を整理しました。音声抽出(WAV/MP3)、動画保存(MP4)、字幕取得(VTT)、プレイリスト保存、部分切り出しまで解説します。
Whisperによる文字起こしや YouTube API 分析の前処理にも活用可能です。
注意事項
- 利用は 個人利用・研究用途 に限定してください。
- 著作権者の許可なく動画・音声・字幕を再配布することは禁止されています。
- YouTube利用規約に反する方法での利用は行わないでください。
- ffmpegのインストールとPATH設定(Windows) が必須です。
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
形式も選べる