yt-dlp 2025.11.16.232923.dev0__py3-none-any.whl → 2025.11.19.232938.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -457,6 +457,8 @@ class FFmpegFD(ExternalFD):
457
457
 
458
458
  @classmethod
459
459
  def available(cls, path=None):
460
+ # TODO: Fix path for ffmpeg
461
+ # Fixme: This may be wrong when --ffmpeg-location is used
460
462
  return FFmpegPostProcessor().available
461
463
 
462
464
  def on_process_started(self, proc, stdin):
@@ -1,14 +1,9 @@
1
- import re
2
-
3
1
  from .common import InfoExtractor
4
2
  from ..utils import (
5
- ExtractorError,
6
- float_or_none,
7
- format_field,
8
3
  int_or_none,
9
- str_or_none,
10
- traverse_obj,
4
+ url_or_none,
11
5
  )
6
+ from ..utils.traversal import traverse_obj
12
7
 
13
8
 
14
9
  class MedalTVIE(InfoExtractor):
@@ -30,25 +25,8 @@ class MedalTVIE(InfoExtractor):
30
25
  'view_count': int,
31
26
  'like_count': int,
32
27
  'duration': 13,
33
- },
34
- }, {
35
- 'url': 'https://medal.tv/games/cod-cold-war/clips/2mA60jWAGQCBH',
36
- 'md5': 'fc7a3e4552ae8993c1c4006db46be447',
37
- 'info_dict': {
38
- 'id': '2mA60jWAGQCBH',
39
- 'ext': 'mp4',
40
- 'title': 'Quad Cold',
41
- 'description': 'Medal,https://medal.tv/desktop/',
42
- 'uploader': 'MowgliSB',
43
- 'timestamp': 1603165266,
44
- 'upload_date': '20201020',
45
- 'uploader_id': '10619174',
46
- 'thumbnail': 'https://cdn.medal.tv/10619174/thumbnail-34934644-720p.jpg?t=1080p&c=202042&missing',
47
- 'uploader_url': 'https://medal.tv/users/10619174',
48
- 'comment_count': int,
49
- 'view_count': int,
50
- 'like_count': int,
51
- 'duration': 23,
28
+ 'thumbnail': r're:https://cdn\.medal\.tv/ugcp/content-thumbnail/.*\.jpg',
29
+ 'tags': ['headshot', 'valorant', '4k', 'clutch', 'mornu'],
52
30
  },
53
31
  }, {
54
32
  'url': 'https://medal.tv/games/cod-cold-war/clips/2um24TWdty0NA',
@@ -57,12 +35,12 @@ class MedalTVIE(InfoExtractor):
57
35
  'id': '2um24TWdty0NA',
58
36
  'ext': 'mp4',
59
37
  'title': 'u tk me i tk u bigger',
60
- 'description': 'Medal,https://medal.tv/desktop/',
61
- 'uploader': 'Mimicc',
38
+ 'description': '',
39
+ 'uploader': 'zahl',
62
40
  'timestamp': 1605580939,
63
41
  'upload_date': '20201117',
64
42
  'uploader_id': '5156321',
65
- 'thumbnail': 'https://cdn.medal.tv/5156321/thumbnail-36787208-360p.jpg?t=1080p&c=202046&missing',
43
+ 'thumbnail': r're:https://cdn\.medal\.tv/source/.*\.png',
66
44
  'uploader_url': 'https://medal.tv/users/5156321',
67
45
  'comment_count': int,
68
46
  'view_count': int,
@@ -70,91 +48,77 @@ class MedalTVIE(InfoExtractor):
70
48
  'duration': 9,
71
49
  },
72
50
  }, {
73
- 'url': 'https://medal.tv/games/valorant/clips/37rMeFpryCC-9',
74
- 'only_matching': True,
75
- }, {
51
+ # API requires auth
76
52
  'url': 'https://medal.tv/games/valorant/clips/2WRj40tpY_EU9',
53
+ 'md5': '6c6bb6569777fd8b4ef7b33c09de8dcf',
54
+ 'info_dict': {
55
+ 'id': '2WRj40tpY_EU9',
56
+ 'ext': 'mp4',
57
+ 'title': '1v5 clutch',
58
+ 'description': '',
59
+ 'uploader': 'adny',
60
+ 'uploader_id': '6256941',
61
+ 'uploader_url': 'https://medal.tv/users/6256941',
62
+ 'comment_count': int,
63
+ 'view_count': int,
64
+ 'like_count': int,
65
+ 'duration': 25,
66
+ 'thumbnail': r're:https://cdn\.medal\.tv/source/.*\.jpg',
67
+ 'timestamp': 1612896680,
68
+ 'upload_date': '20210209',
69
+ },
70
+ 'expected_warnings': ['Video formats are not available through API'],
71
+ }, {
72
+ 'url': 'https://medal.tv/games/valorant/clips/37rMeFpryCC-9',
77
73
  'only_matching': True,
78
74
  }]
79
75
 
80
76
  def _real_extract(self, url):
81
77
  video_id = self._match_id(url)
82
78
 
83
- webpage = self._download_webpage(url, video_id, query={'mobilebypass': 'true'})
84
-
85
- hydration_data = self._search_json(
86
- r'<script[^>]*>[^<]*\bhydrationData\s*=', webpage,
87
- 'next data', video_id, end_pattern='</script>', fatal=False)
88
-
89
- clip = traverse_obj(hydration_data, ('clips', ...), get_all=False)
90
- if not clip:
91
- raise ExtractorError(
92
- 'Could not find video information.', video_id=video_id)
93
-
94
- title = clip['contentTitle']
95
-
96
- source_width = int_or_none(clip.get('sourceWidth'))
97
- source_height = int_or_none(clip.get('sourceHeight'))
98
-
99
- aspect_ratio = source_width / source_height if source_width and source_height else 16 / 9
100
-
101
- def add_item(container, item_url, height, id_key='format_id', item_id=None):
102
- item_id = item_id or '%dp' % height
103
- if item_id not in item_url:
104
- return
105
- container.append({
106
- 'url': item_url,
107
- id_key: item_id,
108
- 'width': round(aspect_ratio * height),
109
- 'height': height,
110
- })
79
+ content_data = self._download_json(
80
+ f'https://medal.tv/api/content/{video_id}', video_id,
81
+ headers={'Accept': 'application/json'})
111
82
 
112
83
  formats = []
113
- thumbnails = []
114
- for k, v in clip.items():
115
- if not (v and isinstance(v, str)):
116
- continue
117
- mobj = re.match(r'(contentUrl|thumbnail)(?:(\d+)p)?$', k)
118
- if not mobj:
119
- continue
120
- prefix = mobj.group(1)
121
- height = int_or_none(mobj.group(2))
122
- if prefix == 'contentUrl':
123
- add_item(
124
- formats, v, height or source_height,
125
- item_id=None if height else 'source')
126
- elif prefix == 'thumbnail':
127
- add_item(thumbnails, v, height, 'id')
128
-
129
- error = clip.get('error')
130
- if not formats and error:
131
- if error == 404:
132
- self.raise_no_formats(
133
- 'That clip does not exist.',
134
- expected=True, video_id=video_id)
135
- else:
136
- self.raise_no_formats(
137
- f'An unknown error occurred ({error}).',
138
- video_id=video_id)
139
-
140
- # Necessary because the id of the author is not known in advance.
141
- # Won't raise an issue if no profile can be found as this is optional.
142
- author = traverse_obj(hydration_data, ('profiles', ...), get_all=False) or {}
143
- author_id = str_or_none(author.get('userId'))
144
- author_url = format_field(author_id, None, 'https://medal.tv/users/%s')
84
+ if m3u8_url := url_or_none(content_data.get('contentUrlHls')):
85
+ formats.extend(self._extract_m3u8_formats(m3u8_url, video_id, 'mp4', m3u8_id='hls'))
86
+ if http_url := url_or_none(content_data.get('contentUrl')):
87
+ formats.append({
88
+ 'url': http_url,
89
+ 'format_id': 'http-source',
90
+ 'ext': 'mp4',
91
+ 'quality': 1,
92
+ })
93
+ formats = [fmt for fmt in formats if 'video/privacy-protected-guest' not in fmt['url']]
94
+ if not formats:
95
+ # Fallback, does not require auth
96
+ self.report_warning('Video formats are not available through API, falling back to social video URL')
97
+ urlh = self._request_webpage(
98
+ f'https://medal.tv/api/content/{video_id}/socialVideoUrl', video_id,
99
+ note='Checking social video URL')
100
+ formats.append({
101
+ 'url': urlh.url,
102
+ 'format_id': 'social-video',
103
+ 'ext': 'mp4',
104
+ 'quality': -1,
105
+ })
145
106
 
146
107
  return {
147
108
  'id': video_id,
148
- 'title': title,
149
109
  'formats': formats,
150
- 'thumbnails': thumbnails,
151
- 'description': clip.get('contentDescription'),
152
- 'uploader': author.get('displayName'),
153
- 'timestamp': float_or_none(clip.get('created'), 1000),
154
- 'uploader_id': author_id,
155
- 'uploader_url': author_url,
156
- 'duration': int_or_none(clip.get('videoLengthSeconds')),
157
- 'view_count': int_or_none(clip.get('views')),
158
- 'like_count': int_or_none(clip.get('likes')),
159
- 'comment_count': int_or_none(clip.get('comments')),
110
+ **traverse_obj(content_data, {
111
+ 'title': ('contentTitle', {str}),
112
+ 'description': ('contentDescription', {str}),
113
+ 'timestamp': ('created', {int_or_none(scale=1000)}),
114
+ 'duration': ('videoLengthSeconds', {int_or_none}),
115
+ 'view_count': ('views', {int_or_none}),
116
+ 'like_count': ('likes', {int_or_none}),
117
+ 'comment_count': ('comments', {int_or_none}),
118
+ 'uploader': ('poster', 'displayName', {str}),
119
+ 'uploader_id': ('poster', 'userId', {str}),
120
+ 'uploader_url': ('poster', 'userId', {str}, filter, {lambda x: x and f'https://medal.tv/users/{x}'}),
121
+ 'tags': ('tags', ..., {str}),
122
+ 'thumbnail': ('thumbnailUrl', {url_or_none}),
123
+ }),
160
124
  }
@@ -101,8 +101,8 @@ class SproutVideoIE(InfoExtractor):
101
101
  webpage = self._download_webpage(
102
102
  url, video_id, headers=traverse_obj(smuggled_data, {'Referer': 'referer'}))
103
103
  data = self._search_json(
104
- r'(?:var|const|let)\s+(?:dat|(?:player|video)Info|)\s*=\s*["\']', webpage, 'player info',
105
- video_id, contains_pattern=r'[A-Za-z0-9+/=]+', end_pattern=r'["\'];',
104
+ r'(?:window\.|(?:var|const|let)\s+)(?:dat|(?:player|video)Info|)\s*=\s*["\']', webpage,
105
+ 'player info', video_id, contains_pattern=r'[A-Za-z0-9+/=]+', end_pattern=r'["\'];',
106
106
  transform_source=lambda x: base64.b64decode(x).decode())
107
107
 
108
108
  # SproutVideo may send player info for 'SMPTE Color Monitor Test' [a791d7b71b12ecc52e]
@@ -1,18 +1,17 @@
1
- import json
1
+ import urllib.parse
2
2
 
3
3
  from .brightcove import BrightcoveNewIE
4
4
  from .common import InfoExtractor
5
5
  from .zype import ZypeIE
6
6
  from ..networking import HEADRequest
7
- from ..networking.exceptions import HTTPError
8
7
  from ..utils import (
9
8
  ExtractorError,
10
9
  filter_dict,
11
10
  parse_qs,
12
11
  smuggle_url,
13
- try_call,
14
12
  urlencode_postdata,
15
13
  )
14
+ from ..utils.traversal import traverse_obj
16
15
 
17
16
 
18
17
  class ThisOldHouseIE(InfoExtractor):
@@ -77,46 +76,43 @@ class ThisOldHouseIE(InfoExtractor):
77
76
  'only_matching': True,
78
77
  }]
79
78
 
80
- _LOGIN_URL = 'https://login.thisoldhouse.com/usernamepassword/login'
81
-
82
79
  def _perform_login(self, username, password):
83
- self._request_webpage(
84
- HEADRequest('https://www.thisoldhouse.com/insider'), None, 'Requesting session cookies')
85
- urlh = self._request_webpage(
86
- 'https://www.thisoldhouse.com/wp-login.php', None, 'Requesting login info',
87
- errnote='Unable to login', query={'redirect_to': 'https://www.thisoldhouse.com/insider'})
80
+ login_page = self._download_webpage(
81
+ 'https://www.thisoldhouse.com/insider-login', None, 'Downloading login page')
82
+ hidden_inputs = self._hidden_inputs(login_page)
83
+ response = self._download_json(
84
+ 'https://www.thisoldhouse.com/wp-admin/admin-ajax.php', None, 'Logging in',
85
+ headers={
86
+ 'Accept': 'application/json',
87
+ 'X-Requested-With': 'XMLHttpRequest',
88
+ }, data=urlencode_postdata(filter_dict({
89
+ 'action': 'onebill_subscriber_login',
90
+ 'email': username,
91
+ 'password': password,
92
+ 'pricingPlanTerm': hidden_inputs['pricing_plan_term'],
93
+ 'utm_parameters': hidden_inputs.get('utm_parameters'),
94
+ 'nonce': hidden_inputs['mdcr_onebill_login_nonce'],
95
+ })))
88
96
 
89
- try:
90
- auth_form = self._download_webpage(
91
- self._LOGIN_URL, None, 'Submitting credentials', headers={
92
- 'Content-Type': 'application/json',
93
- 'Referer': urlh.url,
94
- }, data=json.dumps(filter_dict({
95
- **{('client_id' if k == 'client' else k): v[0] for k, v in parse_qs(urlh.url).items()},
96
- 'tenant': 'thisoldhouse',
97
- 'username': username,
98
- 'password': password,
99
- 'popup_options': {},
100
- 'sso': True,
101
- '_csrf': try_call(lambda: self._get_cookies(self._LOGIN_URL)['_csrf'].value),
102
- '_intstate': 'deprecated',
103
- }), separators=(',', ':')).encode())
104
- except ExtractorError as e:
105
- if isinstance(e.cause, HTTPError) and e.cause.status == 401:
97
+ message = traverse_obj(response, ('data', 'message', {str}))
98
+ if not response['success']:
99
+ if message and 'Something went wrong' in message:
106
100
  raise ExtractorError('Invalid username or password', expected=True)
107
- raise
108
-
109
- self._request_webpage(
110
- 'https://login.thisoldhouse.com/login/callback', None, 'Completing login',
111
- data=urlencode_postdata(self._hidden_inputs(auth_form)))
101
+ raise ExtractorError(message or 'Login was unsuccessful')
102
+ if message and 'Your subscription is not active' in message:
103
+ self.report_warning(
104
+ f'{self.IE_NAME} said your subscription is not active. '
105
+ f'If your subscription is active, this could be caused by too many sign-ins, '
106
+ f'and you should instead try using {self._login_hint(method="cookies")[4:]}')
107
+ else:
108
+ self.write_debug(f'{self.IE_NAME} said: {message}')
112
109
 
113
110
  def _real_extract(self, url):
114
111
  display_id = self._match_id(url)
115
- webpage = self._download_webpage(url, display_id)
116
- if 'To Unlock This content' in webpage:
117
- self.raise_login_required(
118
- 'This video is only available for subscribers. '
119
- 'Note that --cookies-from-browser may not work due to this site using session cookies')
112
+ webpage, urlh = self._download_webpage_handle(url, display_id)
113
+ # If login response says inactive subscription, site redirects to frontpage for Insider content
114
+ if 'To Unlock This content' in webpage or urllib.parse.urlparse(urlh.url).path in ('', '/'):
115
+ self.raise_login_required('This video is only available for subscribers')
120
116
 
121
117
  video_url, video_id = self._search_regex(
122
118
  r'<iframe[^>]+src=[\'"]((?:https?:)?//(?:www\.)?thisoldhouse\.(?:chorus\.build|com)/videos/zype/([0-9a-f]{24})[^\'"]*)[\'"]',
@@ -192,7 +192,10 @@ class FFmpegPostProcessor(PostProcessor):
192
192
 
193
193
  @property
194
194
  def available(self):
195
- return bool(self._ffmpeg_location.get()) or self.basename is not None
195
+ # If we return that ffmpeg is available, then the basename property *must* be run
196
+ # (as doing so has side effects), and its value can never be None
197
+ # See: https://github.com/yt-dlp/yt-dlp/issues/12829
198
+ return self.basename is not None
196
199
 
197
200
  @property
198
201
  def executable(self):
yt_dlp/version.py CHANGED
@@ -1,8 +1,8 @@
1
1
  # Autogenerated by devscripts/update-version.py
2
2
 
3
- __version__ = '2025.11.16.232923'
3
+ __version__ = '2025.11.19.232938'
4
4
 
5
- RELEASE_GIT_HEAD = '854fded114f3b7b33693c2d3418575d04014aa4b'
5
+ RELEASE_GIT_HEAD = '2c9f0c3456057aff0631d9ea6d3eda70ffd8aabe'
6
6
 
7
7
  VARIANT = 'pip'
8
8
 
@@ -12,4 +12,4 @@ CHANNEL = 'nightly'
12
12
 
13
13
  ORIGIN = 'yt-dlp/yt-dlp-nightly-builds'
14
14
 
15
- _pkg_version = '2025.11.16.232923dev'
15
+ _pkg_version = '2025.11.19.232938dev'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yt-dlp
3
- Version: 2025.11.16.232923.dev0
3
+ Version: 2025.11.19.232938.dev0
4
4
  Summary: A feature-rich command-line audio/video downloader
5
5
  Project-URL: Documentation, https://github.com/yt-dlp/yt-dlp#readme
6
6
  Project-URL: Repository, https://github.com/yt-dlp/yt-dlp
@@ -11,7 +11,7 @@ yt_dlp/options.py,sha256=Icc0JRiKOzITWoMujE_ihEmkCS-uCcie42XhIh8LvS4,100388
11
11
  yt_dlp/plugins.py,sha256=EGmR0ydaahNspGrgszTNX4-YjHe93WOOhcw1gf6PZSs,8215
12
12
  yt_dlp/socks.py,sha256=oAuAfWM6jxI8A5hHDLEKq2U2-k9NyMB_z6nrKzNE9fg,8936
13
13
  yt_dlp/update.py,sha256=sY7gNFBQorzs7sEjRrqL5QOsTBNmGGa_FnpTtbxY1vA,25280
14
- yt_dlp/version.py,sha256=CQn4lqXci3AoCMS3s1SRJ_lFc_Cinp_LojsTxJ5SsXo,360
14
+ yt_dlp/version.py,sha256=w8KLeDP7zRg8yOZlFkKcl2phwjL8Q5CfIfJXot1fxNc,360
15
15
  yt_dlp/webvtt.py,sha256=ONkXaaNCZcX8pQhJn3iwIKyaQ34BtVDrMEdG6wRNZwM,11451
16
16
  yt_dlp/__pyinstaller/__init__.py,sha256=-c4Zo8nQGKAm8wc_LDscxMtK7zr_YhZwRnC9CMruUBE,72
17
17
  yt_dlp/__pyinstaller/hook-yt_dlp.py,sha256=5Rd0zV2pDskjY1KtT0wsjxv4hStx67sLCjUexsFvFus,1339
@@ -29,7 +29,7 @@ yt_dlp/downloader/__init__.py,sha256=ymTbNmY6tgAWZJ9yTkIeX3khDViBcdQMPl23Fp36Sso
29
29
  yt_dlp/downloader/bunnycdn.py,sha256=s18-DtSCtlRp1gyIo1B59AbEEeaX45rfWHHmJx0lLQM,1762
30
30
  yt_dlp/downloader/common.py,sha256=7i5c15Wf88GSR-TO11eQN5Y-GjcodbxnoJe4h6YNRTs,20700
31
31
  yt_dlp/downloader/dash.py,sha256=krbHwJRK8mIKH5WB3W4e8XcFlRm0gFgbmQBHtT8K5Kk,3936
32
- yt_dlp/downloader/external.py,sha256=poB_Z1s02IdLmqtCvTycUmaeevqpF8e48_eve2KXR0s,28814
32
+ yt_dlp/downloader/external.py,sha256=9WMzgAeirJZOnSblkGr7ic8OlsJo2_Y7ZAZqboa1WeY,28916
33
33
  yt_dlp/downloader/f4m.py,sha256=ab7pJ_EbrCeWpdYG0JMv7_hRchaYKGMTB1n490uwTWA,15326
34
34
  yt_dlp/downloader/fc2.py,sha256=OViAhUuJTWNGkvNy825WRUYQKNUjdn2IQentHRpL0bs,1324
35
35
  yt_dlp/downloader/fragment.py,sha256=GMb8erdSL19egbmqq_7jLdD_68OGIT_XpFfZWjOZG1M,21694
@@ -504,7 +504,7 @@ yt_dlp/extractor/matchtv.py,sha256=jheNxouYo0ya1S3Ge_9v4Q43RNdaANe8h62vxbs0qe8,1
504
504
  yt_dlp/extractor/mave.py,sha256=zgCzUHTLSbIPDsz55Z8AUdfdzmdg9sG22fkp39Dq008,7768
505
505
  yt_dlp/extractor/mbn.py,sha256=XKkbolnM1xFM62B5KJzWsd4fDLf7a000zq0Ielj3Ow0,3897
506
506
  yt_dlp/extractor/mdr.py,sha256=TT4CxNHkkZNHzP4WlYIoZFCKgBYexOwGk4B6j3X-jEA,5103
507
- yt_dlp/extractor/medaltv.py,sha256=wucgo6wGUI19YM2Lm771Vv1uqTvrtmSdEvMN2RCwwpA,5980
507
+ yt_dlp/extractor/medaltv.py,sha256=HyPlIymIGzzX45p2T6YuKhaP0clJl45rpsaRDUU94gY,4905
508
508
  yt_dlp/extractor/mediaite.py,sha256=tygRzaJKO28Fw1n4YPt-6kf_3A-VMrWi2yHw6v6PdYI,4937
509
509
  yt_dlp/extractor/mediaklikk.py,sha256=ALLmmk-6ECVHER2PPH4LAZuDm4-oMbz1L9DNGywshTo,4970
510
510
  yt_dlp/extractor/medialaan.py,sha256=QsgTXLkDYtejejUH_dgnUMi--Jy1-NtSh760ijZliwM,9206
@@ -817,7 +817,7 @@ yt_dlp/extractor/sportbox.py,sha256=9e-jrAZecabW415GA1kqX7ZyPOcgy03USCm1l5tPPuo,
817
817
  yt_dlp/extractor/sportdeutschland.py,sha256=BzFeQWp1zJ3vZWri8OIJ5-Ha8ehwqiyewYdqJPa2QIo,7255
818
818
  yt_dlp/extractor/spreaker.py,sha256=LrxFuEZlDLiZxMsb9UZCFWATye3Rr-XxgYNwToiD_ms,6466
819
819
  yt_dlp/extractor/springboardplatform.py,sha256=rzXEcHJjyiDRgLzqJr1swhUQEXuUo9wsbwon9lfpfPw,4341
820
- yt_dlp/extractor/sproutvideo.py,sha256=PirwyDD6fw_bRmvs3RavdH0Z14FWAhPZiJVrKxb_VQk,8637
820
+ yt_dlp/extractor/sproutvideo.py,sha256=70S0eepFVmT9a1HqdKyUU6w2vWBu29TgDBmttBXJFSw,8650
821
821
  yt_dlp/extractor/srgssr.py,sha256=V02L_3Jo4VvUDHmuI1YXIhyT_oo_J_7Lk45IFqyj_lM,9901
822
822
  yt_dlp/extractor/srmediathek.py,sha256=m8Z84hqZ3L80sSQGBbuPn88p5Oo89953vAMnGFjrj_A,4048
823
823
  yt_dlp/extractor/stacommu.py,sha256=6N79UplGydwTgEzsM7QuWPUv6vizPJzy8GYv3fJwals,9678
@@ -882,7 +882,7 @@ yt_dlp/extractor/thestar.py,sha256=LsMx9W2P3Qsf8NxA9Nth4MCh4RMMsacgafJm67OeD9Q,1
882
882
  yt_dlp/extractor/thesun.py,sha256=RrZwJO75EGhqMZLTAlxDfSO6lRs3Oql_ukVkpFZROBI,1656
883
883
  yt_dlp/extractor/theweatherchannel.py,sha256=MVQOtlNcPX8YB0X8lF-rNJHIMCYQ7DjSuuStfaA7aq8,4110
884
884
  yt_dlp/extractor/thisamericanlife.py,sha256=_2ijnZ3aXYYXosa_GcCysx5qE0lonHJYZVwpD93dmQU,1505
885
- yt_dlp/extractor/thisoldhouse.py,sha256=PyTZhejqFI2qpQQAJrQTIbocpOQ7XC2rau_7fd-_80s,5955
885
+ yt_dlp/extractor/thisoldhouse.py,sha256=YLnhWuuA0xMbY766tVDVKi-iaRwwmgOs8sdD-ydBFMs,5980
886
886
  yt_dlp/extractor/thisvid.py,sha256=dxN-I56UieWt92iS2VSXK7IckobVNQ6BYPgvOJ9vWJI,8628
887
887
  yt_dlp/extractor/threeqsdn.py,sha256=zNHqF2ELqulYpoUCp1YYPlf0tyPS2krsrEUkS0Cw8YQ,6219
888
888
  yt_dlp/extractor/threespeak.py,sha256=agG3Ue0h19dAknJHwrK9a3RBQB4aja-5cx1crkOCIUc,4025
@@ -1104,7 +1104,7 @@ yt_dlp/postprocessor/__init__.py,sha256=OWCnC8vk4BteCAIBVrnwMWr12Y6zy1PiBHmEnAZ9
1104
1104
  yt_dlp/postprocessor/common.py,sha256=TGv4iP7YWf__PmSSFWhrvshzZw3-yl8Urzoh0doSy-s,8424
1105
1105
  yt_dlp/postprocessor/embedthumbnail.py,sha256=WykLv12Jct9OX4SBPePT7HI8ykSMzaD4pyk8pGZYpMY,10530
1106
1106
  yt_dlp/postprocessor/exec.py,sha256=-Oz3sUph4mYQ-bbhT2nadLcHXS4LHiDDcaY83X6RJDs,1542
1107
- yt_dlp/postprocessor/ffmpeg.py,sha256=98dILzEV_37NtcfaUN7vzaENhPgiK_bthmSLJYUGqNY,48020
1107
+ yt_dlp/postprocessor/ffmpeg.py,sha256=PiVBJj_zIx7QXHt-aWcQ-YnFl3pWBQ5GJWp69Sjr0pI,48208
1108
1108
  yt_dlp/postprocessor/metadataparser.py,sha256=_tmPGbgQ95PBabSJBwqiuA00cpvq60AocKOYMKlmNKg,4381
1109
1109
  yt_dlp/postprocessor/modify_chapters.py,sha256=ehN1D-SGqGtY1F9vaWeGOWuBULnfPLvQ1QHtO58O3lU,17827
1110
1110
  yt_dlp/postprocessor/movefilesafterdownload.py,sha256=yfO2Waylcqrab0HJKY-PPTCYuxweSTKdEuGUq0fp2sI,1838
@@ -1120,13 +1120,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
1120
1120
  yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
1121
1121
  yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
1122
1122
  yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
1123
- yt_dlp-2025.11.16.232923.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1124
- yt_dlp-2025.11.16.232923.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=1p-zv2tZPh1gscLG3ceL7GGCzC4TQU8mS9wiqPS-oXE,164662
1125
- yt_dlp-2025.11.16.232923.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=hLa6lZnm7keENpNCjml9A88hbvefdsdoOpAiaNCVyHo,51488
1126
- yt_dlp-2025.11.16.232923.dev0.data/data/share/man/man1/yt-dlp.1,sha256=C33_xKvu5DD5SScnivPeV2EJEYSeJ1tPXYZnlJBDayc,159125
1127
- yt_dlp-2025.11.16.232923.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1128
- yt_dlp-2025.11.16.232923.dev0.dist-info/METADATA,sha256=kBd5RheZHZgvVwnxnnwcxtzPdODtspdeM8eCJ2YzXEQ,180054
1129
- yt_dlp-2025.11.16.232923.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1130
- yt_dlp-2025.11.16.232923.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1131
- yt_dlp-2025.11.16.232923.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1132
- yt_dlp-2025.11.16.232923.dev0.dist-info/RECORD,,
1123
+ yt_dlp-2025.11.19.232938.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1124
+ yt_dlp-2025.11.19.232938.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=1p-zv2tZPh1gscLG3ceL7GGCzC4TQU8mS9wiqPS-oXE,164662
1125
+ yt_dlp-2025.11.19.232938.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=hLa6lZnm7keENpNCjml9A88hbvefdsdoOpAiaNCVyHo,51488
1126
+ yt_dlp-2025.11.19.232938.dev0.data/data/share/man/man1/yt-dlp.1,sha256=C33_xKvu5DD5SScnivPeV2EJEYSeJ1tPXYZnlJBDayc,159125
1127
+ yt_dlp-2025.11.19.232938.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1128
+ yt_dlp-2025.11.19.232938.dev0.dist-info/METADATA,sha256=rToAPDje5DCXpY3AbGvdIHymBc0IAQU_Ft39PqECczg,180054
1129
+ yt_dlp-2025.11.19.232938.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1130
+ yt_dlp-2025.11.19.232938.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1131
+ yt_dlp-2025.11.19.232938.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1132
+ yt_dlp-2025.11.19.232938.dev0.dist-info/RECORD,,