Repository: yt-dlp/yt-dlp

Issue:
[AbemaTV] Playlist problem
### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2022.06.29** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/ytdl-org/youtube-dl#video-url-contains-an-ampersand-and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **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)
- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Japan

### Provide a description that is worded well enough to be understood

More than 20 playlists are not recognized correctly and only  20 episodes are detected.
ex)
https://abema.tv/video/title/25-102
https://abema.tv/video/title/25-148
https://abema.tv/video/title/35-50


### 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
[debug] Command-line config: ['-vU', '-F', 'https://abema.tv/video/title/25-148']
[debug] User config "C:\Users\okazu\AppData\Roaming\yt-dlp\config": ['--cookies-from-browser', 'chrome', '--hls-use-mpegts', '--console-title']
[debug] Encodings: locale cp932, fs utf-8, pref cp932, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.07.12.142422 [0f44636] (win32_exe)
[debug] Python 3.8.10 (CPython 64bit) - Windows-10-10.0.22000-SP0
[debug] Checking exe version: ffmpeg -bsfs
[debug] Checking exe version: ffprobe -bsfs
[debug] exe versions: ffmpeg N-107375-g28143ce115 (fdk,setts), ffprobe N-107375-g28143ce115, rtmpdump 2.4-20220520-g922b131-GnuTLS_3.6.16-x86_64-static
[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
[Cookies] Extracting cookies from chrome
[debug] Extracting cookies from: "C:\Users\okazu\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies"
[debug] Found local state file at "C:\Users\okazu\AppData\Local\Google\Chrome\User Data\Local State"
[Cookies] Extracted 3059 cookies from chrome
[debug] cookie version breakdown: {'v10': 3059, 'other': 0, 'unencrypted': 0}
[debug] Proxy map: {}
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.06.29, Current version: 2022.07.12.142422
yt-dlp is up to date (2022.07.12.142422)
[debug] [AbemaTVTitle] Extracting URL: https://abema.tv/video/title/25-148
[AbemaTVTitle] 25-148: Downloading webpage
[download] Downloading playlist: Re:ゼロから始める異世界生活　2nd season
[AbemaTVTitle] Playlist Re:ゼロから始める異世界生活　2nd season: Downloading 20 videos of 20
[download] Downloading video 1 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p1
[AbemaTV] Authorizing
[AbemaTV] 25-148_s2_p1: Downloading webpage
[AbemaTV] 25-148_s2_p1: Checking playability
[AbemaTV] 25-148_s2_p1: Downloading m3u8 information
[info] Available formats for 25-148_s2_p1:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 38.63MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 62.99MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~188.96MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~293.95MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~503.91MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.09GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 2 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p2
[AbemaTV] 25-148_s2_p2: Downloading webpage
[AbemaTV] 25-148_s2_p2: Checking playability
[AbemaTV] 25-148_s2_p2: Downloading m3u8 information
[info] Available formats for 25-148_s2_p2:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 34.59MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 56.40MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~169.19MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~263.18MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~451.17MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~996.34MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 3 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p3
[AbemaTV] 25-148_s2_p3: Downloading webpage
[AbemaTV] 25-148_s2_p3: Checking playability
[AbemaTV] 25-148_s2_p3: Downloading m3u8 information
[info] Available formats for 25-148_s2_p3:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 34.34MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 55.99MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~167.98MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~261.30MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~447.95MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~989.22MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 4 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p4
[AbemaTV] 25-148_s2_p4: Downloading webpage
[AbemaTV] 25-148_s2_p4: Checking playability
[AbemaTV] 25-148_s2_p4: Downloading m3u8 information
[info] Available formats for 25-148_s2_p4:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 5 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p5
[AbemaTV] 25-148_s2_p5: Downloading webpage
[AbemaTV] 25-148_s2_p5: Checking playability
[AbemaTV] 25-148_s2_p5: Downloading m3u8 information
[info] Available formats for 25-148_s2_p5:
ID   EXT RESOLUTION │    FILESIZE   TBR PROTO │ VCODEC  ACODEC
───────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~  35.24MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~  57.46MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~ 172.38MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~ 268.14MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~ 459.67MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~1015.10MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 6 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p6
[AbemaTV] 25-148_s2_p6: Downloading webpage
[AbemaTV] 25-148_s2_p6: Checking playability
[AbemaTV] 25-148_s2_p6: Downloading m3u8 information
[info] Available formats for 25-148_s2_p6:
ID   EXT RESOLUTION │    FILESIZE   TBR PROTO │ VCODEC  ACODEC
───────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~  35.24MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~  57.46MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~ 172.38MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~ 268.14MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~ 459.67MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~1015.10MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 7 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p7
[AbemaTV] 25-148_s2_p7: Downloading webpage
[AbemaTV] 25-148_s2_p7: Checking playability
[AbemaTV] 25-148_s2_p7: Downloading m3u8 information
[info] Available formats for 25-148_s2_p7:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 35.69MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 58.19MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~174.57MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~271.56MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~465.53MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.00GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 8 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p8
[AbemaTV] 25-148_s2_p8: Downloading webpage
[AbemaTV] 25-148_s2_p8: Checking playability
[AbemaTV] 25-148_s2_p8: Downloading m3u8 information
[info] Available formats for 25-148_s2_p8:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 32.57MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 53.10MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~159.30MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~247.80MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~424.80MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~938.11MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 9 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p9
[AbemaTV] 25-148_s2_p9: Downloading webpage
[AbemaTV] 25-148_s2_p9: Checking playability
[AbemaTV] 25-148_s2_p9: Downloading m3u8 information
[info] Available formats for 25-148_s2_p9:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 33.22MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 54.16MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~162.49MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~252.76MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~433.30MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~956.87MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 10 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p10
[AbemaTV] 25-148_s2_p10: Downloading webpage
[AbemaTV] 25-148_s2_p10: Checking playability
[AbemaTV] 25-148_s2_p10: Downloading m3u8 information
[info] Available formats for 25-148_s2_p10:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 35.69MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 58.19MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~174.57MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~271.56MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~465.53MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.00GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 11 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p11
[AbemaTV] 25-148_s2_p11: Downloading webpage
[AbemaTV] 25-148_s2_p11: Checking playability
[AbemaTV] 25-148_s2_p11: Downloading m3u8 information
[info] Available formats for 25-148_s2_p11:
ID   EXT RESOLUTION │    FILESIZE   TBR PROTO │ VCODEC  ACODEC
───────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~  35.24MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~  57.46MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~ 172.38MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~ 268.14MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~ 459.67MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~1015.10MiB 5300k m3u8  │ unknown unknown
[download] Downloading video 12 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p12
[AbemaTV] 25-148_s2_p12: Downloading webpage
[AbemaTV] 25-148_s2_p12: Checking playability
[AbemaTV] 25-148_s2_p12: Downloading m3u8 information
[info] Available formats for 25-148_s2_p12:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 36.36MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 59.29MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~177.87MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~276.68MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~474.32MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.02GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 13 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p13
[AbemaTV] 25-148_s2_p13: Downloading webpage
[AbemaTV] 25-148_s2_p13: Checking playability
[AbemaTV] 25-148_s2_p13: Downloading m3u8 information
[info] Available formats for 25-148_s2_p13:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 36.36MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 59.29MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~177.87MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~276.68MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~474.32MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.02GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 14 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p14
[AbemaTV] 25-148_s2_p14: Downloading webpage
[AbemaTV] 25-148_s2_p14: Checking playability
[AbemaTV] 25-148_s2_p14: Downloading m3u8 information
[info] Available formats for 25-148_s2_p14:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 37.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 61.52MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~184.57MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~287.11MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~492.19MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.06GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 15 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p15
[AbemaTV] 25-148_s2_p15: Downloading webpage
[AbemaTV] 25-148_s2_p15: Checking playability
[AbemaTV] 25-148_s2_p15: Downloading m3u8 information
[info] Available formats for 25-148_s2_p15:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 37.04MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 60.39MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~181.16MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~281.81MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~483.11MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.04GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 16 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p16
[AbemaTV] 25-148_s2_p16: Downloading webpage
[AbemaTV] 25-148_s2_p16: Checking playability
[AbemaTV] 25-148_s2_p16: Downloading m3u8 information
[info] Available formats for 25-148_s2_p16:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 17 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p17
[AbemaTV] 25-148_s2_p17: Downloading webpage
[AbemaTV] 25-148_s2_p17: Checking playability
[AbemaTV] 25-148_s2_p17: Downloading m3u8 information
[info] Available formats for 25-148_s2_p17:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 18 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p18
[AbemaTV] 25-148_s2_p18: Downloading webpage
[AbemaTV] 25-148_s2_p18: Checking playability
[AbemaTV] 25-148_s2_p18: Downloading m3u8 information
[info] Available formats for 25-148_s2_p18:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 19 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p19
[AbemaTV] 25-148_s2_p19: Downloading webpage
[AbemaTV] 25-148_s2_p19: Checking playability
[AbemaTV] 25-148_s2_p19: Downloading m3u8 information
[info] Available formats for 25-148_s2_p19:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Downloading video 20 of 20
[debug] [AbemaTV] Extracting URL: https://abema.tv/video/episode/25-148_s2_p20
[AbemaTV] 25-148_s2_p20: Downloading webpage
[AbemaTV] 25-148_s2_p20: Checking playability
[AbemaTV] 25-148_s2_p20: Downloading m3u8 information
[info] Available formats for 25-148_s2_p20:
ID   EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC  ACODEC
──────────────────────────────────────────────────────────────
184  mp4 320x180    │ ~ 39.73MiB  184k m3u8  │ unknown unknown
300  mp4 426x240    │ ~ 64.78MiB  300k m3u8  │ unknown unknown
900  mp4 640x360    │ ~194.35MiB  900k m3u8  │ unknown unknown
1400 mp4 852x480    │ ~302.32MiB 1400k m3u8  │ unknown unknown
2400 mp4 1280x720   │ ~518.26MiB 2400k m3u8  │ unknown unknown
5300 mp4 1920x1080  │ ~  1.12GiB 5300k m3u8  │ unknown unknown
[download] Finished downloading playlist: Re:ゼロから始める異世界生活　2nd season
```



Discussion:
@Lesmiscore 

Resolving patch:
diff --git a/yt_dlp/extractor/abematv.py b/yt_dlp/extractor/abematv.py
--- a/yt_dlp/extractor/abematv.py
+++ b/yt_dlp/extractor/abematv.py
@@ -1,5 +1,6 @@
 import base64
 import binascii
+import functools
 import hashlib
 import hmac
 import io
@@ -20,11 +21,11 @@
     decode_base_n,
     int_or_none,
     intlist_to_bytes,
+    OnDemandPagedList,
     request_to_url,
     time_seconds,
     traverse_obj,
     update_url_query,
-    urljoin,
 )
 
 # NOTE: network handler related code is temporary thing until network stack overhaul PRs are merged (#2861/#2862)
@@ -145,76 +146,14 @@ def abematv_license_open(self, url):
 
 
 class AbemaTVBaseIE(InfoExtractor):
-    def _extract_breadcrumb_list(self, webpage, video_id):
-        for jld in re.finditer(
-                r'(?is)</span></li></ul><script[^>]+type=(["\']?)application/ld\+json\1[^>]*>(?P<json_ld>.+?)</script>',
-                webpage):
-            jsonld = self._parse_json(jld.group('json_ld'), video_id, fatal=False)
-            if jsonld:
-                if jsonld.get('@type') != 'BreadcrumbList':
-                    continue
-                trav = traverse_obj(jsonld, ('itemListElement', ..., 'name'))
-                if trav:
-                    return trav
-        return []
-
-
-class AbemaTVIE(AbemaTVBaseIE):
-    _VALID_URL = r'https?://abema\.tv/(?P<type>now-on-air|video/episode|channels/.+?/slots)/(?P<id>[^?/]+)'
-    _NETRC_MACHINE = 'abematv'
-    _TESTS = [{
-        'url': 'https://abema.tv/video/episode/194-25_s2_p1',
-        'info_dict': {
-            'id': '194-25_s2_p1',
-            'title': '第1話 「チーズケーキ」　「モーニング再び」',
-            'series': '異世界食堂２',
-            'series_number': 2,
-            'episode': '第1話 「チーズケーキ」　「モーニング再び」',
-            'episode_number': 1,
-        },
-        'skip': 'expired',
-    }, {
-        'url': 'https://abema.tv/channels/anime-live2/slots/E8tvAnMJ7a9a5d',
-        'info_dict': {
-            'id': 'E8tvAnMJ7a9a5d',
-            'title': 'ゆるキャン△ SEASON２ 全話一挙【無料ビデオ72時間】',
-            'series': 'ゆるキャン△ SEASON２',
-            'episode': 'ゆるキャン△ SEASON２ 全話一挙【無料ビデオ72時間】',
-            'series_number': 2,
-            'episode_number': 1,
-            'description': 'md5:9c5a3172ae763278f9303922f0ea5b17',
-        },
-        'skip': 'expired',
-    }, {
-        'url': 'https://abema.tv/video/episode/87-877_s1282_p31047',
-        'info_dict': {
-            'id': 'E8tvAnMJ7a9a5d',
-            'title': '第5話『光射す』',
-            'description': 'md5:56d4fc1b4f7769ded5f923c55bb4695d',
-            'thumbnail': r're:https://hayabusa\.io/.+',
-            'series': '相棒',
-            'episode': '第5話『光射す』',
-        },
-        'skip': 'expired',
-    }, {
-        'url': 'https://abema.tv/now-on-air/abema-anime',
-        'info_dict': {
-            'id': 'abema-anime',
-            # this varies
-            # 'title': '女子高生の無駄づかい 全話一挙【無料ビデオ72時間】',
-            'description': 'md5:55f2e61f46a17e9230802d7bcc913d5f',
-            'is_live': True,
-        },
-        'skip': 'Not supported until yt-dlp implements native live downloader OR AbemaTV can start a local HTTP server',
-    }]
     _USERTOKEN = None
     _DEVICE_ID = None
-    _TIMETABLE = None
     _MEDIATOKEN = None
 
     _SECRETKEY = b'v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhe'
 
-    def _generate_aks(self, deviceid):
+    @classmethod
+    def _generate_aks(cls, deviceid):
         deviceid = deviceid.encode('utf-8')
         # add 1 hour and then drop minute and secs
         ts_1hour = int((time_seconds(hours=9) // 3600 + 1) * 3600)
@@ -225,7 +164,7 @@ def _generate_aks(self, deviceid):
 
         def mix_once(nonce):
             nonlocal tmp
-            h = hmac.new(self._SECRETKEY, digestmod=hashlib.sha256)
+            h = hmac.new(cls._SECRETKEY, digestmod=hashlib.sha256)
             h.update(nonce)
             tmp = h.digest()
 
@@ -238,7 +177,7 @@ def mix_twist(nonce):
             nonlocal tmp
             mix_once(base64.urlsafe_b64encode(tmp).rstrip(b'=') + nonce)
 
-        mix_once(self._SECRETKEY)
+        mix_once(cls._SECRETKEY)
         mix_tmp(time_struct.tm_mon)
         mix_twist(deviceid)
         mix_tmp(time_struct.tm_mday % 5)
@@ -251,7 +190,7 @@ def _get_device_token(self):
         if self._USERTOKEN:
             return self._USERTOKEN
 
-        self._DEVICE_ID = str(uuid.uuid4())
+        AbemaTVBaseIE._DEVICE_ID = str(uuid.uuid4())
         aks = self._generate_aks(self._DEVICE_ID)
         user_data = self._download_json(
             'https://api.abema.io/v1/users', None, note='Authorizing',
@@ -262,7 +201,7 @@ def _get_device_token(self):
             headers={
                 'Content-Type': 'application/json',
             })
-        self._USERTOKEN = user_data['token']
+        AbemaTVBaseIE._USERTOKEN = user_data['token']
 
         # don't allow adding it 2 times or more, though it's guarded
         remove_opener(self._downloader, AbemaLicenseHandler)
@@ -274,7 +213,7 @@ def _get_media_token(self, invalidate=False, to_show=True):
         if not invalidate and self._MEDIATOKEN:
             return self._MEDIATOKEN
 
-        self._MEDIATOKEN = self._download_json(
+        AbemaTVBaseIE._MEDIATOKEN = self._download_json(
             'https://api.abema.io/v1/media/token', None, note='Fetching media token' if to_show else False,
             query={
                 'osName': 'android',
@@ -284,11 +223,82 @@ def _get_media_token(self, invalidate=False, to_show=True):
                 'appId': 'tv.abema',
                 'appVersion': '3.27.1'
             }, headers={
-                'Authorization': 'bearer ' + self._get_device_token()
+                'Authorization': f'bearer {self._get_device_token()}',
             })['token']
 
         return self._MEDIATOKEN
 
+    def _call_api(self, endpoint, video_id, query=None, note='Downloading JSON metadata'):
+        return self._download_json(
+            f'https://api.abema.io/{endpoint}', video_id, query=query or {},
+            note=note,
+            headers={
+                'Authorization': f'bearer {self._get_device_token()}',
+            })
+
+    def _extract_breadcrumb_list(self, webpage, video_id):
+        for jld in re.finditer(
+                r'(?is)</span></li></ul><script[^>]+type=(["\']?)application/ld\+json\1[^>]*>(?P<json_ld>.+?)</script>',
+                webpage):
+            jsonld = self._parse_json(jld.group('json_ld'), video_id, fatal=False)
+            if traverse_obj(jsonld, '@type') != 'BreadcrumbList':
+                continue
+            items = traverse_obj(jsonld, ('itemListElement', ..., 'name'))
+            if items:
+                return items
+        return []
+
+
+class AbemaTVIE(AbemaTVBaseIE):
+    _VALID_URL = r'https?://abema\.tv/(?P<type>now-on-air|video/episode|channels/.+?/slots)/(?P<id>[^?/]+)'
+    _NETRC_MACHINE = 'abematv'
+    _TESTS = [{
+        'url': 'https://abema.tv/video/episode/194-25_s2_p1',
+        'info_dict': {
+            'id': '194-25_s2_p1',
+            'title': '第1話 「チーズケーキ」　「モーニング再び」',
+            'series': '異世界食堂２',
+            'series_number': 2,
+            'episode': '第1話 「チーズケーキ」　「モーニング再び」',
+            'episode_number': 1,
+        },
+        'skip': 'expired',
+    }, {
+        'url': 'https://abema.tv/channels/anime-live2/slots/E8tvAnMJ7a9a5d',
+        'info_dict': {
+            'id': 'E8tvAnMJ7a9a5d',
+            'title': 'ゆるキャン△ SEASON２ 全話一挙【無料ビデオ72時間】',
+            'series': 'ゆるキャン△ SEASON２',
+            'episode': 'ゆるキャン△ SEASON２ 全話一挙【無料ビデオ72時間】',
+            'series_number': 2,
+            'episode_number': 1,
+            'description': 'md5:9c5a3172ae763278f9303922f0ea5b17',
+        },
+        'skip': 'expired',
+    }, {
+        'url': 'https://abema.tv/video/episode/87-877_s1282_p31047',
+        'info_dict': {
+            'id': 'E8tvAnMJ7a9a5d',
+            'title': '第5話『光射す』',
+            'description': 'md5:56d4fc1b4f7769ded5f923c55bb4695d',
+            'thumbnail': r're:https://hayabusa\.io/.+',
+            'series': '相棒',
+            'episode': '第5話『光射す』',
+        },
+        'skip': 'expired',
+    }, {
+        'url': 'https://abema.tv/now-on-air/abema-anime',
+        'info_dict': {
+            'id': 'abema-anime',
+            # this varies
+            # 'title': '女子高生の無駄づかい 全話一挙【無料ビデオ72時間】',
+            'description': 'md5:55f2e61f46a17e9230802d7bcc913d5f',
+            'is_live': True,
+        },
+        'skip': 'Not supported until yt-dlp implements native live downloader OR AbemaTV can start a local HTTP server',
+    }]
+    _TIMETABLE = None
+
     def _perform_login(self, username, password):
         if '@' in username:  # don't strictly check if it's email address or not
             ep, method = 'user/email', 'email'
@@ -301,13 +311,13 @@ def _perform_login(self, username, password):
                 method: username,
                 'password': password
             }).encode('utf-8'), headers={
-                'Authorization': 'bearer ' + self._get_device_token(),
+                'Authorization': f'bearer {self._get_device_token()}',
                 'Origin': 'https://abema.tv',
                 'Referer': 'https://abema.tv/',
                 'Content-Type': 'application/json',
             })
 
-        self._USERTOKEN = login_response['token']
+        AbemaTVBaseIE._USERTOKEN = login_response['token']
         self._get_media_token(True)
 
     def _real_extract(self, url):
@@ -442,6 +452,7 @@ def _real_extract(self, url):
 
 class AbemaTVTitleIE(AbemaTVBaseIE):
     _VALID_URL = r'https?://abema\.tv/video/title/(?P<id>[^?/]+)'
+    _PAGE_SIZE = 25
 
     _TESTS = [{
         'url': 'https://abema.tv/video/title/90-1597',
@@ -457,18 +468,39 @@ class AbemaTVTitleIE(AbemaTVBaseIE):
             'title': '真心が届く~僕とスターのオフィス・ラブ!?~',
         },
         'playlist_mincount': 16,
+    }, {
+        'url': 'https://abema.tv/video/title/25-102',
+        'info_dict': {
+            'id': '25-102',
+            'title': 'ソードアート・オンライン アリシゼーション',
+        },
+        'playlist_mincount': 24,
     }]
 
-    def _real_extract(self, url):
-        video_id = self._match_id(url)
-        webpage = self._download_webpage(url, video_id)
+    def _fetch_page(self, playlist_id, series_version, page):
+        programs = self._call_api(
+            f'v1/video/series/{playlist_id}/programs', playlist_id,
+            note=f'Downloading page {page + 1}',
+            query={
+                'seriesVersion': series_version,
+                'offset': str(page * self._PAGE_SIZE),
+                'order': 'seq',
+                'limit': str(self._PAGE_SIZE),
+            })
+        yield from (
+            self.url_result(f'https://abema.tv/video/episode/{x}')
+            for x in traverse_obj(programs, ('programs', ..., 'id'), default=[]))
 
-        playlist_title, breadcrumb = None, self._extract_breadcrumb_list(webpage, video_id)
-        if breadcrumb:
-            playlist_title = breadcrumb[-1]
+    def _entries(self, playlist_id, series_version):
+        return OnDemandPagedList(
+            functools.partial(self._fetch_page, playlist_id, series_version),
+            self._PAGE_SIZE)
 
-        playlist = [
-            self.url_result(urljoin('https://abema.tv/', mobj.group(1)))
-            for mobj in re.finditer(r'<li\s*class=".+?EpisodeList.+?"><a\s*href="(/[^"]+?)"', webpage)]
+    def _real_extract(self, url):
+        playlist_id = self._match_id(url)
+        series_info = self._call_api(f'v1/video/series/{playlist_id}', playlist_id)
 
-        return self.playlist_result(playlist, playlist_title=playlist_title, playlist_id=video_id)
+        return self.playlist_result(
+            self._entries(playlist_id, series_info['version']), playlist_id=playlist_id,
+            playlist_title=series_info.get('title'),
+            playlist_description=series_info.get('content'))


Test patch: