mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-26 02:55:17 +00:00
[utils] FormatSorter
: Improve size
and br
Closes #1596 Previously, when some formats have accurate size and some approximate, the ones with accurate size was always prioritized For formats with known tbr and unknown vbr/abr, we were setting (vbr=tbr, abr=0) for sorting to work. This is no longer needed. Authored by pukkandan, u-spec-png
This commit is contained in:
parent
5cc09c004b
commit
eedda5252c
2 changed files with 15 additions and 20 deletions
|
@ -917,8 +917,6 @@ def test_parse_m3u8_formats(self):
|
||||||
'acodec': 'mp4a.40.2',
|
'acodec': 'mp4a.40.2',
|
||||||
'video_ext': 'mp4',
|
'video_ext': 'mp4',
|
||||||
'audio_ext': 'none',
|
'audio_ext': 'none',
|
||||||
'vbr': 263.851,
|
|
||||||
'abr': 0,
|
|
||||||
}, {
|
}, {
|
||||||
'format_id': '577',
|
'format_id': '577',
|
||||||
'format_index': None,
|
'format_index': None,
|
||||||
|
@ -936,8 +934,6 @@ def test_parse_m3u8_formats(self):
|
||||||
'acodec': 'mp4a.40.2',
|
'acodec': 'mp4a.40.2',
|
||||||
'video_ext': 'mp4',
|
'video_ext': 'mp4',
|
||||||
'audio_ext': 'none',
|
'audio_ext': 'none',
|
||||||
'vbr': 577.61,
|
|
||||||
'abr': 0,
|
|
||||||
}, {
|
}, {
|
||||||
'format_id': '915',
|
'format_id': '915',
|
||||||
'format_index': None,
|
'format_index': None,
|
||||||
|
@ -955,8 +951,6 @@ def test_parse_m3u8_formats(self):
|
||||||
'acodec': 'mp4a.40.2',
|
'acodec': 'mp4a.40.2',
|
||||||
'video_ext': 'mp4',
|
'video_ext': 'mp4',
|
||||||
'audio_ext': 'none',
|
'audio_ext': 'none',
|
||||||
'vbr': 915.905,
|
|
||||||
'abr': 0,
|
|
||||||
}, {
|
}, {
|
||||||
'format_id': '1030',
|
'format_id': '1030',
|
||||||
'format_index': None,
|
'format_index': None,
|
||||||
|
@ -974,8 +968,6 @@ def test_parse_m3u8_formats(self):
|
||||||
'acodec': 'mp4a.40.2',
|
'acodec': 'mp4a.40.2',
|
||||||
'video_ext': 'mp4',
|
'video_ext': 'mp4',
|
||||||
'audio_ext': 'none',
|
'audio_ext': 'none',
|
||||||
'vbr': 1030.138,
|
|
||||||
'abr': 0,
|
|
||||||
}, {
|
}, {
|
||||||
'format_id': '1924',
|
'format_id': '1924',
|
||||||
'format_index': None,
|
'format_index': None,
|
||||||
|
@ -993,8 +985,6 @@ def test_parse_m3u8_formats(self):
|
||||||
'acodec': 'mp4a.40.2',
|
'acodec': 'mp4a.40.2',
|
||||||
'video_ext': 'mp4',
|
'video_ext': 'mp4',
|
||||||
'audio_ext': 'none',
|
'audio_ext': 'none',
|
||||||
'vbr': 1924.009,
|
|
||||||
'abr': 0,
|
|
||||||
}],
|
}],
|
||||||
{
|
{
|
||||||
'en': [{
|
'en': [{
|
||||||
|
|
|
@ -5669,6 +5669,7 @@ def orderedSet_from_options(options, alias_dict, *, use_regex=False, start=None)
|
||||||
return orderedSet(requested)
|
return orderedSet(requested)
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Rewrite
|
||||||
class FormatSorter:
|
class FormatSorter:
|
||||||
regex = r' *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$'
|
regex = r' *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$'
|
||||||
|
|
||||||
|
@ -5717,8 +5718,10 @@ class FormatSorter:
|
||||||
'source': {'convert': 'float', 'field': 'source_preference', 'default': -1},
|
'source': {'convert': 'float', 'field': 'source_preference', 'default': -1},
|
||||||
|
|
||||||
'codec': {'type': 'combined', 'field': ('vcodec', 'acodec')},
|
'codec': {'type': 'combined', 'field': ('vcodec', 'acodec')},
|
||||||
'br': {'type': 'combined', 'field': ('tbr', 'vbr', 'abr'), 'same_limit': True},
|
'br': {'type': 'multiple', 'field': ('tbr', 'vbr', 'abr'),
|
||||||
'size': {'type': 'combined', 'same_limit': True, 'field': ('filesize', 'fs_approx')},
|
'function': lambda it: next(filter(None, it), None)},
|
||||||
|
'size': {'type': 'multiple', 'field': ('filesize', 'fs_approx'),
|
||||||
|
'function': lambda it: next(filter(None, it), None)},
|
||||||
'ext': {'type': 'combined', 'field': ('vext', 'aext')},
|
'ext': {'type': 'combined', 'field': ('vext', 'aext')},
|
||||||
'res': {'type': 'multiple', 'field': ('height', 'width'),
|
'res': {'type': 'multiple', 'field': ('height', 'width'),
|
||||||
'function': lambda it: (lambda l: min(l) if l else 0)(tuple(filter(None, it)))},
|
'function': lambda it: (lambda l: min(l) if l else 0)(tuple(filter(None, it)))},
|
||||||
|
@ -5949,13 +5952,15 @@ def calculate_preference(self, format):
|
||||||
format['preference'] = -100
|
format['preference'] = -100
|
||||||
|
|
||||||
# Determine missing bitrates
|
# Determine missing bitrates
|
||||||
if format.get('tbr') is None:
|
if format.get('vcodec') == 'none':
|
||||||
if format.get('vbr') is not None and format.get('abr') is not None:
|
format['vbr'] = 0
|
||||||
format['tbr'] = format.get('vbr', 0) + format.get('abr', 0)
|
if format.get('acodec') == 'none':
|
||||||
else:
|
format['abr'] = 0
|
||||||
if format.get('vcodec') != 'none' and format.get('vbr') is None:
|
if not format.get('vbr') and format.get('vcodec') != 'none':
|
||||||
format['vbr'] = format.get('tbr') - format.get('abr', 0)
|
format['vbr'] = try_call(lambda: format['tbr'] - format['abr']) or None
|
||||||
if format.get('acodec') != 'none' and format.get('abr') is None:
|
if not format.get('abr') and format.get('acodec') != 'none':
|
||||||
format['abr'] = format.get('tbr') - format.get('vbr', 0)
|
format['abr'] = try_call(lambda: format['tbr'] - format['vbr']) or None
|
||||||
|
if not format.get('tbr'):
|
||||||
|
format['tbr'] = try_call(lambda: format['vbr'] + format['abr']) or None
|
||||||
|
|
||||||
return tuple(self._calculate_field_preference(format, field) for field in self._order)
|
return tuple(self._calculate_field_preference(format, field) for field in self._order)
|
||||||
|
|
Loading…
Reference in a new issue