1
0
mirror of https://github.com/l1ving/youtube-dl synced 2025-02-15 20:32:52 +08:00

Added codec_preference

and audio_codec_preference
This commit is contained in:
pukkandan 2020-09-11 01:32:19 +05:30
parent a9dc62af6f
commit e977b73535
2 changed files with 45 additions and 14 deletions

View File

@ -1362,8 +1362,9 @@ class InfoExtractor(object):
sort = self._downloader.params.get('format_sort', '') sort = self._downloader.params.get('format_sort', '')
sort = sort.split(',') if isinstance(sort, str) else [] sort = sort.split(',') if isinstance(sort, str) else []
if self._downloader.params.get('verbose', False): if self._downloader.params.get('verbose', False):
self._downloader.to_screen('[debug] Sort order diven by user: %s' % sort) self._downloader.to_screen('[debug] Sort order given by user: %s' % sort)
self._downloader.to_screen('[debug] Sort order diven by extractor: %s' % field_preference) if field_preference:
self._downloader.to_screen('[debug] Sort order given by extractor: %s' % ','.join(field_preference))
return (tuple() return (tuple()
if self._downloader.params.get('format_sort_force') if self._downloader.params.get('format_sort_force')
@ -1372,11 +1373,11 @@ class InfoExtractor(object):
(tuple(field_preference) (tuple(field_preference)
if isinstance(field_preference, (list, tuple)) if isinstance(field_preference, (list, tuple))
else tuple()) + \ else tuple()) + \
('preference', 'language_preference', 'quality', 'tbr', # default order ('preference', 'language_preference', 'quality', # default order
'filesize', 'vbr', 'height', 'width', 'tbr', 'filesize', 'vbr', 'height', 'width',
'proto_preference', 'ext_preference', 'proto_preference', 'ext_preference', 'codec_preference',
'abr', 'audio_ext_preference', 'fps', 'abr', 'audio_ext_preference', 'audio_codec_preference',
'filesize_approx', 'source_preference', 'format_id') 'fps', 'filesize_approx', 'source_preference', 'format_id')
sort = {} sort = {}
for item in _get_sort_list(): for item in _get_sort_list():
@ -1433,17 +1434,45 @@ class InfoExtractor(object):
ext_preference = -1 ext_preference = -1
audio_ext_preference = 0 audio_ext_preference = 0
if f.get('vcodec') == 'none':
codec_preference = -1
elif not f.get('vcodec'):
codec_preference = 0
else:
codec_preference = 10
ORDER = ['av01', 'vp9', '(h265|he?vc?)', '(h264|avc)', 'vp8', '(mp4v|h263)', 'theora']
for i in ORDER:
if re.match(i, f.get('vcodec')):
break
else:
codec_preference -= 1
if f.get('acodec') == 'none':
audio_codec_preference = -1
elif not f.get('acodec'):
audio_codec_preference = 0
else:
audio_codec_preference = 10
ORDER = ['opus', 'vorbis', 'aac', 'mp4a', 'mp3', 'e?a?c-?3', 'dts']
for i in ORDER:
if re.match(i, f.get('acodec')):
break
else:
audio_codec_preference -= 1
prefVars = {'preference': preference, prefVars = {'preference': preference,
'proto_preference': proto_preference, 'proto_preference': proto_preference,
'ext_preference': ext_preference, 'ext_preference': ext_preference,
'audio_ext_preference': audio_ext_preference} 'audio_ext_preference': audio_ext_preference,
'codec_preference': codec_preference,
'audio_codec_preference': audio_codec_preference}
return tuple( return tuple(
(-1 if field != 'format_id' and sort[field] else 1)*( (-1 if field != 'format_id' and sort[field] else 1)*(
prefVars.get(field) prefVars.get(field)
if prefVars.get(field) is not None if prefVars.get(field) is not None
else (f.get(field) if f.get(field) is not None else (f.get(field) if f.get(field) is not None
else ('' if field == 'format_id' else -1))) else ('' if field == 'format_id' else -sort[field])))
for field in sort) for field in sort)
formats.sort(key=_formats_key) formats.sort(key=_formats_key)

View File

@ -398,10 +398,12 @@ def parseOpts(overrideArguments=None):
'--format-sort', '--format-sort',
action='store', dest='format_sort', metavar='FORMAT', default=None, action='store', dest='format_sort', metavar='FORMAT', default=None,
help=( help=(
'Sort the formats by the fields given (e.g. height,width,-filesize,tbr). ' 'Sort the formats by the fields given (e.g. height,width,+filesize). '
'Available fields: language_preference, quality, height, width, fps, ' 'Default order: preference, language_preference, quality, '
'filesize, filesize_approx, tbr, vbr, abr, format_id, preference' 'tbr, filesize, vbr, height, width, '
'proto_preference, ext_preference, audio_ext_preference, source_preference. ' 'proto_preference, ext_preference, codec_preference, '
'abr, audio_ext_preference, audio_codec_preference, '
'fps, filesize_approx, source_preference, format_id.'
'Prefix the field (except format_id) by a + to sort it in reverse. ' 'Prefix the field (except format_id) by a + to sort it in reverse. '
'preference and language_preference will always have the highest priority ' 'preference and language_preference will always have the highest priority '
'unless --format-sort-force is given')) 'unless --format-sort-force is given'))
@ -410,7 +412,7 @@ def parseOpts(overrideArguments=None):
action='store_true', dest='format_sort_force', metavar='FORMAT', default=False, action='store_true', dest='format_sort_force', metavar='FORMAT', default=False,
help=( help=(
'User specified sort order takes priority even over ' 'User specified sort order takes priority even over '
'preference and language_preference')) 'preference, language_preference and quality'))
video_format.add_option( video_format.add_option(
'--all-formats', '--all-formats',
action='store_const', dest='format', const='all', action='store_const', dest='format', const='all',