Skip to content

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

to move, to open esc to close

Fix "Requested format is not available" in yt-dlp

Tested on yt-dlp 2026.07.28 Updated
What yt-dlp prints
ERROR: [youtube] dQw4w9WgXcQ: Requested format is not available. Use --list-formats for a list of available formats

Quick answer

This error is about your format selector, not about the video. yt-dlp asked for something the site does not offer and refused to guess. A selector with a fallback never produces it:

works on every site, at every quality
yt-dlp -f "bv*[height<=1080]+ba/b[height<=1080]/b" "URL"

Reading the selector that failed

Almost every instance of this error is one of four mistakes. Find yours:

bestvideo+bestaudio on a site that has neither

bestvideo means "a stream with video and no audio". bestaudio means the reverse. YouTube serves both above 720p, which is why the advice is everywhere — but Twitter, Reddit, Facebook, TikTok and most news sites serve a single combined file and nothing else. Neither half matches, so the expression matches nothing.

The asterisk is the fix: bv* means "a stream with video, audio optional".

instead of -f bestvideo+bestaudio
yt-dlp -f "bv*+ba/b" "URL"

A hardcoded format id

-f 137+140 works until you point it at a video that does not have those exact itags — an old upload, a livestream recording, a different site entirely. Ids are not a stable interface. Select by property instead:

bash
yt-dlp -f "bv*[height=1080][ext=mp4]+ba[ext=m4a]/b[height<=1080]" "URL"

A filter nothing satisfies

-f "bv[height=1080][fps=60][vcodec^=avc1]" is three simultaneous conditions, and many videos meet two of them. Every condition you add narrows the set that can match.

No fallback at all

The / separator is what turns "this or nothing" into "this, or failing that, this". A selector without one has no second attempt.

Diagnosing it in one command

Before changing the selector, look at what is actually on offer:

bash
yt-dlp -F "URL"

The output tells you a lot in three columns. video only and audio only rows mean the site splits its streams and + selectors will work. Rows showing both mean it does not, and bv* is required. If the table stops at 360p on a video you know goes higher, this is not a selector problem at all — see stuck at 360p.

The better tool: -S

-f states a requirement and fails when it is unmet. -S states a preference and ranks whatever exists, so it cannot produce this error:

1080p if it exists, best available if not
yt-dlp -S "res:1080,fps,codec:h264" "URL"

Read as: prefer 1080p, break ties by frame rate, then prefer H.264. Nothing here is mandatory, so a 720p-only video downloads at 720p instead of erroring. For most real use this is the selector people actually wanted when they wrote a complicated -f.

Common sort keys, worth knowing: res (height), fps, codec, ext, size, br (bitrate). Prefix any with + to reverse it — -S "+size" gets you the smallest file, which is the fastest way to grab a preview.

Selectors worth keeping

GoalSelector
Best quality, any container-f "bv*+ba/b"
Best that is already mp4-f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/b"
Cap at 1080p-f "bv*[height<=1080]+ba/b[height<=1080]/b"
Prefer 1080p, accept less-S "res:1080"
Avoid AV1 (older hardware)-S "vcodec:h264"
Smallest file-S "+size"
Audio only, no re-encode-f "ba/b" -x --audio-format best

If it still fails

  • Even -f b errors. Then extraction found no formats at all, and the selector was never the problem. See video unavailable or unable to extract player response.
  • Works alone, fails inside a playlist. One entry in the playlist lacks the format. Add -i to skip it, or loosen the selector.
  • Works on the command line, fails in a script. Quoting. The selector is being split or expanded before yt-dlp sees it.
  • Only since you added a config file. A -f line in yt-dlp.conf applies to every command. --ignore-config confirms it in one run; the config guide covers precedence.

Format selection is the one yt-dlp concept worth learning properly — the full guide covers the syntax rather than just the fixes.

Frequently asked

Why does bestvideo+bestaudio fail on some sites?
Because it demands a video-only stream and an audio-only stream. Plenty of sites — Twitter, Reddit, many news outlets — only ever serve one combined file. There is no bestvideo to match, so the whole selector matches nothing. bv*+ba/b accepts either shape.
Are format ids stable?
No. An itag like 137 means the same thing on YouTube today, but which itags a given video has varies by upload, and other sites renumber freely. Selecting by property (height, ext, codec) survives; selecting by id does not.
What is the difference between -f and -S?
-f describes what is acceptable and errors if nothing matches. -S ranks whatever exists and always picks something. If you want "1080p if possible, otherwise the best available", -S is the tool and -f will keep erroring on the videos that do not have it.
The format is in the -F table and still says not available.
Two common causes: you asked for two formats with + and one of them does not exist, or the id contains characters the shell ate. Quote the selector, and check that both halves of a + expression appear in the table.