yt-dlpはYouTubeを含む1,400以上のサイトに対応する動画・音声ダウンローダーだ。★181,560(2026-08-01実測)・Unlicense。youtube-dlのフォークとして2020年ごろに始まり、いまは対応サイト数も更新頻度も本家を大きく超えている。本記事はインストール → フォーマット選択 → エラー対処とアップデート → 用途別コマンド → 脆弱性 → 法律 → AI連携の順にまとめた2026年版のガイドだ。
URL TO FILE中で起きていること
URLを渡すと、サイトごとのextractorが形式を選んで保存まで運ぶ
-
URL
1,400以上のサイトに対応
-
Extractor
サイト固有。Cookie・TLS偽装もここ
-
形式の選択
-f で画質・音声を指定
-
ダウンロード
HTTP / HLS / DASH
-
後処理
ffmpeg・SponsorBlock
30秒でわかるyt-dlp
- ・1,400以上のサイトに対応する動画・音声ダウンローダー。Unlicense・★181,560(2026-08-01)
- ・最高画質は
-f "bv*+ba/b"。-f bestだと720p止まりになることがある - ・エラーの多くは更新で直る。ただしpipで入れた場合
yt-dlp -Uは更新しない(2026-08-26実測) - ・2026年に CVE-2026-26331(CVSS 8.8)と CVE-2026-55404(CVSS 7.5)を修正。修正版は 2026.02.21 と 2026.07.04
- ・Python 3.10以上が必須、推奨は3.11へ引き上げ予告済み
AI時代の自動化ツール全体の比較はAI自動化ツール|ノーコードからコードまで2026年版の比較と選び方にまとめてある。本記事はその中の「動画・音声を取り込む層」を扱う。
法令遵守の前提
- ・ダウンロードは各サイトの利用規約・著作権法に従う。私的利用を超えた配布は犯罪になりうる
- ・日本では2021年の改正以降、違法配信と知りながら音楽・映像をダウンロードする行為は刑事罰の対象(詳しくは後半)
yt-dlpのインストールと基本コマンド
導入方法は4通り。どれで入れたかで更新コマンドが変わるので、最初に決めておく。
pip install yt-dlp # Python(要3.10+)。隔離したいなら pipx install yt-dlp
brew install yt-dlp # macOS / Linux
sudo apt install yt-dlp # Debian / Ubuntu
winget install yt-dlp # Windows(PATH まで自動設定。scoop install yt-dlp でも可)
# 音声抽出・結合・切り出しに使う ffmpeg(実質必須)
brew install ffmpeg # macOS
sudo apt install ffmpeg # Linux
Python 3.9以下では最新版が動かない(2025年10月のPython 3.9 EOLに合わせて3.10必須化)。CentOS 7やAmazon Linux 2の古い環境は、pyenvで3.10以上を並べて入れる。
python3 --version
pyenv install 3.12.7 && pyenv local 3.12.7 && pip install yt-dlp
日常的に使うオプションは次の表でほぼ足りる。
| やりたいこと | コマンド/オプション | 補足 |
|---|---|---|
| 最高画質で保存 | yt-dlp -f "bv*+ba/b" URL |
ffmpegで自動結合 |
| 一体型で手軽に(720p) | yt-dlp -f 22 URL |
ffmpeg不要 |
| 音声だけmp3 | yt-dlp -x --audio-format mp3 URL |
ffmpeg必須 |
| フォーマット一覧 | yt-dlp -F URL |
ID・解像度・コーデック |
| 1080p以下に制限 | yt-dlp -f "bv*[height<=1080]+ba/b" URL |
上限指定 |
| 日本語字幕をSRTで | yt-dlp --write-subs --sub-langs ja --convert-subs srt URL |
自動字幕は --write-auto-subs |
| プレイリスト全体 | yt-dlp --yes-playlist URL |
範囲は --playlist-items |
| ログイン限定動画 | yt-dlp --cookies-from-browser chrome URL |
ブラウザは完全終了 |
| 取得済みをスキップ | yt-dlp --download-archive archive.txt URL |
中断しても再開できる |
| ファイル名を整える | yt-dlp -o "%(title)s.%(ext)s" URL |
出力テンプレート |
| 情報だけ取る | yt-dlp --write-info-json --skip-download URL |
メタデータ |
| 区間だけ切り出し | yt-dlp --download-sections "*00:30-01:00" URL |
クリップ |
| 並列ダウンロード | yt-dlp -N 4 URL |
断片を4本並列 |
yt-dlpのフォーマット選択:137・136・22の意味
「最高画質のはずが音声が無い」「なぜか360pになる」は、ほぼフォーマット選択が原因だ。まず -F でそのURLに用意された形式を一覧する。
yt-dlp -F https://www.youtube.com/watch?v=VIDEO_ID
yt-dlp -f "137+140" URL # 映像137 + 音声140 を明示して結合
yt-dlp -f "bv*[height<=1080]+ba/b" URL # 1080p以下の最良映像+最良音声、無理なら一体型
MUXED OR SPLITフォーマットの選び方
1080p以上は映像と音声が別ストリーム。結合にffmpegが要る
一体型
-f 22 / -f 18
- 22 は720p、18 は360p
- ffmpeg 不要で手軽
- -f best はここから選ぶ
映像+音声を結合
-f "bv*+ba/b"
- 137(1080p映像)+140(音声)など
- ffmpeg で自動マージ
- /b で一体型にフォールバック
| コード | 内容 | 解像度 | 用途 |
|---|---|---|---|
18 |
映像+音声の一体型(mp4) | 360p | 手軽だが低画質 |
22 |
映像+音声の一体型(mp4) | 720p | 一体型で最も使いやすい |
137 / 136 |
映像のみ(mp4/H.264) | 1080p / 720p | 音声との結合が必要 |
248 |
映像のみ(webm/VP9) | 1080p | 高圧縮・要ffmpeg |
140 / 251 |
音声のみ(m4a/AAC・webm/Opus) | — | 音声抽出の定番 / 高音質 |
YouTubeは高画質になるほど映像と音声が別ストリーム(DASH配信)になる。bv* はbestvideo、ba はbestaudio、末尾の /b は「結合できなければ一体型にフォールバック」の意味だ。-f best は「一体型の中での最良」を選ぶため、DASHの1080p/4Kが候補から外れて720p止まりになることがある。
yt-dlpのエラー別対処とアップデート
対象サイトの仕様は日々変わるので、エラーは避けられない。不具合の体感8割は更新で直る。
| エラーメッセージ | 主な原因 | 一次対処 |
|---|---|---|
Sign in to confirm you're not a bot |
YouTubeのbot判定 | 更新 → --cookies-from-browser → --impersonate |
HTTP Error 403: Forbidden |
署名・トークン失効/地域制限 | 更新、--impersonate chrome、時間を空ける |
Video unavailable |
限定公開・削除・地域制限 | cookiesを渡す/--geo-bypass/URL再確認 |
No supported JavaScript runtime |
JSランタイム未導入(2026年の新仕様) | Denoを入れる |
Unable to extract ... |
extractorがサイト変更に未追従 | 最新版/nightlyへ更新、Issue確認 |
HTTP Error 429: Too Many Requests |
レート制限 | --limit-rate/--sleep-interval |
ffmpeg not found |
ffmpeg未導入 | ffmpegを入れる |
Unable to load cookies |
ブラウザ起動中でDBが施錠 | ブラウザを完全終了して再実行 |
2026年、YouTubeの一部フォーマットはJavaScriptによる署名計算を要求するようになり、yt-dlpは外部のJSランタイムを呼ぶ設計に変わった。Denoを入れれば自動で検出され、オプションは要らない。
# JSランタイム(Deno)
curl -fsSL https://deno.land/install.sh | sh # macOS / Linux(brew install deno でも可)
winget install DenoLand.Deno # Windows
# bot判定・403が消えないとき
yt-dlp --cookies-from-browser chrome URL # ログイン状態を引き継ぐ
yt-dlp --impersonate chrome URL # TLSフィンガープリントを偽装(curl-cffi)
yt-dlp -v URL 2>&1 | head -40 # 冗長ログで原因を特定
入れ方ごとの更新コマンド
| 導入方法 | 更新コマンド |
|---|---|
| バイナリ(単体exe) | yt-dlp -U |
| pip | pip install --upgrade yt-dlp |
| pipx | pipx upgrade yt-dlp |
| Homebrew | brew upgrade yt-dlp |
| nightly(最新extractor) | yt-dlp --update-to nightly(戻すときは --update-to stable) |
YouTubeの仕様変更直後で安定版が追いついていないときはnightlyが効く。
【実測】pipで入れたyt-dlpに -U を打つと
「更新=yt-dlp -U」と覚えがちだが、pipで導入した場合 -U は更新しない。2026年8月26日、pipで古い版(2026.07.04)を入れて確かめた。
Current version: [email protected] from yt-dlp/yt-dlp
Latest version: [email protected] from yt-dlp/yt-dlp
ERROR: You installed yt-dlp with pip or using the wheel from PyPi; Use that to update
PIP AND -U更新の実測
pipで入れたyt-dlpは-U では更新されない
100
yt-dlp -U の終了コード
新版は検出するが更新は拒否
07.04版
-U の後も 2026.07.04
実行前と変わらず
08.19版
pip install -U で 2026.08.19
終了コード0で更新
新しい版は検出しているのに自己更新は拒否する。終了コード100なのでcronやCIで失敗として拾えるが、yt-dlp -U | tee log のようにパイプに通すと $? はパイプ末尾の終了コードになり、100が消える。本稿でも最初この書き方で「0」と誤読しかけた。パイプを挟むなら PIPESTATUS(bash)/pipestatus(zsh)を見るか、ファイルへリダイレクトしてから $? を取る。
which -a yt-dlp # どこの yt-dlp が動いているか
pip show yt-dlp 2>/dev/null | head -3 # 出力があれば pip / pipx 管理
用途別コマンド:プラットフォーム・cookies・音声・一括取得
サイトごとに効くオプションが違う。主要プラットフォームの型は次のとおり。
| プラットフォーム | 典型コマンド | 補足 |
|---|---|---|
| YouTube | yt-dlp -f "bv*+ba/b" URL |
Shorts・ライブアーカイブも同様 |
| TikTok | yt-dlp URL |
透かし無し版を自動選択 |
| X(旧Twitter) | yt-dlp --cookies-from-browser chrome URL |
多くの動画でログインが要る |
| Twitch(VOD) | yt-dlp URL |
長尺は --download-sections |
| bilibili | yt-dlp URL |
一部は地域/ログイン制限 |
| ニコニコ動画 | yt-dlp --cookies-from-browser firefox URL |
ログイン必須が多い |
yt-dlp --cookies-from-browser chrome URL |
ほぼログイン必須 |
メンバー限定・ログイン必須の動画は、ブラウザのCookieを渡せば自分が正規にアクセスできる範囲で取得できる。読めないときはブラウザを完全終了する(起動中はCookie DBがロックされる)。Chromeは近年Cookie暗号化が強化され、OSによってはキーチェーン許可が要る。不安定なら拡張機能で書き出したNetscape形式の cookies.txt を渡す。
yt-dlp --cookies-from-browser "chrome:Profile 1" URL # chrome / firefox / brave / safari 等。プロファイル指定も可
yt-dlp --cookies cookies.txt URL # ファイル方式
# 音声・字幕・メタデータ
yt-dlp -x --audio-format mp3 --audio-quality 0 URL # 0=最高品質。flac / opus も可
yt-dlp --write-subs --write-auto-subs --sub-langs ja --convert-subs srt URL
yt-dlp --embed-subs --sub-langs ja URL # 字幕をソフトサブで埋め込む
yt-dlp --embed-thumbnail --embed-chapters --embed-metadata URL
# プレイリスト・チャンネル
yt-dlp --playlist-items 3-10 "PLAYLIST_URL" # 1,5,8 のような指定も可
yt-dlp --download-archive archive.txt --no-overwrites \
-o "%(channel)s/%(upload_date)s_%(title)s.%(ext)s" "CHANNEL_URL"
# 速さと穏やかさ
yt-dlp --concurrent-fragments 8 URL # 断片を並列取得
yt-dlp --downloader aria2c --downloader-args "aria2c:-x16 -k1M" URL
yt-dlp --limit-rate 2M --sleep-interval 5 --max-sleep-interval 15 URL
--download-archive は成功したIDを追記し、次回は未取得分だけを取る。チャンネルを毎日差分取得する運用の土台になる。aria2c連携は速いが、過度な並列はレート制限やBANを招くので、業務では --limit-rate と併用する。--playlist-random で順番を散らすのもレート制限対策になる。
CLIが苦手なら、yt-dlpをエンジンにしたGUIもある(Stacher・Downie(有料)・ブラウザで使うcobalt・端末内のyt-dlp-tui)。細かいフォーマット制御やCI連携はCLIに分がある。当サイトではyt-dlpをGUIで包んだyouwee(yt-dlp AI GUI)も解説している。
yt-dlpの脆弱性:CVE-2026-26331とCVE-2026-55404
2026年は2件の脆弱性が修正された。どちらも該当オプションを使っていなければ直接の影響はないが、古い版を固定したCIやDockerイメージは意外に多い。
| 項目 | CVE-2026-26331 | CVE-2026-55404 |
|---|---|---|
| アドバイザリ | GHSA-g3gw-q23r-pgqm | GHSA-6v4j-43gg-vj32 |
| 深刻度 | CVSS 8.8(High) | CVSS 3.1 で 7.5(High)AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 公開日 | 2026-02-24 | 2026-07-24 |
| 影響範囲 | 2023.06.21 以上 2026.02.21 未満 |
2026.07.04 未満 |
| 対象オプション | --netrc-cmd |
--write-link / --write-url-link / --write-desktop-link |
| 何が起きるか | URL由来の「machine」値を subprocess.Popen(shell=True) に渡しており、シェルコマンドを注入できた |
細工したメタデータで、生成される .url / .desktop に任意のコマンドを注入できる |
| 修正 | machine値を安全な文字集合に限定、想定外の文字はエラー停止 | 2026.07.04 |
CVE-2026-55404の UI:R(ユーザー操作が必要)は、生成されたショートカットを開く一手を指す。
CVE-2026-55404は「更新して終わり」にならない
- ・ダウンロード時点では何も起きず、後から生成物を開いたときに発火する
- ・過去に
--write-link系で集めたアーカイブが手元にあれば、既存の.url/.desktopの中身を確かめるまでが対応 - ・
.urlは本来[InternetShortcut]とURL=だけ。Exec=に想定外のコマンドがあれば開かずに削除する
# 1. バージョンが 2026.07.04 以上か(2026.02.21 未満なら両方に該当)
yt-dlp --version
# 2. 過去のコマンド履歴に --write-link 系を使った形跡がないか
grep -rnE -- '--write-(link|url-link|desktop-link)' \
~/.bash_history ~/.zsh_history ./scripts 2>/dev/null
# 3. 手元のショートカットファイルの中身を検査する
find . -type f \( -name '*.url' -o -name '*.desktop' \) -print0 \
| xargs -0 grep -nE '^(Exec|URL)=' 2>/dev/null
修正版 2026.07.04 のリリースノートには、環境要件の予告も2つ載っている。
・推奨されるPythonの最低バージョンが3.11に引き上げ。理由は「Python 3.10が2026年10月にEOLを迎えるため、まもなくサポートを打ち切る」
・公式のWindowsリリースバイナリは、まもなくWindows 10以降を要求する
3.10で運用している環境は、CVE対応の更新と同時に3.11以降への移行計画を立てておくと手戻りが少ない。CIやDockerで版を固定しているなら、再ビルドまでを対応に含める。
yt-dlpは違法か:ツールは合法、違法になるのは「何を落とすか」
yt-dlpはUnlicenseの公開ソフトウェアで、インストールも所持も日本の法律で禁じられていない。問題になるのは常に取得する対象と、権利者の許諾だ。
文化庁の解説によれば、令和2年の著作権法改正で「侵害コンテンツのダウンロード違法化」の対象が広がり、2021年1月1日に施行された。根拠は著作権法第30条第1項第4号・第2項、罰則は第119条第3項第2号など。
・違法にアップロードされた著作物と知りながらダウンロードする行為は、私的使用目的でも違法
・2021年改正で対象が音楽・映像から著作物全般(漫画・書籍・論文・プログラム等)へ広がった。音楽・映像はそれ以前(第30条第1項第3号)から対象
・権利者自身が公開している動画や、許諾のある配信の取得はこれに当たらない
著作権法とは別に利用規約がある。YouTubeの規約は、サービスが許可する場合(オフライン再生など)や権利者の書面許諾がある場合を除き、ダウンロードを禁じている。規約違反は刑事罰ではなく契約上の問題(アカウント停止など)だが、「著作権法に触れない=規約上も自由」ではない。
| 用途 | 著作権法上の扱い | 規約上の扱い |
|---|---|---|
| 自分がアップロードした動画 | 権利者なので問題なし | 本人なので許諾あり |
| CC等ライセンス動画 | ライセンス条件の範囲で可 | ライセンス表示に従う |
| 権利者から明示の許諾を得た素材 | 許諾の範囲で可 | 書面許諾があれば可 |
| 自社プラットフォームの自社動画 | 自社が権利者 | 自社契約に依存 |
| 違法アップロードと知りながらの取得 | 第30条第1項第4号に抵触 | 規約違反 |
本節は一次情報の所在を示すもので、個別の事案についての法的助言ではない。迷う用途は条文(e-Gov法令検索の著作権法)と文化庁の解説にあたるか、専門家に確認してほしい。
yt-dlpをAI・自動化に組み込む:Python・Whisper・CI
AI×動画の文脈で、yt-dlpは「データ準備の前処理層」を担う。Pythonライブラリとしても呼べる。
from yt_dlp import YoutubeDL
opts = {"format": "bv*[height<=1080]+ba/b", "outtmpl": "%(id)s.%(ext)s",
"writesubtitles": True, "subtitleslangs": ["ja"]}
with YoutubeDL(opts) as ydl:
info = ydl.extract_info("https://www.youtube.com/watch?v=VIDEO_ID", download=True)
print(info["title"], info["duration"])
extract_info(download=False) ならメタデータだけ取れる。失敗は yt_dlp.utils.DownloadError で捕まえる。
| パターン | 使うオプション | 何に効くか |
|---|---|---|
| 文字起こし | -x --audio-format wav --audio-quality 0 |
WhisperLiveKit等のWhisper系に渡す(wlk transcribe audio.wav --diarization)。会議録画の議事録化 |
| RAG準備 | --write-info-json --skip-download |
タイトル・説明・チャプター・タグが info.json に揃う |
| 広告区間の除去 | --sponsorblock-mark sponsor,selfpromo --sponsorblock-remove sponsor |
スポンサー区間の文字起こしが要約に混ざるのを防ぐ |
| クリップ生成 | --download-sections "*30-60"、--postprocessor-args "ffmpeg:-vf scale=1080:1920" |
縦動画・ハイライト。YouTube Shorts Pipelineの基盤にもなる |
| チャンネル分析 | --flat-playlist -J + jq |
全動画のタイトル・再生数を一括取得 |
yt-dlp --flat-playlist -J https://www.youtube.com/@channel-name/videos > channel.jsonl
jq -r '.entries | sort_by(-.view_count) | .[0:20] | .[] | "\(.view_count)\t\(.title)"' channel.jsonl
定期実行するなら、GitHub Actions(python-version: '3.12'、cronで毎日)で pip install --upgrade yt-dlp してから --download-archive done.txt --no-overwrites --write-info-json --skip-download を回す形が組みやすい。再現性を取るならDockerで固定する。
FROM python:3.12-slim
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir yt-dlp==2026.04.10
WORKDIR /work
ENTRYPOINT ["yt-dlp"]
版を固定すると仕様変更時の不整合は避けられる一方、CVE対応は手動になる。月1回はイメージを作り直すルーチンを組むのが安全だ。社内サービス向けには、~/.config/yt-dlp/plugins/(Windowsは %APPDATA%\yt-dlp\plugins\)に yt_dlp_plugins/extractor/<name>.py を置けば独自extractorが自動で読み込まれる。公式の1,400+のextractorも同じ InfoExtractor の構造で書かれている。
代替ツールとの使い分け
| ツール | 形態 | 対応範囲 | 更新頻度 | 向いている用途 |
|---|---|---|---|---|
| yt-dlp | Python CLI/lib | 1,400+サイト | 高(ほぼ毎月+nightly) | 動画・音声・字幕・自動化すべて |
| youtube-dl | Python CLI | 1,000+ | 低(停滞気味) | 互換維持のみ。新規採用は非推奨 |
| pytube | Python lib | YouTube中心 | 低〜中 | YouTubeだけ軽く扱う |
| gallery-dl | Python CLI | 画像・SNS中心 | 高 | Pixiv・X等の画像収集 |
| 4K Video Downloader | GUI(有料) | 主要のみ | — | 初心者向けGUI |
| Cobalt | Web SaaS | 30+ | — | ブラウザ完結 |
動画・音声ならyt-dlpが標準で、画像はgallery-dlと役割が分かれる(gallery-dlは内部にyt-dlpを呼ぶダウンローダーも持つ)。使い分けはgallery-dl使い方完全ガイド2026|269サイト対応の画像一括ダウンロードをyt-dlpと使い分けるに実測つきでまとめた。yt-dlpが扱うのは尺が確定したファイルで、進行中のライブ配信の録画はStreamlink使い方ガイド2026|135プラグインでライブ配信を録画するCLIをyt-dlpと使い分けるの守備範囲になる。
参照ソース
- yt-dlp/yt-dlp (GitHub) - 本体リポジトリ
- yt-dlp Releases - 全リリース履歴
- GHSA-g3gw-q23r-pgqm: yt-dlp arbitrary command injection - CVE-2026-26331の公式アドバイザリ
- CVE-2026-26331 (GitLab Advisory) - サードパーティ脆弱性データベース
- Supported Sites (yt-dlp) - 対応サイト1,400+の公式リスト
- SponsorBlock - 連携先プロジェクトの公式サイト





