Repository: yt-dlp
Issue: Can't download video (and subtitles) when many comments
Labels: question

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

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

### Checklist

- [X] I'm reporting a bug unrelated to a specific site
- [X] I've verified that I have **updated yt-dlp to nightly or master** ([update instructions](https://github.com/yt-dlp/yt-dlp#update-channels))
- [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/yt-dlp/yt-dlp/wiki/FAQ#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 [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and 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)

### Provide a description that is worded well enough to be understood

Yt-dlp downloads video page, parses it, extracts links (subtitles, video stream), downloads comments, and then downloads content using extracted links.

The problem is downloading comment can take too long, and extracted links become expired, producing 404 error.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU', '--get-comments', '--write-subs', 'https://www.youtube.com/watch?v=uD4izuDMUQA']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8 (No ANSI), error utf-8 (No ANSI), screen utf-8 (No ANSI)
[debug] yt-dlp version stable@2024.12.13 from yt-dlp/yt-dlp [542166962] (zip)
[debug] Python 3.9.4 (CPython x86_64 64bit) - macOS-10.13.6-x86_64-i386-64bit (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: ffmpeg 4.4.1 (setts), ffprobe 4.4.1, phantomjs 2.1.1
[debug] Optional libraries: certifi-2021.10.08, mutagen-1.45.1, requests-2.27.1, sqlite3-3.34.0, urllib3-1.26.9
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1837 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: stable@2024.12.13 from yt-dlp/yt-dlp
yt-dlp is up to date (stable@2024.12.13 from yt-dlp/yt-dlp)
[youtube] Extracting URL: https://www.youtube.com/watch?v=uD4izuDMUQA
[youtube] uD4izuDMUQA: Downloading webpage
[youtube] uD4izuDMUQA: Downloading ios player API JSON
[youtube] uD4izuDMUQA: Downloading mweb player API JSON
[debug] Loading youtube-nsig.03dbdfab from cache
[debug] [youtube] Decrypted nsig 1S4AiOPPlr8bwtmrL => XM5rNJw4_pWm0Q
[debug] Loading youtube-nsig.03dbdfab from cache
[debug] [youtube] Decrypted nsig smffvg_Fcc0uOm2Al => N-Y9lkp46e7kvg
[youtube] uD4izuDMUQA: Downloading m3u8 information
[info] uD4izuDMUQA: Downloading subtitles: en
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec, channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
[youtube] Downloading comment section API JSON
[youtube] Downloading ~330599 comments
[youtube] Sorting comments by newest first
[youtube] Downloading comment API JSON page 1 (0/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (1/~330599)
[youtube]        Downloading comment replies API JSON page 1 (11/~330599)
[youtube]        Downloading comment replies API JSON page 2 (61/~330599)
[youtube]        Downloading comment replies API JSON page 3 (111/~330599)
[youtube]        Downloading comment replies API JSON page 4 (161/~330599)
[youtube]        Downloading comment replies API JSON page 5 (211/~330599)
[youtube]        Downloading comment replies API JSON page 6 (261/~330599)
[youtube]        Downloading comment replies API JSON page 7 (311/~330599)
[youtube]        Downloading comment replies API JSON page 8 (361/~330599)
[youtube]        Downloading comment replies API JSON page 9 (411/~330599)
[youtube]        Downloading comment replies API JSON page 10 (461/~330599)
[youtube]        Downloading comment replies API JSON page 11 (511/~330599)
[youtube]        Downloading comment replies API JSON page 12 (561/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (589/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (591/~330599)
[youtube] Downloading comment API JSON page 2 (600/~330599)
[youtube] Downloading comment API JSON page 3 (620/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (633/~330599)
[youtube] Downloading comment API JSON page 4 (641/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (642/~330599)
[youtube] Downloading comment API JSON page 5 (662/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (672/~330599)
[youtube] Downloading comment API JSON page 6 (683/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (688/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (700/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (707/~330599)
[youtube] Downloading comment API JSON page 7 (713/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (724/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (726/~330599)
[youtube] Downloading comment API JSON page 8 (737/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (747/~330599)
[youtube] Downloading comment API JSON page 9 (758/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (766/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (769/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (778/~330599)
[youtube] Downloading comment API JSON page 10 (781/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (788/~330599)
[youtube] Downloading comment API JSON page 11 (802/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (811/~330599)
[youtube] Downloading comment API JSON page 12 (823/~330599)
[youtube] Downloading comment API JSON page 13 (843/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (853/~330599)
[youtube] Downloading comment API JSON page 14 (865/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (870/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (872/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (882/~330599)
[youtube]     Downloading comment API JSON reply thread 4 (884/~330599)
[youtube] Downloading comment API JSON page 15 (890/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (891/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (911/~330599)
[youtube] Downloading comment API JSON page 16 (913/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (929/~330599)
[youtube] Downloading comment API JSON page 17 (934/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (945/~330599)
[youtube] Downloading comment API JSON page 18 (955/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (961/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (971/~330599)
[youtube] Downloading comment API JSON page 19 (979/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (987/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (997/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (1003/~330599)
...
[youtube] Downloading comment API JSON page 10700 (328997/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329007/~330599)
[youtube] Downloading comment API JSON page 10701 (329018/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329028/~330599)
[youtube] Downloading comment API JSON page 10702 (329042/~330599)
[youtube] Downloading comment API JSON page 10703 (329062/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329078/~330599)
[youtube] Downloading comment API JSON page 10704 (329083/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329085/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329095/~330599)
[youtube] Downloading comment API JSON page 10705 (329112/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329124/~330599)
[youtube] Downloading comment API JSON page 10706 (329133/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329150/~330599)
[youtube] Downloading comment API JSON page 10707 (329157/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329168/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329179/~330599)
[youtube] Downloading comment API JSON page 10708 (329180/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329196/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329206/~330599)
[youtube] Downloading comment API JSON page 10709 (329212/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329214/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329231/~330599)
[youtube] Downloading comment API JSON page 10710 (329240/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329246/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329252/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329258/~330599)
[youtube] Downloading comment API JSON page 10711 (329263/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329267/~330599)
[youtube] Downloading comment API JSON page 10712 (329284/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329288/~330599)
[youtube] Downloading comment API JSON page 10713 (329306/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329309/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329320/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329334/~330599)
[youtube] Downloading comment API JSON page 10714 (329338/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329350/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329360/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329369/~330599)
[youtube] Downloading comment API JSON page 10715 (329371/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329386/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329392/~330599)
[youtube] Downloading comment API JSON page 10716 (329393/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329402/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329413/~330599)
[youtube] Downloading comment API JSON page 10717 (329419/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329427/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329432/~330599)
[youtube] Downloading comment API JSON page 10718 (329441/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329461/~330599)
[youtube] Downloading comment API JSON page 10719 (329462/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329468/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329472/~330599)
[youtube] Downloading comment API JSON page 10720 (329484/~330599)
[youtube] Downloading comment API JSON page 10721 (329504/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329524/~330599)
[youtube] Downloading comment API JSON page 10722 (329526/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329527/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329536/~330599)
[youtube] Downloading comment API JSON page 10723 (329555/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329565/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329567/~330599)
[youtube] Downloading comment API JSON page 10724 (329578/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329591/~330599)
[youtube] Downloading comment API JSON page 10725 (329599/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329600/~330599)
[youtube] Downloading comment API JSON page 10726 (329620/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329628/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329649/~330599)
[youtube] Downloading comment API JSON page 10727 (329651/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329653/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329663/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329673/~330599)
[youtube] Downloading comment API JSON page 10728 (329687/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329694/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329698/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329702/~330599)
[youtube] Downloading comment API JSON page 10729 (329719/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329737/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329747/~330599)
[youtube] Downloading comment API JSON page 10730 (329776/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329787/~330599)
[youtube] Downloading comment API JSON page 10731 (329803/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329812/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329817/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329823/~330599)
[youtube] Downloading comment API JSON page 10732 (329828/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329837/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329843/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329848/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329858/~330599)
[youtube] Downloading comment API JSON page 10733 (329863/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329879/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329889/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329912/~330599)
[youtube] Downloading comment API JSON page 10734 (329914/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329922/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329926/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329933/~330599)
[youtube] Downloading comment API JSON page 10735 (329945/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329949/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329955/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329963/~330599)
[youtube]     Downloading comment API JSON reply thread 4 (329967/~330599)
[youtube]     Downloading comment API JSON reply thread 5 (329970/~330599)
[youtube] Downloading comment API JSON page 10736 (329975/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (329976/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (329979/~330599)
[youtube]        Downloading comment replies API JSON page 1 (329989/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (329993/~330599)
[youtube]     Downloading comment API JSON reply thread 4 (329999/~330599)
[youtube]        Downloading comment replies API JSON page 1 (330009/~330599)
[youtube]        Downloading comment replies API JSON page 2 (330059/~330599)
[youtube]     Downloading comment API JSON reply thread 5 (330067/~330599)
[youtube]        Downloading comment replies API JSON page 1 (330077/~330599)
[youtube]        Downloading comment replies API JSON page 2 (330127/~330599)
[youtube]        Downloading comment replies API JSON page 3 (330177/~330599)
[youtube]        Downloading comment replies API JSON page 4 (330227/~330599)
[youtube]        Downloading comment replies API JSON page 5 (330277/~330599)
[youtube]        Downloading comment replies API JSON page 6 (330327/~330599)
[youtube]        Downloading comment replies API JSON page 7 (330377/~330599)
[youtube]        Downloading comment replies API JSON page 8 (330427/~330599)
[youtube]        Downloading comment replies API JSON page 9 (330477/~330599)
[youtube]        Downloading comment replies API JSON page 10 (330527/~330599)
[youtube]     Downloading comment API JSON reply thread 6 (330538/~330599)
[youtube]     Downloading comment API JSON reply thread 7 (330540/~330599)
[youtube]        Downloading comment replies API JSON page 1 (330550/~330599)
[youtube]     Downloading comment API JSON reply thread 8 (330557/~330599)
[youtube] Downloading comment API JSON page 10737 (330558/~330599)
[youtube]     Downloading comment API JSON reply thread 1 (330564/~330599)
[youtube]     Downloading comment API JSON reply thread 2 (330568/~330599)
[youtube]     Downloading comment API JSON reply thread 3 (330574/~330599)
[youtube] Extracted 330580 comments
[debug] Default format spec: bestvideo*+bestaudio/best
[info] uD4izuDMUQA: Downloading 1 format(s): 401+251
[info] Writing video subtitles to: TIMELAPSE OF THE FUTURE： A Journey to the End of Time (4K) [uD4izuDMUQA].en.vtt
[debug] Invoking http downloader on "https://www.youtube.com/api/timedtext?v=uD4izuDMUQA&ei=QQxiZ_uZN-_UxN8P0ufXoQc&caps=asr&opi=112496729&exp=xbt&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1734504113&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cexp%2Cxoaf&signature=5C32FB21273E3176945C8CDF31245E71038E40BD.19F6AEC3D4E5045E0BAFC6CB0B74DAACB6B8DBAC&key=yt8&lang=en&fmt=vtt"
ERROR: Unable to download video subtitles for 'en': HTTP Error 404: Not Found
Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_urllib.py", line 398, in _send
    res = opener.open(urllib_req, timeout=self._calculate_timeout(request))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 523, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 632, in http_response
    response = self.parent.error(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 561, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 641, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 4351, in _write_subtitles
    self.dl(sub_filename, sub_copy, subtitle=True)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3199, in dl
    return fd.download(name, new_info, subtitle)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 464, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 367, in real_download
    establish_connection()
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 118, in establish_connection
    ctx.data = self.ydl.urlopen(request)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 4162, in urlopen
    return self._request_director.send(req)
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/common.py", line 117, in send
    response = handler.send(request)
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_helper.py", line 208, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/common.py", line 340, in send
    return self._send(request)
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_urllib.py", line 403, in _send
    raise HTTPError(UrllibResponseAdapter(e.fp), redirect_loop='redirect error' in str(e)) from e
yt_dlp.networking.exceptions.HTTPError: HTTP Error 404: Not Found

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1624, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1780, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1839, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3011, in process_video_result
    self.process_info(new_info)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 177, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3267, in process_info
    sub_files = self._write_subtitles(info_dict, temp_filename)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 4359, in _write_subtitles
    raise DownloadError(msg)
yt_dlp.utils.DownloadError: Unable to download video subtitles for 'en': HTTP Error 404: Not Found
```