mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-26 04:02:11 +00:00
[youtube] Correct handling when DASH manifest is not necessary to find all formats
This commit is contained in:
parent
baa3c3f0f6
commit
e65566a9cc
3 changed files with 14 additions and 3 deletions
|
@ -1333,7 +1333,9 @@ class YoutubeDL(object):
|
||||||
formats = info_dict.get('formats', [info_dict])
|
formats = info_dict.get('formats', [info_dict])
|
||||||
idlen = max(len('format code'),
|
idlen = max(len('format code'),
|
||||||
max(len(f['format_id']) for f in formats))
|
max(len(f['format_id']) for f in formats))
|
||||||
formats_s = [line(f, idlen) for f in formats]
|
formats_s = [
|
||||||
|
line(f, idlen) for f in formats
|
||||||
|
if f.get('preference') is None or f['preference'] >= -1000]
|
||||||
if len(formats) > 1:
|
if len(formats) > 1:
|
||||||
formats_s[0] += (' ' if self._format_note(formats[0]) else '') + '(worst)'
|
formats_s[0] += (' ' if self._format_note(formats[0]) else '') + '(worst)'
|
||||||
formats_s[-1] += (' ' if self._format_note(formats[-1]) else '') + '(best)'
|
formats_s[-1] += (' ' if self._format_note(formats[-1]) else '') + '(best)'
|
||||||
|
|
|
@ -92,6 +92,8 @@ class InfoExtractor(object):
|
||||||
by this field, regardless of all other values.
|
by this field, regardless of all other values.
|
||||||
-1 for default (order by other properties),
|
-1 for default (order by other properties),
|
||||||
-2 or smaller for less than default.
|
-2 or smaller for less than default.
|
||||||
|
< -1000 to hide the format (if there is
|
||||||
|
another one which is strictly better)
|
||||||
* language_preference Is this in the correct requested
|
* language_preference Is this in the correct requested
|
||||||
language?
|
language?
|
||||||
10 if it's what the URL is about,
|
10 if it's what the URL is about,
|
||||||
|
|
|
@ -256,7 +256,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
||||||
'135': {'ext': 'mp4', 'height': 480, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'135': {'ext': 'mp4', 'height': 480, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
||||||
'136': {'ext': 'mp4', 'height': 720, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'136': {'ext': 'mp4', 'height': 720, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
||||||
'137': {'ext': 'mp4', 'height': 1080, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'137': {'ext': 'mp4', 'height': 1080, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
||||||
'138': {'ext': 'mp4', 'height': 2160, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'138': {'ext': 'mp4', 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40}, # Height can vary (https://github.com/rg3/youtube-dl/issues/4559)
|
||||||
'160': {'ext': 'mp4', 'height': 144, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'160': {'ext': 'mp4', 'height': 144, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
||||||
'264': {'ext': 'mp4', 'height': 1440, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
'264': {'ext': 'mp4', 'height': 1440, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40},
|
||||||
'298': {'ext': 'mp4', 'height': 720, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40, 'fps': 60, 'vcodec': 'h264'},
|
'298': {'ext': 'mp4', 'height': 720, 'format_note': 'DASH video', 'acodec': 'none', 'preference': -40, 'fps': 60, 'vcodec': 'h264'},
|
||||||
|
@ -736,6 +736,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
||||||
'format_id': format_id,
|
'format_id': format_id,
|
||||||
'url': video_url,
|
'url': video_url,
|
||||||
'width': int_or_none(r.attrib.get('width')),
|
'width': int_or_none(r.attrib.get('width')),
|
||||||
|
'height': int_or_none(r.attrib.get('height')),
|
||||||
'tbr': int_or_none(r.attrib.get('bandwidth'), 1000),
|
'tbr': int_or_none(r.attrib.get('bandwidth'), 1000),
|
||||||
'asr': int_or_none(r.attrib.get('audioSamplingRate')),
|
'asr': int_or_none(r.attrib.get('audioSamplingRate')),
|
||||||
'filesize': filesize,
|
'filesize': filesize,
|
||||||
|
@ -746,7 +747,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
||||||
fo for fo in formats
|
fo for fo in formats
|
||||||
if fo['format_id'] == format_id)
|
if fo['format_id'] == format_id)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
f.update(self._formats.get(format_id, {}))
|
f.update(self._formats.get(format_id, {}).items())
|
||||||
formats.append(f)
|
formats.append(f)
|
||||||
else:
|
else:
|
||||||
existing_format.update(f)
|
existing_format.update(f)
|
||||||
|
@ -1040,6 +1041,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
||||||
self.report_warning(
|
self.report_warning(
|
||||||
'Skipping DASH manifest: %r' % e, video_id)
|
'Skipping DASH manifest: %r' % e, video_id)
|
||||||
else:
|
else:
|
||||||
|
# Hide the formats we found through non-DASH
|
||||||
|
dash_keys = set(df['format_id'] for df in dash_formats)
|
||||||
|
for f in formats:
|
||||||
|
if f['format_id'] in dash_keys:
|
||||||
|
f['format_id'] = 'nondash-%s' % f['format_id']
|
||||||
|
f['preference'] -= 10000
|
||||||
formats.extend(dash_formats)
|
formats.extend(dash_formats)
|
||||||
|
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
Loading…
Reference in a new issue