Repository: yt-dlp/yt-dlp

Issue:
Why does YT-DLP only download SD in 396p from iPlayer yet get_iplayer downloads in 540p?
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm asking a question and **not** reporting a bug or requesting a feature
- [X] I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
- [X] I've verified that I'm running yt-dlp version **2022.09.01** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar questions **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)

### Please make sure the question is worded well enough to be understood

Trying to download this standard definition video in the best quality: 
https://www.bbc.co.uk/iplayer/episode/p00yzpg2/top-gear-series-1-episode-1

Get_iplayer downloads it in the best quality it can get at 960 x 540p 25 fps with AAC 96 Kbps
YT-DLP downloading in the best quality only gets it in 704 x 396p 50 fps, however it gets a better audio quality at AAC 128 Kbps. 

YT-DLP --list-formats can't even see the 960 x 540p. Why is that when get_iplayer can?

How can I get yt-dlp to download the 960 x 540p version? Here's my script:

`-f ("bestvideo[width>=1920]"/bestvideo[ext=avc1])+bestaudio/best `

Thanks

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
X:\Portable Installations\YouTube-DL>cd /D "X:\Portable Installations\YouTube-DL
\"

X:\Portable Installations\YouTube-DL>yt-dlp -vU yt-dlp https://www.bbc.co.uk/ipl
ayer/episode/p00yzpg2/top-gear-series-1-episode-1 --list-formats
[debug] Command-line config: ['-vU', 'yt-dlp', 'https://www.bbc.co.uk/iplayer/ep
isode/p00yzpg2/top-gear-series-1-episode-1', '--list-formats']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8 (No VT), erro
r utf-8 (No VT), screen utf-8 (No VT)
[debug] yt-dlp version 2022.09.01 [5d7c7d6] (win32_exe)
[debug] Python 3.8.10 (CPython 64bit) - Windows-7-6.1.7601-SP1
[debug] Checking exe version: ffmpeg -bsfs
[debug] Checking exe version: ffprobe -bsfs
[debug] exe versions: ffmpeg N-65018-gad91bf8 (needs_adtstoasc), ffprobe N-65018
-gad91bf8
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15,
 mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Loaded 1670 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releas
es/latest
Latest version: 2022.09.01, Current version: 2022.09.01
yt-dlp is up to date (2022.09.01)
[debug] [CommonMistakes] Extracting URL: yt-dlp
ERROR: [CommonMistakes] You've asked yt-dlp to download the URL "yt-dlp". That d
oesn't make any sense. Simply remove the parameter in your command or configurat
ion.
  File "yt_dlp\extractor\common.py", line 670, in extract
  File "yt_dlp\extractor\commonmistakes.py", line 25, in _real_extract

[debug] [bbc.co.uk] Extracting URL: https://www.bbc.co.uk/iplayer/episode/p00yzp
g2/top-gear-series-1-episode-1
[bbc.co.uk] p00yzpg2: Downloading video page
[bbc.co.uk] p00yzpg2: Downloading playlist JSON
[bbc.co.uk] p00yzpg3: Downloading media selection JSON
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading m3u8 information
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[bbc.co.uk] p00yzpg3: Downloading MPD manifest
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7),
vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, pro
to, vext, aext, hasaud, source, id
[info] Available formats for p00yzpg3:
ID                                 EXT RESOLUTION FPS |   FILESIZE   TBR PROTO |
 VCODEC        VBR ACODEC      ABR ASR MORE INFO
--------------------------------------------------------------------------------
--------------------------------------------------------------
mf_akamai-audio_eng_1=128000-0     m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_akamai-audio_eng_1=128000-1     m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_bidi-audio_eng_1=128000-0       m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_bidi-audio_eng_1=128000-1       m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng_1=128000-0 m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng_1=128000-1 m4a audio only     | ~ 56.25MiB  128k dash  |
 audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_akamai-video=827000-0           mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-video=827000-1           mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-0             mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-1             mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-0       mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-1       mp4 704x396     25 | ~363.43MiB  827k dash  |
 avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-1013-0                   mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_akamai-1013-1                   mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_bidi-1013-0                     mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_bidi-1013-1                     mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_cloudfront-1013-0               mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_cloudfront-1013-1               mp4 704x396     25 | ~445.17MiB 1013k m3u8  |
 avc1.4D401E  827k mp4a.40.2  128k     Original
mf_akamai-video=1570000-0          mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_akamai-video=1570000-1          mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_bidi-video=1570000-0            mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_bidi-video=1570000-1            mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_cloudfront-video=1570000-0      mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_cloudfront-video=1570000-1      mp4 704x396     50 | ~689.94MiB 1570k dash  |
 avc3.64001F 1570k video only          Original, mp4_dash
mf_akamai-1800-0                   mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original
mf_akamai-1800-1                   mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original
mf_bidi-1800-0                     mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original
mf_bidi-1800-1                     mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original
mf_cloudfront-1800-0               mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original
mf_cloudfront-1800-1               mp4 704x396     50 | ~791.02MiB 1800k m3u8  |
 avc1.64001F 1570k mp4a.40.2  128k     Original

X:\Portable Installations\YouTube-DL>PAUSE
Press any key to continue . . .
```



Discussion:
```shellsession
$ get_iplayer --info 'https://www.bbc.co.uk/iplayer/episode/p00yzpg2/top-gear-series-1-episode-1'
get_iplayer v3.30, Copyright (C) 2008-2010 Phil Lewis
...
INFO: Processing tv: 'Top Gear: Series 1 - 01. Episode 1 (p00yzpg2)'

...
duration:        3600
durations:       original: 3600
episode:         01. Episode 1
episodenum:      1
episodeshort:    Episode 1
expires:         in 0 days 14 hours (2022-09-13T05:00:00+00:00)
...
pid:             p00yzpg2
player:          https://www.bbc.co.uk/iplayer/episode/p00yzpg2
qualities:       original: sd,web,mobile
qualitysizes:    original: sd=811MB,web=810MB,mobile=254MB [estimated sizes]
...
web:             https://www.bbc.co.uk/programmes/p00yzpg2

$
```
The advertised formats, even for a set-top box with a certificate, max out at 1732kbit/s ~ 800MB with width 704, as listed by _get_iplayer_. What makes you think that this show is available at 540p?


Because I already tried it and put it in the title that it downloads at 540p. MediaInfo reports that the downloaded video is 540p. Try it yourself if you like:

`get_iplayer --pid=p00yzpg2`

I don't know what country you're in, iPlayer may only let people in the UK download from it.
I showed the result from _get_iplayer_ in the UK. I also checked the BBC's tool that shows the available formats. Neither showed a higher resolution format.

What happens when you run the same _get_iplayer_ command?

Might you have some _get_iplayer_ settings that re-encode the download?
The info you posted doesn't mention the resolution, it just says SD for standard definition so where are you getting the idea that the max width you can download is 704?

What's the BBC tool you're using out of interest and how do you use it?

Yes I used the same command as you to list the formats and got the same results. It says SD for standard resolution but doesn't mention the dimensions.

Get_iplayer quality settings are here where it specifically says you can download 960 x 540:
https://github.com/get-iplayer/get_iplayer/wiki/modes#config

If you download get_iplayer then open get_iplayer in the programs menu then just copy and paste this command then it will download the best quality from iPlayer:

`get_iplayer --pid=p00yzpg2
`

It's definitely NOT re-encoding the video to 540p because I can see the download progress and soon after it finishes it says it's muxing to MP4 which doesn't take long. It would take a long time if it was re-encoding.

So just wondering why yt-dlp can't see the 540p files and is there any chance you could add support please? Interestingly, get_iplayer can only download 96 Kbps AAC audio while yt-dlp can download 128 Kbps!

Yt-dlp has no issue with getting the best HD files, just SD ones.
> Get_iplayer quality settings are here where it specifically says you can download 960 x 540:
[get-iplayer/get_iplayer/wiki/modes#config](https://github.com/get-iplayer/get_iplayer/wiki/modes#config)

It can say whatever it wants. Doesn't mean it is actually doing this. You are claiming that `get_iplayer` can download better quality, without providing any evidence that it can. Show us complete `ffprobe` output on the file downloaded with get_iplayer
... Well, I may not know **perl** (`get_iplayer`) or **python** (`youtube-dl`, `yt-dlp`), but there was a time ago I knew well the inner workings of **iPlayer** itself... 

Drawing from that past knowledge, here are some facts: 
1. The show mentioned by OP has `pid=p00yzpg2`
2. To get the **version PID** (aka `vpid`), I'd use this following API: 
`https://www.bbc.co.uk/programmes/<pid>/playlist.json`
which now gets me: 
https://www.bbc.co.uk/programmes/p00yzpg2/playlist.json
Parsing the JSON result, I get: 
`vpid=p00yzpg3`
3. To get available stream formats, I would use the **mediaselector API**; back in my days, it used to be **v4**, then **v5**, now we're up to **v6**!

`https://open.live.bbc.co.uk/mediaselector/6/select/version/2.0/mediaset/<mediaset>/vpid/<vpid>/format/xml`

`youtube-dl` and `yt-dlp` both use the following two mediasets: `iptv-all`, `pc`, with **priority given to the first one**... From a whitelisted UK IP address (I live overseas), both URIs:

https://open.live.bbc.co.uk/mediaselector/6/select/version/2.0/mediaset/iptv-all/vpid/p00yzpg3/format/xml
https://open.live.bbc.co.uk/mediaselector/6/select/version/2.0/mediaset/pc/vpid/p00yzpg3/format/xml

return the `396p50` encodes! 

**Later addition/correction**: As correctly pointed out by **dirkf**, the `pc` mediaset also affords the `540p25` encodes discussed here - both as MPEG-DASH+HLS streams, but the `bbcIE` inside `yt-dlp` doesn't query this mediaset for formats; the logic being to avoid extra, unnecessary, HTTP requests to BBC servers, given that the `iptv-all` mediaset, prioritised by `bbcIE`, already affords usable streams (but not the `540p25` ones, hence this issue...). 

But `get_iplayer` also uses two other "mobile" mediasets, one of which is `apple-ipad-hls` (the other being `apple-iphone4-ipad-hls-3g`); below URI: 

https://open.live.bbc.co.uk/mediaselector/6/select/version/2.0/mediaset/apple-ipad-hls/vpid/p00yzpg3/format/xml

will produce **HLS manifests**, the highest resolution variant being `540p25`: 

```
# variants
#EXT-X-STREAM-INF:BANDWIDTH=349000,CODECS="mp4a.40.5,avc1.42C015",RESOLUTION=384x216,FRAME-RATE=25,AUDIO="audio-aach-48",CLOSED-CAPTIONS=NONE
[vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=48000-video=281000.m3u8](http://vod-hls-uk-live.akamaized.net/usp/auth/vod/piff_abr_full_sd/f56ce9-p00yzpg3/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e.ism/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=48000-video=281000.m3u8)
#EXT-X-STREAM-INF:BANDWIDTH=565000,CODECS="mp4a.40.5,avc1.4D401E",RESOLUTION=512x288,FRAME-RATE=25,AUDIO="audio-aach-96",CLOSED-CAPTIONS=NONE
[vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=437000.m3u8](http://vod-hls-uk-live.akamaized.net/usp/auth/vod/piff_abr_full_sd/f56ce9-p00yzpg3/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e.ism/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=437000.m3u8)
#EXT-X-STREAM-INF:BANDWIDTH=979000,CODECS="mp4a.40.5,avc1.4D401E",RESOLUTION=704x396,FRAME-RATE=25,AUDIO="audio-aach-96",CLOSED-CAPTIONS=NONE
[vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=827000.m3u8](http://vod-hls-uk-live.akamaized.net/usp/auth/vod/piff_abr_full_sd/f56ce9-p00yzpg3/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e.ism/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=827000.m3u8)
#EXT-X-STREAM-INF:BANDWIDTH=1802000,CODECS="mp4a.40.5,avc1.4D401F",RESOLUTION=960x540,FRAME-RATE=25,AUDIO="audio-aach-96",CLOSED-CAPTIONS=NONE
[vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=1604000.m3u8](http://vod-hls-uk-live.akamaized.net/usp/auth/vod/piff_abr_full_sd/f56ce9-p00yzpg3/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e.ism/vf_p00yzpg3_f6ff3856-2577-4bce-acc6-099a0fe7907e-audio_eng=96000-video=1604000.m3u8)
```
> So just wondering **why yt-dlp can't see the 540p files** and is there any chance you could add support please? 

Reason is `yt-dlp` doesn't check at all the `apple-ipad-hls` mediaset value; but `get_iplayer` does!

**Later addition**: While my statement above is indeed true, the reason `yt-dlp` fails is different; its `bbcIE` will only try two mediasets, as said previously, but once usable streams are being found with the `iptv-all` mediaset (first in priority), the second mediaset, `pc`, is never tried for additional formats (which would have afforded the missing `540p25` encodes in question), to spare BBC servers from unnecessary web requests...

>Interestingly, get_iplayer can only download 96 Kbps AAC audio while yt-dlp can download 128 Kbps!

Different mediaset values have different audio streams associated with them... On a mobile device, the highest audio bitrate the BBC would deliver is 96kbps HE-AACv1, while on connected TVs it will deliver 128kbps AAC-LC (used to be even 320kbps some years ago...). 
I believe the code can be hacked to fetch a `540p25` **video-only** stream from the `apple-ipad-hls` mediaset and a 128kbps **audio-only** stream from the `iptv-all` mediaset, but **absolute A/V sync** is not always guaranteed that way...

FWIW, the BBC themselves consider higher framerates to deliver better picture quality than higher vertical resolution alone (this is sometimes true in **Sports** coverage), so in their eyes `396p50` is better than `540p25` (hence they're serving the former to connected TVs) ... 
> > Get_iplayer quality settings are here where it specifically says you can download 960 x 540:
> > [get-iplayer/get_iplayer/wiki/modes#config](https://github.com/get-iplayer/get_iplayer/wiki/modes#config)
> 
> It can say whatever it wants. Doesn't mean it is actually doing this. You are claiming that `get_iplayer` can download better quality, without providing any evidence that it can. Show us complete `ffprobe` output on the file downloaded with get_iplayer

See what the guy in the previous post said. 

But still, I tried this but it says "unknown option: ffprobe". Do you have the full command so I can get the log you're looking for please:
`get_iplayer --pid=p00yzpg2 --ffprobe`


> **MediaInfo** reports that the downloaded video is **540p**.

> ~~It can say whatever it wants. Doesn't mean it is actually doing this.~~ You are claiming that get_iplayer can download better quality, without providing any evidence that it can. Show us **complete ffprobe output** on the file downloaded with get_iplayer

... Since when did **[MediaInfo](https://mediaarea.net/en/MediaInfo)** cease to be a trusted application when it comes to **reporting media file properties**? That is what it was designed for... Why do we have to procure `ffprobe` logs as the absolute proof?

In any case, `--pid=p00yzpg2` is bound to expire within less than 10hrs... 
To the detriment of my VPN's bandwidth quota, I fetched that `540p25` encode with `get_iplayer` (I used my own patched version that fetches the 128kbps instead of the 96kbps audio stream); here's the **MediaInfo** log: 
```
General
Complete name                            : <redacted>\iPlayer Recordings\Top_Gear_Series_1_-_1._Episode_1_p00yzpg2_original.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 731 MiB
Duration                                 : 58 min 58 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 1 733 kb/s
Collection                               : Top Gear: Series 1
Season                                   : 1
Album                                    : Top Gear: Series 1
Album/Performer                          : BBC TV
Part                                     : 1
Part/Position                            : 1
Track name                               : Top Gear: Series 1: Episode 1
Track name/Position                      : 1
Grouping                                 : Factual,Magazines & Reviews,Entertainment,Cars & Motors
Performer                                : BBC One
Composer                                 : BBC iPlayer
Genre                                    : Factual
ContentType                              : TV Show
Description                              : Jeremy Clarkson, Richard Hammond and Jason Dawe are joined by Harry Enfield.
Recorded date                            : 2002-10-20T20:00:00+01:00
Tagged date                              : UTC 2022-09-12 18:08:55
Writing application                      : Lavf58.76.100
Copyright                                : 2022 British Broadcasting Corporation, all rights reserved
Cover                                    : Yes
Lyrics                                   : Jeremy Clarkson, Richard Hammond and Jason Dawe review the Citroen Berlingo, Ford GT40 and Mazda 6, and talk to Harry Enfield. /  / EPISODE / http://www.bbc.co.uk/iplayer/episode/p00yzpg2 /  / SERIES / http://www.bbc.co.uk/programmes/p00whzyg
Comment                                  : Jeremy Clarkson, Richard Hammond and Jason Dawe are joined by Harry Enfield.
Part_ID                                  : s01e01
TVNetworkName                            : BBC One

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L3.1
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Format settings, GOP                     : M=8, N=96
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 58 min 58 s
Source duration                          : 58 min 58 s
Bit rate                                 : 1 528 kb/s
Maximum bit rate                         : 1 600 kb/s
Width                                    : 960 pixels
Height                                   : 540 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 FPS
Standard                                 : PAL
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.118
Stream size                              : 644 MiB (88%)
Source stream size                       : 675 MiB (92%)
Color range                              : Limited
Color primaries                          : BT.601 PAL
Transfer characteristics                 : BT.470 System B/G
Matrix coefficients                      : BT.470 System B/G
mdhd_Duration                            : 3538080
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 58 min 58 s
Bit rate mode                            : Variable
Bit rate                                 : 128 kb/s
Maximum bit rate                         : 131 kb/s / 131 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 54.0 MiB (7%)
Language                                 : English
Default                                  : Yes
Alternate group                          : 1
```
and...
```
ffprobe -hide_banner -i "Top_Gear_Series_1_-_1._Episode_1_p00yzpg2_original.mp4" => 

[mov,mp4,m4a,3gp,3g2,mj2 @ 00a4c980] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Top_Gear_Series_1_-_1._Episode_1_p00yzpg2_original.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.76.100
    media_type      : 10
    copyright       : 2022 British Broadcasting Corporation, all rights reserved

    title           : Top Gear: Series 1: Episode 1
    artist          : BBC One
    album_artist    : BBC TV
    album           : Top Gear: Series 1
    grouping        : Factual,Magazines & Reviews,Entertainment,Cars & Motors
    composer        : BBC iPlayer
    genre           : Factual
    comment         : Jeremy Clarkson, Richard Hammond and Jason Dawe are joined by Harry Enfield.
    date            : 2002-10-20T20:00:00+01:00
    track           : 1
    disc            : 1
    lyrics          : Jeremy Clarkson, Richard Hammond and Jason Dawe review the Citroen Berlingo, Ford GT40 and Mazda 6, and talk to Harry Enfield.
                    :
                    : EPISODE
                    : http://www.bbc.co.uk/iplayer/episode/p00yzpg2
                    :
                    : SERIES
                    : http://www.bbc.co.uk/programmes/p00whzyg
    description     : Jeremy Clarkson, Richard Hammond and Jason Dawe are joined by Harry Enfield.
    show            : Top Gear: Series 1
    episode_id      : s01e01
    season_number   : 1
    episode_sort    : 1
    network         : BBC One
  Duration: 00:58:58.08, start: 0.000000, bitrate: 1733 kb/s
  Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 960x540 [SAR 1:1 DAR 16:9], 1600 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 640x360 [SAR 72:72 DAR 16:9], 90k tbr, 90k tbn, 90k tbc (attached pic)
```
I hope both the above meet with the developers' satisfaction 😉 ... 
Which gives me another opportunity to thank **both developer teams** of `youtube-dl` (a one-man show currently 😄 ) and `yt-dlp` ! 👍 

Kindest regards 😄 
Vangelis66, thank you very much. Any chance you could give me a copy of your patched version please or could you give instructions on how to patch my own version (what version does the patch work with?) as I'd like to download these quickly with the best audio before they expire.

Also could you please give me the command for running ffprobe. I tried running what I saw in your above command below but it said the syntax was incorrect:

`ffprobe -hide_banner -i "Top_Gear_Series_1_-_1._Episode_1_p00yzpg2_original.mp4" => 
`

> > > **MediaInfo** reports that the downloaded video is **540p**.
> >
> > It can say whatever it wants. Doesn't mean it is actually doing this. You are claiming that get_iplayer can download better quality, without providing any evidence that it can. Show us **complete ffprobe output** on the file downloaded with get_iplayer
> 
> ... Since when did [MediaInfo](https://mediaarea.net/en/MediaInfo) cease to be a trusted application when it comes to reporting media file properties? That is what it was designed for... Why do we have to procure ffprobe logs as the absolute proof?

You are misrepresenting what I said by quoting unrelated parts of the conversation together. The "it" in my reply is obviously refering to the line I actually quoted (the wiki)! and not to mediainfo...

MediaInfo is fine, my issue was that OP was simply claiming it gives 540p without showing any logs. It is very common for users to misinterpret various outputs - so I've learned not to take such claims at face value until "proof" is provided. With the outputs you have now posted, it is clear that their claim was indeed correct - but that does not mean my skepticism was unwarranted

> Any chance you could give me a copy of your patched version please or could you give instructions on how to patch my own version (what version does the patch work with?) as I'd like to download these quickly with the best audio before they expire.

... I'm afraid I won't provide detailed instructions for that... The `BBC iPlayer` staff are always vigilant on places like these and I have been burnt before twice... The whole idea is based on a hack the Beeb can easily block... 
BTW, I'm using an older version of GiP myself, that mostly suits my Radio (now "Sounds") needs (that aren't geo-fenced). 

> Also could you please give me the command for running ffprobe. 
I tried running what I saw in your above command below 
but it said the syntax was incorrect

I used the very same command I posted, verbatim (i.e. minus the "right arrow", of course 😜 ) ... I'm using a 32-bit `ffprobe-v4.4.1` build that is compatible with my Windows OS and architecture... 
If `ffprobe.exe` is not in your PATH, then define the absolute path to the media file (assuming you're running the cmd in the same directory as `ffprobe.exe` resides) - or place both EXE and MP4 adjacent to each other; if it wasn't clear, I ran the `ffprobe` command after the file had finished downloading, in a second cmd prompt window...
> You are misrepresenting what I said by quoting unrelated parts of the conversation together. The "it" in my reply is obviously referring to the line I actually quoted (the wiki)! and not to mediainfo...

Apologies, it was not my intent to discredit/insult you in any way in the first place 😄 ...
I had been obtuse/careless and probably quoted more than I should've - but my **emphasis** on the quoted "unrelated parts of the conversation" was in fact clearly marked by the portions in **bold**: 

"**MediaInfo** reports..." vs "... Show us **complete ffprobe output**"

... my argument all along being why an already provided **MediaInfo** testimony wasn't adequate... 
Your further answer and detailed explanation on that has me fully covered 👍 ! 

Take the best of care... ❤️ 

Right. This is an old issue that was supposed to be fixed ages ago for yt-dl in https://github.com/ytdl-org/youtube-dl/pull/26821. However the developer who closed that PR implemented a different "solution" that didn't fully address the problem. Possibly the concern was making too many requests to the BBC servers.

> The info you posted doesn't mention the resolution, ...

True enough. In fact, the 540p formats found by _get_iplayer_ are 25fps while the 396p formats max out at 50fps with the same bit-rate.

Currently, iPlayer extraction looks for two media selectors:
```py
    _MEDIA_SETS = [
        # Provides HQ HLS streams with even better quality that pc mediaset but fails
        # with geolocation in some cases when it's even not geo restricted at all (e.g.
        # http://www.bbc.co.uk/programmes/b06bp7lf). Also may fail with selectionunavailable.
        'iptv-all',
        'pc',
    ]
```
The `pc` selector does actually provide the 540p/25fps formats, but the extractor only gathers formats from the first selector that has any. The underlying issue is that the set of formats provided by each media selector may differ for each programme, and so no single media selector reliably gives the full range of formats. So either you get missing formats or you make more, possibly unnecessary, requests.

This patch ensures that all selectors are interrogated (again, but better now):
```diff
--- old/yt-dlp/yt_dlp/extractor/bbc.py
+++ new/yt-dlp/yt_dlp/extractor/bbc.py
@@ -330,16 +330,26 @@
 
     def _download_media_selector(self, programme_id):
         last_exception = None
+        formats, subtitles = [], {}
         for media_set in self._MEDIA_SETS:
             try:
-                return self._download_media_selector_url(
+                fmts, sttls = self._download_media_selector_url(
                     self._MEDIA_SELECTOR_URL_TEMPL % (media_set, programme_id), programme_id)
+                formats.extend(fmts)
+                if sttls:
+                    subtitles = self._merge_subtitles(subtitles, sttls)
             except BBCCoUkIE.MediaSelectionError as e:
                 if e.id in ('notukerror', 'geolocation', 'selectionunavailable'):
                     last_exception = e
                     continue
                 self._raise_extractor_error(e)
-        self._raise_extractor_error(last_exception)
+        if last_exception:
+            if formats or subtitles:
+                self.report_warning(
+                    '%s returned error: %s' % (self.IE_NAME, last_exception.id))
+            else:
+                self._raise_extractor_error(last_exception)
+        return formats, subtitles
 
     def _download_media_selector_url(self, url, programme_id=None):
         media_selection = self._download_json(

```
Then:
```shellsession
[info] Available formats for p00yzpg3:
ID                                 EXT RESOLUTION FPS │   FILESIZE   TBR PROTO │ VCODEC        VBR ACODEC      ABR ASR MORE INFO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
mf_akamai-audio_eng=96000-0        m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_akamai-audio_eng=96000-1        m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_bidi-audio_eng=96000-0          m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_bidi-audio_eng=96000-1          m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng=96000-0    m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng=96000-1    m4a audio only     │ ~ 42.19MiB   96k dash  │ audio only        mp4a.40.5   96k 48k [en] Original, m4a_dash
mf_akamai-audio_eng_1=128000-0     m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_akamai-audio_eng_1=128000-1     m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_bidi-audio_eng_1=128000-0       m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_bidi-audio_eng_1=128000-1       m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng_1=128000-0 m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_cloudfront-audio_eng_1=128000-1 m4a audio only     │ ~ 56.25MiB  128k dash  │ audio only        mp4a.40.2  128k 48k [en] Original, m4a_dash
mf_akamai-video=281000-0           mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_akamai-video=281000-1           mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_bidi-video=281000-0             mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_bidi-video=281000-1             mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_cloudfront-video=281000-0       mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_cloudfront-video=281000-1       mp4 384x216     25 │ ~123.49MiB  281k dash  │ avc3.42C015  281k video only          Original, mp4_dash
mf_akamai-400-0                    mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_akamai-400-1                    mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_bidi-400-0                      mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_bidi-400-1                      mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_cloudfront-400-0                mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_cloudfront-400-1                mp4 384x216     25 │ ~175.78MiB  400k m3u8  │ avc1.42C015  281k mp4a.40.5   96k     Original
mf_akamai-video=437000-0           mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_akamai-video=437000-1           mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_bidi-video=437000-0             mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_bidi-video=437000-1             mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_cloudfront-video=437000-0       mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_cloudfront-video=437000-1       mp4 512x288     25 │ ~192.04MiB  437k dash  │ avc3.4D401E  437k video only          Original, mp4_dash
mf_akamai-565-0                    mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_akamai-565-1                    mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_bidi-565-0                      mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_bidi-565-1                      mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_cloudfront-565-0                mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_cloudfront-565-1                mp4 512x288     25 │ ~248.29MiB  565k m3u8  │ avc1.4D401E  437k mp4a.40.5   96k     Original
mf_akamai-video=827000-0           mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-video=827000-1           mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-video=827000-2           mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-video=827000-3           mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-0             mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-1             mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-2             mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_bidi-video=827000-3             mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-0       mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-1       mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-2       mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_cloudfront-video=827000-3       mp4 704x396     25 │ ~363.43MiB  827k dash  │ avc3.4D401E  827k video only          Original, mp4_dash
mf_akamai-979-0                    mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_akamai-979-1                    mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_bidi-979-0                      mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_bidi-979-1                      mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_cloudfront-979-0                mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_cloudfront-979-1                mp4 704x396     25 │ ~430.22MiB  979k m3u8  │ avc1.4D401E  827k mp4a.40.5   96k     Original
mf_akamai-1013-0                   mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_akamai-1013-1                   mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_bidi-1013-0                     mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_bidi-1013-1                     mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_cloudfront-1013-0               mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_cloudfront-1013-1               mp4 704x396     25 │ ~445.17MiB 1013k m3u8  │ avc1.4D401E  827k mp4a.40.2  128k     Original
mf_akamai-video=1570000-0          mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_akamai-video=1570000-1          mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_bidi-video=1570000-0            mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_bidi-video=1570000-1            mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_cloudfront-video=1570000-0      mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_cloudfront-video=1570000-1      mp4 704x396     50 │ ~689.94MiB 1570k dash  │ avc3.64001F 1570k video only          Original, mp4_dash
mf_akamai-1800-0                   mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_akamai-1800-1                   mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_bidi-1800-0                     mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_bidi-1800-1                     mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_cloudfront-1800-0               mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_cloudfront-1800-1               mp4 704x396     50 │ ~791.02MiB 1800k m3u8  │ avc1.64001F 1570k mp4a.40.2  128k     Original
mf_akamai-video=1604000-0          mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_akamai-video=1604000-1          mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_bidi-video=1604000-0            mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_bidi-video=1604000-1            mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_cloudfront-video=1604000-0      mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_cloudfront-video=1604000-1      mp4 960x540     25 │ ~704.88MiB 1604k dash  │ avc3.4D401F 1604k video only          Original, mp4_dash
mf_akamai-1802-0                   mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
mf_akamai-1802-1                   mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
mf_bidi-1802-0                     mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
mf_bidi-1802-1                     mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
mf_cloudfront-1802-0               mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
mf_cloudfront-1802-1               mp4 960x540     25 │ ~791.89MiB 1802k m3u8  │ avc1.4D401F 1604k mp4a.40.5   96k     Original
```
Since the [programme](https://www.bbc.co.uk/iplayer/episode/p00yzpg2/top-gear-series-1-episode-1) referenced in OP has now **expired**, here's another video clip that _can be used in tests for this issue_, as it's **not even geo-blocked**: 
"https://www.bbc.co.uk/programmes/p0b7z04h"

Without **dirkf**'s patch above, the only identifiable `540p` encodes by `youtube-dl`|`yt-dlp`'s **bbcIE** are the `540p50` ones: 
```
...
mf_cloudfront-video=1570000-1       mp4        704x396    DASH video 1570k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=2812000-0           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=2812000-1           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-0       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-1       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=5070000-0           mp4        1280x720   DASH video 5070k , mp4_dash container, avc3.640020, 50fps, video only
...
mf_cloudfront-1800-1                mp4        704x396    1800k , avc1.64001F@1570k, 50.0fps, mp4a.40.2@128k
mf_akamai-3117-0                    mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_akamai-3117-1                    mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_cloudfront-3117-0                mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_cloudfront-3117-1                mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_akamai-5510-0                    mp4        1280x720   5510k , avc1.640020@5070k, 50.0fps, mp4a.40.2@128k
...
``` 
With the patch applied, the "missing" `540p25` encodes are being recovered: 
```
...
mf_cloudfront-video=1570000-1       mp4        704x396    DASH video 1570k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=1604000-0           mp4        960x540    DASH video 1604k , mp4_dash container, avc3.64001F, 25fps, video only
mf_akamai-video=1604000-1           mp4        960x540    DASH video 1604k , mp4_dash container, avc3.64001F, 25fps, video only
mf_cloudfront-video=1604000-0       mp4        960x540    DASH video 1604k , mp4_dash container, avc3.64001F, 25fps, video only
mf_cloudfront-video=1604000-1       mp4        960x540    DASH video 1604k , mp4_dash container, avc3.64001F, 25fps, video only
mf_akamai-video=2812000-0           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=2812000-1           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=2812000-2           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=2812000-3           mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-0       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-1       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-2       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_cloudfront-video=2812000-3       mp4        960x540    DASH video 2812k , mp4_dash container, avc3.64001F, 50fps, video only
mf_akamai-video=5070000-0           mp4        1280x720   DASH video 5070k , mp4_dash container, avc3.640020, 50fps, video only
...
mf_cloudfront-1800-1                mp4        704x396    1800k , avc1.64001F@1570k, 50.0fps, mp4a.40.2@128k
mf_akamai-1802-0                    mp4        960x540    1802k , avc1.64001F@1604k, 25.0fps, mp4a.40.5@ 96k
mf_akamai-1802-1                    mp4        960x540    1802k , avc1.64001F@1604k, 25.0fps, mp4a.40.5@ 96k
mf_cloudfront-1802-0                mp4        960x540    1802k , avc1.64001F@1604k, 25.0fps, mp4a.40.5@ 96k
mf_cloudfront-1802-1                mp4        960x540    1802k , avc1.64001F@1604k, 25.0fps, mp4a.40.5@ 96k
mf_akamai-3117-0                    mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_akamai-3117-1                    mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_cloudfront-3117-0                mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_cloudfront-3117-1                mp4        960x540    3117k , avc1.64001F@2812k, 50.0fps, mp4a.40.2@128k
mf_akamai-5510-0                    mp4        1280x720   5510k , avc1.640020@5070k, 50.0fps, mp4a.40.2@128k
...
```
(patched `youtube-dl` launched from an **overseas** IP address; in the **UK**, additional and/or different **CDN**s might be available...)

**PS**: To get `540p25` video with `128kbps AAC-LC` audio, just specify corresponding DASH standalone streams, e.g. ` -f "mf_cloudfront-video=1604000-1+mf_cloudfront-audio_eng_1=128000-1"`; I'd use **the same CDN** for better A/V sync 😉 ...
Much the same from UK. The 128k audio is in the combined formats at 540p/720p/50fps, 96k max for 25fps.

Resolving patch:
diff --git a/yt_dlp/extractor/bbc.py b/yt_dlp/extractor/bbc.py
--- a/yt_dlp/extractor/bbc.py
+++ b/yt_dlp/extractor/bbc.py
@@ -317,16 +317,25 @@ def _raise_extractor_error(self, media_selection_error):
 
     def _download_media_selector(self, programme_id):
         last_exception = None
+        formats, subtitles = [], {}
         for media_set in self._MEDIA_SETS:
             try:
-                return self._download_media_selector_url(
+                fmts, subs = self._download_media_selector_url(
                     self._MEDIA_SELECTOR_URL_TEMPL % (media_set, programme_id), programme_id)
+                formats.extend(fmts)
+                if subs:
+                    self._merge_subtitles(subs, target=subtitles)
             except BBCCoUkIE.MediaSelectionError as e:
                 if e.id in ('notukerror', 'geolocation', 'selectionunavailable'):
                     last_exception = e
                     continue
                 self._raise_extractor_error(e)
-        self._raise_extractor_error(last_exception)
+        if last_exception:
+            if formats or subtitles:
+                self.report_warning(f'{self.IE_NAME} returned error: {last_exception.id}')
+            else:
+                self._raise_extractor_error(last_exception)
+        return formats, subtitles
 
     def _download_media_selector_url(self, url, programme_id=None):
         media_selection = self._download_json(


Test patch: