Skip to content

Start typing. Errors match on their exact yt-dlp output.

to move, to open esc to close

Install yt-dlp on Windows 10 and 11

Tested on yt-dlp 2026.07.28 Updated

Quick answer

Two commands in PowerShell, then a fresh terminal. yt-dlp on its own is capped at 360p, so install ffmpeg at the same time rather than discovering the problem later:

PowerShell
winget install yt-dlp.yt-dlp
winget install Gyan.FFmpeg

Close the terminal, open a new one, and check both are visible:

bash
yt-dlp --version
ffmpeg -version

Four routes, and which one to take

MethodUpdates byBest when
wingetwinget upgradeWindows 10 1809+; nothing to install first
Scoopscoop update *You already use Scoop
Chocolateychoco upgradeA managed or corporate machine
Bare exeyt-dlp -UYou want fixes the day they ship

That last column matters more than it looks. How you install decides how fast extractor fixes reach you, and on a tool chasing YouTube's changes that is most of the experience.

winget

Built into Windows 10 1809 and later. Nothing to install first:

bash
winget install yt-dlp.yt-dlp
winget upgrade yt-dlp.yt-dlp

Scoop

Installs to your user profile, so no administrator prompt, and it handles PATH:

bash
scoop install yt-dlp ffmpeg
scoop update *

Chocolatey

Needs an elevated prompt. Common on machines already managed with it:

run as Administrator
choco install yt-dlp ffmpeg
choco upgrade yt-dlp

The bare exe

Download yt-dlp.exe from the project's release page — not from a mirror, not from a site offering an "installer". Put it somewhere permanent, then add that folder to PATH:

PowerShell — user PATH, no admin needed
New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\Programs\yt-dlp"
# move yt-dlp.exe into that folder, then:
[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", "User") + ";$env:LOCALAPPDATA\Programs\yt-dlp",
    "User"
)

PATH, and why a new terminal is not optional

Windows reads PATH when a process starts. A terminal opened before the change keeps the old value for its whole life, and so does anything launched from it. This is the single most common reason for "I installed it and it says not recognized" — the install worked, the window is stale.

To check what the current window can see:

bash
where.exe yt-dlp
$env:Path -split ';'

Windows Defender

Defender and several third-party scanners flag yt-dlp.exe periodically. It is a false positive with a mundane cause: yt-dlp is a Python program packed into one executable, and that packaging is also how a lot of malware is shipped, so heuristics fire on the shape rather than the contents.

Add an exclusion for the folder if it keeps happening. What matters far more is where the file came from — sites advertising a "yt-dlp installer" or a bundled GUI have shipped real malware. The GitHub release page is the only source worth using.

Where downloads land

In whatever directory the terminal is in, which after opening PowerShell is your user folder. Set it explicitly instead:

bash
yt-dlp -P "D:\Downloads\Video" -o "%(title)s.%(ext)s" "URL"

Better still, put it in a config file so it applies every time. On Windows that file goes in %APPDATA%\yt-dlp\config.

PowerShell quoting

Most commands you find online are written for bash. Two differences bite on Windows:

  • Line continuations. bash uses a trailing \; PowerShell 7 accepts it, Windows PowerShell 5 and cmd.exe do not. Paste long commands as one line, or use a backtick.
  • Quotes. Always quote format selectors and output templates. bv*+ba/b unquoted lets PowerShell expand the *, and the failure is baffling.

If it still fails

  • Recognised in PowerShell, not in cmd. Different PATH scope. Sign out and back in.
  • Everything downloads at 360p. ffmpeg is missing or not visible — the 360p page narrows it down in one command.
  • Works for you, not for a scheduled task. Scheduled tasks run with a minimal environment. Use absolute paths for both yt-dlp and --ffmpeg-location.
  • "Access is denied" on update. -U replaces the exe in place, and cannot if it sits under Program Files. Install to your user profile instead.

Frequently asked

'yt-dlp' is not recognized as an internal or external command
The executable is on disk but its folder is not on PATH, or the terminal you are using was opened before PATH changed. Close every terminal window and open a new one first — that resolves it more often than any PATH edit.
Which install method should I pick?
winget if you have Windows 10 1809 or newer — it is built in and updates with everything else. Scoop if you already use it. The bare exe if you want yt-dlp to update itself with -U, which is the fastest route to extractor fixes.
Windows Defender flagged yt-dlp.exe.
A known false positive, and a persistent one: yt-dlp is a Python program bundled into a single exe, which is a packaging pattern malware also uses. Downloading from the project's own GitHub releases and adding an exclusion is the normal response. Never take an exe from a mirror site.
Do I need Python?
Not for the exe or for winget and Scoop — those ship a self-contained build with Python inside. Only a pip install needs Python present, and on Windows that is the harder route rather than the easier one.