yt-dlpの使い方

yt-dlp の使い方メモ(2025年版)|パソコンお兄さん
[yt-dlp(github)](yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader)

CLIのソフトウェアなので、ターミナル上で操作します

ffmpeg必須なので、無ければインストール

  • windows(例)
winget install --id=Gyan.FFmpeg -e
winget install -e --id yt-dlp.yt-dlp
  • Ubuntu(例)
sudo apt install ffmpeg yt-dlp

Usage

yt-dlp [option] [URL]

オプション

update

-U

音声抽出

-x

または

--extract-audio  

拡張子を指定するときは、以下のようにオプションを付ける

-x --audio-format [ext]

[ext]には以下のような拡張子が指定できる

  • aac
  • alac
  • flac
  • m4a
  • mp3
  • opus
  • vorbis
  • wav

プレイリスト一括

-i [URL]

[URL]はプレイリストのURL
(https://www.youtube.com/playlist?list=…)

パス指定

ダウンロードするファイルの名前と場所を指定する

-o ".\hoge\%(uploader)s\%(title)s.%(ext)s"

%(uploader)s:チャンネル名
%(title)s:動画タイトル
%(ext)s:拡張子

有料動画など

メンバー限定の動画などは課金しているアカウントのcookieを取得することでダウンロード可能

以下の拡張機能を使ってcookies.txtを取得
Get cookies.txt LOCALLY - Chrome ウェブストア

youtubeのページでExport All Cookiesを選択

テキストファイルがダウンロードされるのでわかりやすい名前(ここではcookies.txtとする)に変える
カレントディレクトリに持ってきて、以下のように指定

--cookies .\cookies.txt

閲覧権限を持ったcookieはしばらくすると失効するので、エラー吐いたらcookie.txtを再生成する(重複スキップオプションを使うと楽)

音声ファイルのサムネ埋め込み

--embed-thumbnail

サムネも保存

--write-thumbnail

重複スキップ

--download-archive archive.txt

yt-dlpのバイナリが存在するディレクトリにarchive.txtが生成される
archive.txtは既にダウンロードした動画の情報が記され、次ダウンロードするときに重複した動画はスキップされる

画質指定

yt-dlp.exe -F [URL]

こんなものが出てくる(例)

ID  EXT   RESOLUTION FPS CH │   FILESIZE   TBR PROTO │ VCODEC        VBR ACODEC      ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27        0    │                  mhtml │ images                                storyboard
sb2 mhtml 80x45        0    │                  mhtml │ images                                storyboard
sb1 mhtml 160x90       0    │                  mhtml │ images                                storyboard
sb0 mhtml 320x180      0    │                  mhtml │ images                                storyboard
139 m4a   audio only      2 │   72.98MiB   49k https │ audio only        mp4a.40.5   49k 22k [ja] low, m4a_dash
140 m4a   audio only      2 │  193.70MiB  129k https │ audio only        mp4a.40.2  129k 44k [ja] medium, m4a_dash
251 webm  audio only      2 │  191.62MiB  128k https │ audio only        opus       128k 48k [ja] medium, webm_dash
91  mp4   256x144     30    │ ~275.37MiB  184k m3u8  │ avc1.4D400C       mp4a.40.5           [ja]
160 mp4   256x144     30    │   91.45MiB   61k https │ avc1.4d400c   61k video only          144p, mp4_dash
93  mp4   640x360     30    │ ~  1.05GiB  718k m3u8  │ avc1.4D401E       mp4a.40.2           [ja]
134 mp4   640x360     30    │  357.51MiB  239k https │ avc1.4d401e  239k video only          360p, mp4_dash
18  mp4   640x360     30  2 │  428.71MiB  287k https │ avc1.42001E       mp4a.40.2       22k [ja] 360p
300 mp4   1280x720    60    │ ~  4.02GiB 2751k m3u8  │ avc1.640020       mp4a.40.2           [ja]
298 mp4   1280x720    60    │    1.67GiB 1142k https │ avc1.640020 1142k video only          720p60, mp4_dash
301 mp4   1920x1080   60    │ ~  6.93GiB 4745k m3u8  │ avc1.64002A       mp4a.40.2           [ja]
299 mp4   1920x1080   60    │    3.45GiB 2365k https │ avc1.64002a 2365k video only          1080p60, mp4_dash

基本的にはvideo onlyaudio onlyのデータを組み合わせてダウンロードする
MORE INFO_dashとついているデータを選ぶ
360pでm4a音声にしたい場合は、IDから134番と140番を選択して、

yt-dlp.exe -f 134+140 [URL]

Deno

youtubeの仕様変更に対応するため、外部JavaScriptランタイムを使った仕様に変更するらしい
参考(GIGAZINE)
実際、いくつかの動画では外部JavaScriptランタイムをインストールしないとサーバーから403(権限不足)を返される

[download] Sleeping 5.00 seconds as required by the site...
ERROR: unable to download video data: HTTP Error 403: Forbidden

yt-dlpで推奨されている外部JavaScriptランタイムは"Deno"のようなので、これをインストールする(Denoだ以外だとyt-dlp使用時にランタイムを指定するオプションが必要)
Deno:Installation

irm https://deno.land/install.ps1 | iex

scoopchocolateyWingetでもインストール可能

updateしてDenoを認識させる

yt-dlp -U

標準出力に一瞬だけ[deno]と出る(はず)

あとは普通にyt-dlpを使用するのみで良い

yt-dlpをAndroidアプリにした「Seal」は、おそらく外部JavaScriptランタイムに対応しておらず(2026年1月現在)、ダウンロードできない動画がいくつかある
また、最近はGoogleのAndroidアプリケーション規制が激しいので、更新は難しそう…
(2026年内にGooglePlayStoreに認証されたアプリ以外はインストールできなくなるとかなんとかで抗議してる開発者がいたりいなかったり)

代替案として、Termuxを用いる
termuxがandroidのストレージにアクセスするためのコマンド

termux-setup-storage

パッケージインストール
python-yt-dlpが本体で、yt-dlp-ejsがランタイム(deno)を実行するための外部Javascript

pkg update && pkg install ffmpeg deno python-yt-dlp yt-dlp-ejs

パッケージ側でインストールした場合はyt-dlp -Uではなく、パッケージの更新コマンドを使用する

pkg upgrade

2026/03現在、pythonのパッケージツールのdebpythonが3.13を参照しようとするが、python自体のversionは3.12という不整合がpkgにあるため、応急処置として3.13の名前で3.12シンボリックリンクをつくる(自身のpython環境を確認してから行って下さい)

ln -s $PREFIX/bin/python3.12 $PREFIX/bin/python3.13

Androidのストレージは~/storage/内にマウントされているので、使用するときは

yt-dlp -o "~\storage\downloads\%(title)s.%(ext)s" [URL]

などと打つと、Androidのストレージ内に直接ダウンロードされる
ただしディレクトリを勝手に作れる権限はないので、-o "~\storage\%(uploader)s\%(title)s.%(ext)s"みたいなことはできない(はず)