Troubleshooting guide
Fix "Requested format is not available" in yt-dlp
You asked for a format the video does not offer right now. Formats are not a stable menu — sites add and remove them per video, per region, and per client, so a format selector that worked last month can miss today. The fix is to see what actually exists, then select with fallbacks instead of exact demands.
Quick answer
# See every format this video offers right now
yt-dlp -F "URL"
# Then download with fallbacks instead of exact IDs
yt-dlp -f "bv*+ba/b" "URL"bv*+ba/b means: best video plus best audio, or the best combined file if merging is not possible. It degrades gracefully instead of erroring when a specific format is missing.
Common causes, mapped to fixes
- • Hardcoded format IDs (like
-f 137+140). IDs vary per video and disappear without notice. Use selector expressions with/fallbacks instead. - • Asking for a resolution that does not exist. Use a ceiling, not an exact match:
-f "bv*[height<=1080]+ba/b[height<=1080]". - • Old yt-dlp seeing a partial format list. When extraction half-breaks, entire groups of formats vanish. Run
yt-dlp -Uand check-Fagain before changing selectors. - • MP4-only expectations. Many high-quality streams are VP9/AV1 in WebM. If you need MP4 specifically, prefer
--remux-video mp4or accept what exists and convert after.
Reading -F output without pain
The table lists format ID, extension, resolution, and notes. Video-only rows have no audio column value; audio-only rows have no resolution. Anything you pick from the video-only section needs a +ba companion and ffmpeg to merge. If the list looks suspiciously short, that is usually extraction breakage, not the video — update first.
The mistake to avoid
Do not copy format strings from years-old Stack Overflow answers into scripts and expect them to hold. Every hardcoded ID is a future failure. Selectors with fallbacks are the only format strings safe to automate.
If it keeps breaking
Tired of fixing this every time a site changes?
Paste a link to see what a managed import API returns — the one that stays current so your workflow doesn't break.