YouTube データ活用

yt-dlpでYouTubeの動画・音声・字幕を保存する方法【Python/CLI・実行例付き】

2025年10月4日

本記事では、YouTubeのデータ取得・分析を行う際に欠かせない非公式ツール 「yt-dlp」 の基本的な使い方をまとめます。
動画・音声・字幕を効率的に保存できるほか、Whisperによる文字起こしや YouTube APIを使った分析の前処理にも活用可能です。

同シリーズの他記事(字幕取得文字起こしなど)では 公式APIベースの処理を扱っていますが、本記事は「素材を直接扱う」ことを目的としています。
CLI操作からPythonスクリプトまで、実務での自動処理パイプライン化を意識した設計を紹介します。

注意事項

  • 利用は 個人利用・研究用途 に限定してください。
  • 著作権者の許可なく動画・音声・字幕を再配布することは禁止されています。
  • YouTube利用規約に反する方法での利用は行わないでください。
  • ffmpegのインストールとPATH設定(Windows) が必須です。

youtube-dlとの違いと選び方

yt-dlpはyoutube-dlをベースに開発されたフォークであり、更新頻度と対応サイト数で上回っています。以下では代表的な違いをまとめます。

項目yt-dlpyoutube-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 にそのまま投入できる
  • 字幕はデフォルト .vttsrt 形式も選べる

次に読む

Whisperで文字起こしして要約する方法

ffmpegのインストールとPATH設定(Windows)

YouTubeの情報を取得する方法まとめ

-YouTube, データ活用