]> jfr.im git - yt-dlp.git/commitdiff
[formatsort] Remove misuse of 'preference'
authorpukkandan <redacted>
Thu, 18 Feb 2021 22:03:16 +0000 (03:33 +0530)
committerpukkandan <redacted>
Thu, 18 Feb 2021 22:03:45 +0000 (03:33 +0530)
'preference' is to be used only when the format is better that ALL qualities of a lower preference irrespective of ANY sorting order the user requests. See deezer.py for correct use of this

In the older sorting method, `preference`, `quality` and `language_preference` were functionally almost equivalent. So these disparities doesn't really matter there

Also, despite what the documentation says, the default for `preference` was actually 0 and not -1. I have tried to correct this and also account for it when converting `preference` to `quality`

61 files changed:
youtube_dlc/extractor/adobetv.py
youtube_dlc/extractor/arcpublishing.py
youtube_dlc/extractor/arte.py
youtube_dlc/extractor/beatport.py
youtube_dlc/extractor/bilibili.py
youtube_dlc/extractor/bokecc.py
youtube_dlc/extractor/bpb.py
youtube_dlc/extractor/cammodels.py
youtube_dlc/extractor/canalplus.py
youtube_dlc/extractor/cctv.py
youtube_dlc/extractor/common.py
youtube_dlc/extractor/coub.py
youtube_dlc/extractor/crunchyroll.py
youtube_dlc/extractor/dispeak.py
youtube_dlc/extractor/drtv.py
youtube_dlc/extractor/espn.py
youtube_dlc/extractor/facebook.py
youtube_dlc/extractor/firsttv.py
youtube_dlc/extractor/flickr.py
youtube_dlc/extractor/go.py
youtube_dlc/extractor/hearthisat.py
youtube_dlc/extractor/ign.py
youtube_dlc/extractor/imgur.py
youtube_dlc/extractor/iqiyi.py
youtube_dlc/extractor/kuwo.py
youtube_dlc/extractor/lifenews.py
youtube_dlc/extractor/limelight.py
youtube_dlc/extractor/liveleak.py
youtube_dlc/extractor/livestream.py
youtube_dlc/extractor/mdr.py
youtube_dlc/extractor/mediasite.py
youtube_dlc/extractor/msn.py
youtube_dlc/extractor/muenchentv.py
youtube_dlc/extractor/nba.py
youtube_dlc/extractor/noco.py
youtube_dlc/extractor/npo.py
youtube_dlc/extractor/ntvde.py
youtube_dlc/extractor/ora.py
youtube_dlc/extractor/picarto.py
youtube_dlc/extractor/playtvak.py
youtube_dlc/extractor/qqmusic.py
youtube_dlc/extractor/radiofrance.py
youtube_dlc/extractor/rtl2.py
youtube_dlc/extractor/rtp.py
youtube_dlc/extractor/rutv.py
youtube_dlc/extractor/sina.py
youtube_dlc/extractor/soundcloud.py
youtube_dlc/extractor/srgssr.py
youtube_dlc/extractor/storyfire.py
youtube_dlc/extractor/tele13.py
youtube_dlc/extractor/telemb.py
youtube_dlc/extractor/threeqsdn.py
youtube_dlc/extractor/uol.py
youtube_dlc/extractor/urort.py
youtube_dlc/extractor/vidme.py
youtube_dlc/extractor/vimeo.py
youtube_dlc/extractor/vzaar.py
youtube_dlc/extractor/wistia.py
youtube_dlc/extractor/xnxx.py
youtube_dlc/extractor/xstream.py
youtube_dlc/extractor/zattoo.py

index 80060f03722c241231d3ed468539d81b9ac9c93e..bccdf9ca4256b105ae411c8f5d666cc7cef9a74f 100644 (file)
@@ -66,7 +66,7 @@ def _parse_video_data(self, video_data):
                 if original_filename.startswith('s3://') and not s3_extracted:
                     formats.append({
                         'format_id': 'original',
-                        'preference': 1,
+                        'quality': 1,
                         'url': original_filename.replace('s3://', 'https://s3.amazonaws.com/'),
                     })
                     s3_extracted = True
index 48b83ce5896cc8323247b1c04f8e567b87c1cf4b..fd2c795aeed292e1f49c99f2c3be2e0ec714e8ae 100644 (file)
@@ -129,10 +129,6 @@ def _real_extract(self, url):
                 if all([f.get('acodec') == 'none' for f in m3u8_formats]):
                     continue
                 for f in m3u8_formats:
-                    if f.get('acodec') == 'none':
-                        f['preference'] = -40
-                    elif f.get('vcodec') == 'none':
-                        f['preference'] = -50
                     height = f.get('height')
                     if not height:
                         continue
@@ -150,7 +146,7 @@ def _real_extract(self, url):
                     'height': int_or_none(s.get('height')),
                     'filesize': int_or_none(s.get('filesize')),
                     'url': s_url,
-                    'preference': -1,
+                    'quality': -10,
                 })
         self._sort_formats(formats)
 
index ca41aaea99c7ac06bf2f23056b850bd1da8fc372..5b38b20ddc28d05ae6e78ba501b4e5e681508b94 100644 (file)
@@ -150,7 +150,6 @@ def _real_extract(self, url):
 
             format = {
                 'format_id': format_id,
-                'preference': -10 if f.get('videoFormat') == 'M3U8' else None,
                 'language_preference': lang_pref,
                 'format_note': '%s, %s' % (f.get('versionCode'), f.get('versionLibelle')),
                 'width': int_or_none(f.get('width')),
index e6070941790b9c6e7cbabba5d11b60dfe512930a..ae9c1a739909d9eb12796954db2d744b3e3ece87 100644 (file)
@@ -69,12 +69,10 @@ def _real_extract(self, url):
                 'vcodec': 'none',
             }
             if ext == 'mp3':
-                fmt['preference'] = 0
                 fmt['acodec'] = 'mp3'
                 fmt['abr'] = 96
                 fmt['asr'] = 44100
             elif ext == 'mp4':
-                fmt['preference'] = 1
                 fmt['acodec'] = 'aac'
                 fmt['abr'] = 96
                 fmt['asr'] = 44100
index d8a4a224f621062ed636dbe1f3306a79110409d3..b04077750f506bcae50ba21450d31052255714e2 100644 (file)
@@ -203,7 +203,7 @@ def _real_extract(self, url):
                     formats.append({
                         'url': backup_url,
                         # backup URLs have lower priorities
-                        'preference': -2 if 'hd.mp4' in backup_url else -3,
+                        'quality': -2 if 'hd.mp4' in backup_url else -3,
                     })
 
                 for a_format in formats:
index 6017e834495efa07ee3fd3adeff28cafc6939452..14840bd28c680420a9ee72471aaf0a2a3896b0e8 100644 (file)
@@ -23,7 +23,7 @@ def _extract_bokecc_formats(self, webpage, video_id, format_id=None):
         formats = [{
             'format_id': format_id,
             'url': quality.find('./copy').attrib['playurl'],
-            'preference': int(quality.attrib['value']),
+            'quality': int(quality.attrib['value']),
         } for quality in info_xml.findall('./video/quality')]
 
         self._sort_formats(formats)
index 07833532e9e4d2d992ac1b2501439b6b9f95e7a4..8f6ef3cf06419d8933e049f2a4a43257e4172c7b 100644 (file)
@@ -47,7 +47,7 @@ def _real_extract(self, url):
             quality = 'high' if '_high' in video_url else 'low'
             formats.append({
                 'url': video_url,
-                'preference': 10 if quality == 'high' else 0,
+                'quality': 10 if quality == 'high' else 0,
                 'format_note': quality,
                 'format_id': '%s-%s' % (quality, determine_ext(video_url)),
             })
index 1eb81b75e95044d460d7f53e1d59e9ec174c6480..eb2a8b4c6a5428f6aeb8e3375de27fc9dd4a801d 100644 (file)
@@ -82,7 +82,7 @@ def _real_extract(self, url):
                     f.update({
                         'ext': 'mp4',
                         # hls skips fragments, preferring rtmp
-                        'preference': -1,
+                        'quality': -10,
                     })
                 else:
                     continue
index 51c11cb7e18d36a2144ae5b1614cfeb0f7a4be83..1132ce4a74ca8622935df88bcc4e74bc77485e17 100644 (file)
@@ -89,7 +89,7 @@ def _real_extract(self, url):
                     # the secret extracted from ya function in http://player.canalplus.fr/common/js/canalPlayer.js
                     'url': format_url + '?secret=pqzerjlsmdkjfoiuerhsdlfknaes',
                     'format_id': format_id,
-                    'preference': preference(format_id),
+                    'quality': preference(format_id),
                 })
         self._sort_formats(formats)
 
index c76f361c684e96e992f5fea9f9ffbcd5a114a6ad..9b8612138b049a5d304e0ce66aec8b410e24b9fb 100644 (file)
@@ -162,7 +162,7 @@ def _real_extract(self, url):
                         'url': video_url,
                         'format_id': 'http',
                         'quality': quality,
-                        'preference': -1,
+                        'source_preference': -10
                     })
 
         hls_url = try_get(data, lambda x: x['hls_url'], compat_str)
index b8e84089b93ed4703c2c178ba3db9c5594673439..ae1b34912c5e03e84fcabfc1a9098838851797ff 100644 (file)
@@ -1384,11 +1384,11 @@ class FormatSort:
                      'order': ('m4a', 'aac', 'mp3', 'ogg', 'opus', 'webm', '', 'none'),
                      'order_free': ('opus', 'ogg', 'webm', 'm4a', 'mp3', 'aac', '', 'none')},
             'hidden': {'visible': False, 'forced': True, 'type': 'extractor', 'max': -1000},
-            'ie_pref': {'priority': True, 'type': 'extractor', 'field': 'extractor_preference'},
+            'ie_pref': {'priority': True, 'type': 'extractor'},
             'hasvid': {'priority': True, 'field': 'vcodec', 'type': 'boolean', 'not_in_list': ('none',)},
             'hasaud': {'field': 'acodec', 'type': 'boolean', 'not_in_list': ('none',)},
-            'lang': {'priority': True, 'convert': 'ignore', 'field': 'language_preference'},
-            'quality': {'convert': 'float_none'},
+            'lang': {'priority': True, 'convert': 'ignore', 'type': 'extractor', 'field': 'language_preference'},
+            'quality': {'convert': 'float_none', 'type': 'extractor'},
             'filesize': {'convert': 'bytes'},
             'fs_approx': {'convert': 'bytes', 'field': 'filesize_approx'},
             'id': {'convert': 'string', 'field': 'format_id'},
@@ -1399,7 +1399,7 @@ class FormatSort:
             'vbr': {'convert': 'float_none'},
             'abr': {'convert': 'float_none'},
             'asr': {'convert': 'float_none'},
-            'source': {'convert': 'ignore', 'field': 'source_preference'},
+            'source': {'convert': 'ignore', 'type': 'extractor', 'field': 'source_preference'},
 
             'codec': {'type': 'combined', 'field': ('vcodec', 'acodec')},
             'br': {'type': 'combined', 'field': ('tbr', 'vbr', 'abr'), 'same_limit': True},
@@ -1543,7 +1543,7 @@ def add_item(field, reverse, closest, limit_text):
         def print_verbose_info(self, to_screen):
             to_screen('[debug] Sort order given by user: %s' % ','.join(self._sort_user))
             if self._sort_extractor:
-                to_screen('[debug] Sort order given by extractor: %s' % ','.join(self._sort_extractor))
+                to_screen('[debug] Sort order given by extractor: %s' % ', '.join(self._sort_extractor))
             to_screen('[debug] Formats sorted by: %s' % ', '.join(['%s%s%s' % (
                 '+' if self._get_field_setting(field, 'reverse') else '', field,
                 '%s%s(%s)' % ('~' if self._get_field_setting(field, 'closest') else ':',
@@ -1560,7 +1560,7 @@ def _calculate_field_preference_from_value(self, format, field, type, value):
             if type == 'extractor':
                 maximum = self._get_field_setting(field, 'max')
                 if value is None or (maximum is not None and value >= maximum):
-                    value = 0
+                    value = -1
             elif type == 'boolean':
                 in_list = self._get_field_setting(field, 'in_list')
                 not_in_list = self._get_field_setting(field, 'not_in_list')
@@ -1693,7 +1693,7 @@ def _sleep(self, timeout, video_id, msg_template=None):
         self.to_screen(msg)
         time.sleep(timeout)
 
-    def _extract_f4m_formats(self, manifest_url, video_id, preference=None, f4m_id=None,
+    def _extract_f4m_formats(self, manifest_url, video_id, preference=None, quality=None, f4m_id=None,
                              transform_source=lambda s: fix_xml_ampersands(s).strip(),
                              fatal=True, m3u8_id=None, data=None, headers={}, query={}):
         manifest = self._download_xml(
@@ -1708,10 +1708,10 @@ def _extract_f4m_formats(self, manifest_url, video_id, preference=None, f4m_id=N
             return []
 
         return self._parse_f4m_formats(
-            manifest, manifest_url, video_id, preference=preference, f4m_id=f4m_id,
+            manifest, manifest_url, video_id, preference=preference, quality=quality, f4m_id=f4m_id,
             transform_source=transform_source, fatal=fatal, m3u8_id=m3u8_id)
 
-    def _parse_f4m_formats(self, manifest, manifest_url, video_id, preference=None, f4m_id=None,
+    def _parse_f4m_formats(self, manifest, manifest_url, video_id, preference=None, quality=None, f4m_id=None,
                            transform_source=lambda s: fix_xml_ampersands(s).strip(),
                            fatal=True, m3u8_id=None):
         if not isinstance(manifest, compat_etree_Element) and not fatal:
@@ -1776,7 +1776,7 @@ def _parse_f4m_formats(self, manifest, manifest_url, video_id, preference=None,
                 ext = determine_ext(manifest_url)
                 if ext == 'f4m':
                     f4m_formats = self._extract_f4m_formats(
-                        manifest_url, video_id, preference=preference, f4m_id=f4m_id,
+                        manifest_url, video_id, preference=preference, quality=quality, f4m_id=f4m_id,
                         transform_source=transform_source, fatal=fatal)
                     # Sometimes stream-level manifest contains single media entry that
                     # does not contain any quality metadata (e.g. http://matchtv.ru/#live-player).
@@ -1796,7 +1796,7 @@ def _parse_f4m_formats(self, manifest, manifest_url, video_id, preference=None,
                 elif ext == 'm3u8':
                     formats.extend(self._extract_m3u8_formats(
                         manifest_url, video_id, 'mp4', preference=preference,
-                        m3u8_id=m3u8_id, fatal=fatal))
+                        quality=quality, m3u8_id=m3u8_id, fatal=fatal))
                     continue
             formats.append({
                 'format_id': format_id,
@@ -1809,22 +1809,24 @@ def _parse_f4m_formats(self, manifest, manifest_url, video_id, preference=None,
                 'height': height,
                 'vcodec': vcodec,
                 'preference': preference,
+                'quality': quality,
             })
         return formats
 
-    def _m3u8_meta_format(self, m3u8_url, ext=None, preference=None, m3u8_id=None):
+    def _m3u8_meta_format(self, m3u8_url, ext=None, preference=None, quality=None, m3u8_id=None):
         return {
             'format_id': '-'.join(filter(None, [m3u8_id, 'meta'])),
             'url': m3u8_url,
             'ext': ext,
             'protocol': 'm3u8',
             'preference': preference - 100 if preference else -100,
+            'quality': quality,
             'resolution': 'multiple',
             'format_note': 'Quality selection URL',
         }
 
     def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None,
-                              entry_protocol='m3u8', preference=None,
+                              entry_protocol='m3u8', preference=None, quality=None,
                               m3u8_id=None, note=None, errnote=None,
                               fatal=True, live=False, data=None, headers={},
                               query={}):
@@ -1842,10 +1844,10 @@ def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None,
 
         return self._parse_m3u8_formats(
             m3u8_doc, m3u8_url, ext=ext, entry_protocol=entry_protocol,
-            preference=preference, m3u8_id=m3u8_id, live=live)
+            preference=preference, quality=quality, m3u8_id=m3u8_id, live=live)
 
     def _parse_m3u8_formats(self, m3u8_doc, m3u8_url, ext=None,
-                            entry_protocol='m3u8', preference=None,
+                            entry_protocol='m3u8', preference=None, quality=None,
                             m3u8_id=None, live=False):
         if '#EXT-X-FAXS-CM:' in m3u8_doc:  # Adobe Flash Access
             return []
@@ -1883,6 +1885,7 @@ def _parse_m3u8_formats(self, m3u8_doc, m3u8_url, ext=None,
                 'ext': ext,
                 'protocol': entry_protocol,
                 'preference': preference,
+                'quality': quality,
             }]
 
         groups = {}
@@ -1911,6 +1914,7 @@ def extract_media(x_media_line):
                     'ext': ext,
                     'protocol': entry_protocol,
                     'preference': preference,
+                    'quality': quality,
                 }
                 if media_type == 'AUDIO':
                     f['vcodec'] = 'none'
@@ -1970,6 +1974,7 @@ def build_stream_name():
                     'fps': float_or_none(last_stream_inf.get('FRAME-RATE')),
                     'protocol': entry_protocol,
                     'preference': preference,
+                    'quality': quality,
                 }
                 resolution = last_stream_inf.get('RESOLUTION')
                 if resolution:
@@ -2677,7 +2682,7 @@ def _parse_ism_formats(self, ism_doc, ism_url, ism_id=None):
                 })
         return formats
 
-    def _parse_html5_media_entries(self, base_url, webpage, video_id, m3u8_id=None, m3u8_entry_protocol='m3u8', mpd_id=None, preference=None):
+    def _parse_html5_media_entries(self, base_url, webpage, video_id, m3u8_id=None, m3u8_entry_protocol='m3u8', mpd_id=None, preference=None, quality=None):
         def absolute_url(item_url):
             return urljoin(base_url, item_url)
 
@@ -2700,7 +2705,7 @@ def _media_formats(src, cur_media_type, type_info={}):
                 formats = self._extract_m3u8_formats(
                     full_url, video_id, ext='mp4',
                     entry_protocol=m3u8_entry_protocol, m3u8_id=m3u8_id,
-                    preference=preference, fatal=False)
+                    preference=preference, quality=quality, fatal=False)
             elif ext == 'mpd':
                 is_plain_url = False
                 formats = self._extract_mpd_formats(
index 6ea03e65cbf84d4edba9a74f53ce7e1106bf511a..eba6b73baad555b73e6ac592cd05513b78692307 100644 (file)
@@ -87,7 +87,7 @@ def _real_extract(self, url):
                     'filesize': int_or_none(item.get('size')),
                     'vcodec': 'none' if kind == 'audio' else None,
                     'quality': quality_key(quality),
-                    'preference': preference_key(HTML5),
+                    'source_preference': preference_key(HTML5),
                 })
 
         iphone_url = file_versions.get(IPHONE, {}).get('url')
@@ -95,7 +95,7 @@ def _real_extract(self, url):
             formats.append({
                 'url': iphone_url,
                 'format_id': IPHONE,
-                'preference': preference_key(IPHONE),
+                'source_preference': preference_key(IPHONE),
             })
 
         mobile_url = file_versions.get(MOBILE, {}).get('audio_url')
@@ -103,7 +103,7 @@ def _real_extract(self, url):
             formats.append({
                 'url': mobile_url,
                 'format_id': '%s-audio' % MOBILE,
-                'preference': preference_key(MOBILE),
+                'source_preference': preference_key(MOBILE),
             })
 
         self._sort_formats(formats)
index 47892544f51e75fa9a0bc5d7e65372601dcac3ff..d670c12c1e306fbb9e47b8c55ad5a45b406308f6 100644 (file)
@@ -473,15 +473,11 @@ def _real_extract(self, url):
                 stream.get('url'), video_id, stream.get('format'),
                 audio_lang, hardsub_lang)
             for f in vrv_formats:
-                if not hardsub_lang:
-                    f['preference'] = 1
-                language_preference = 0
-                if audio_lang == language:
-                    language_preference += 1
-                if hardsub_lang == language:
-                    language_preference += 1
-                if language_preference:
-                    f['language_preference'] = language_preference
+                f['language_preference'] = 1 if audio_lang == language else 0
+                f['quality'] = (
+                    1 if not hardsub_lang
+                    else 0 if hardsub_lang == language
+                    else -1)
             formats.extend(vrv_formats)
         if not formats:
             available_fmts = []
index 22bdc5635ce0ee3c497458622fbd5cc057c87ee3..b1c02ca2bb2922ff260c87bcd881d52b5dff487b 100644 (file)
@@ -82,6 +82,7 @@ def _parse_flv(self, metadata):
                 'play_path': remove_end(audio.get('url'), '.flv'),
                 'ext': 'flv',
                 'vcodec': 'none',
+                'quality': 1,
                 'format_id': audio.get('code'),
             })
         slide_video_path = xpath_text(metadata, './slideVideo', fatal=True)
@@ -91,7 +92,6 @@ def _parse_flv(self, metadata):
             'ext': 'flv',
             'format_note': 'slide deck video',
             'quality': -2,
-            'preference': -2,
             'format_id': 'slides',
             'acodec': 'none',
         })
@@ -102,7 +102,6 @@ def _parse_flv(self, metadata):
             'ext': 'flv',
             'format_note': 'speaker video',
             'quality': -1,
-            'preference': -1,
             'format_id': 'speaker',
         })
         return formats
index c0036adb619857c9a8b01398503f6eb4f44b0d84..7bb15f8d4cdba5e6400b8c5093c1f49849545962 100644 (file)
@@ -242,7 +242,7 @@ def decrypt_uri(e):
                     elif target == 'HLS':
                         formats.extend(self._extract_m3u8_formats(
                             uri, video_id, 'mp4', entry_protocol='m3u8_native',
-                            preference=preference, m3u8_id=format_id,
+                            quality=preference, m3u8_id=format_id,
                             fatal=False))
                     else:
                         bitrate = link.get('Bitrate')
@@ -254,7 +254,7 @@ def decrypt_uri(e):
                             'tbr': int_or_none(bitrate),
                             'ext': link.get('FileFormat'),
                             'vcodec': 'none' if kind == 'AudioResource' else None,
-                            'preference': preference,
+                            'quality': preference,
                         })
             subtitles_list = asset.get('SubtitlesList') or asset.get('Subtitleslist')
             if isinstance(subtitles_list, list):
index 6cf05e6da8204c1e7cb6f7790fcb24104c8341cd..d4a66c29ff21f05d28f0fb4eaf2f87d57b883401 100644 (file)
@@ -154,7 +154,7 @@ def extract_source(source_url, source_id=None):
                         'tbr': int(mobj.group(3)),
                     })
                 if source_id == 'mezzanine':
-                    f['preference'] = 1
+                    f['quality'] = 1
                 formats.append(f)
 
         links = clip.get('links', {})
index cb34c59f544fe39e08814c947a9c66418302dd63..7906e813c9cc3460deeb3dd0d5bd2171e48fde29 100644 (file)
@@ -619,7 +619,7 @@ def parse_attachment(attachment, key='media'):
                         formats.append({
                             'format_id': '%s_%s_%s' % (format_id, quality, src_type),
                             'url': src,
-                            'preference': preference,
+                            'quality': preference,
                         })
             extract_dash_manifest(f[0], formats)
             subtitles_src = f[0].get('subtitles_src')
index 28617d83c7d2afe398184b758b60380446314fc2..ccad173b792477e407a7fc062df8e86839ab771e 100644 (file)
@@ -104,7 +104,7 @@ def _real_extract(self, url):
                     'tbr': tbr,
                     'source_preference': quality(f.get('name')),
                     # quality metadata of http formats may be incorrect
-                    'preference': -1,
+                    'preference': -10,
                 })
             # m3u8 URL format is reverse engineered from [1] (search for
             # master.m3u8). dashEdges (that is currently balancer-vod.1tv.ru)
index 9f166efd4851fe0833de8a85bac07a97ce9f1722..6c82fae3c44b902d72fe928dc6ba791bcb9f5b5d 100644 (file)
@@ -88,7 +88,7 @@ def _real_extract(self, url):
                 formats.append({
                     'format_id': stream_type,
                     'url': stream['_content'],
-                    'preference': preference(stream_type),
+                    'quality': preference(stream_type),
                 })
             self._sort_formats(formats)
 
index 85dc561e2bfd0ca84064f30c3fb7cf221792c2b2..dda08ae3e05e8361adcb368b12be44e4229aa927 100644 (file)
@@ -236,7 +236,7 @@ def _real_extract(self, url):
                 if re.search(r'(?:/mp4/source/|_source\.mp4)', asset_url):
                     f.update({
                         'format_id': ('%s-' % format_id if format_id else '') + 'SOURCE',
-                        'preference': 1,
+                        'quality': 1,
                     })
                 else:
                     mobj = re.search(r'/(\d+)x(\d+)/', asset_url)
index 18c2520120463ebf17253f0696275f2ea2736d66..aeb216c717c5a742dc431e2d50472070a03218d8 100644 (file)
@@ -115,7 +115,7 @@ def _real_extract(self, url):
                     'vcodec': 'none',
                     'ext': ext,
                     'url': download_url,
-                    'preference': 2,  # Usually better quality
+                    'quality': 2,  # Usually better quality
                 })
         self._sort_formats(formats)
 
index 0d9f50ed2a90b051c6bce9ec165ee9ef844d8cd6..c826eb3bab3d6ca1325152cfc9a8f85855ea0bbf 100644 (file)
@@ -100,7 +100,7 @@ def _real_extract(self, url):
             formats.append({
                 'ext': determine_ext(mezzanine_url, 'mp4'),
                 'format_id': 'mezzanine',
-                'preference': 1,
+                'quality': 1,
                 'url': mezzanine_url,
             })
 
index 4dc7b0b5c0ede5df3e433890655377c22602eafa..20fe6667bb6fcdfbc0732801223ec59771f18064 100644 (file)
@@ -72,7 +72,7 @@ def _real_extract(self, url):
                 gif_json, video_id, transform_source=js_to_json)
             formats.append({
                 'format_id': 'gif',
-                'preference': -10,
+                'preference': -10,  # gifs are worse than videos
                 'width': width,
                 'height': height,
                 'ext': 'gif',
index 5df674daf142fa5c8365bc0cb524e28afd248827..0d7cc65d748d4347d29c728a86f55affe0cdd6a4 100644 (file)
@@ -373,7 +373,7 @@ def _real_extract(self, url):
                     'url': stream['m3utx'],
                     'format_id': vd,
                     'ext': 'mp4',
-                    'preference': self._FORMATS_MAP.get(vd, -1),
+                    'quality': self._FORMATS_MAP.get(vd, -1),
                     'protocol': 'm3u8_native',
                 })
 
index cc5b2a1c177addf3465f2e9b2f65569f7617053b..460a4252f4e6a887973c5d3034dca729559f2f8a 100644 (file)
@@ -49,7 +49,7 @@ def _get_formats(self, song_id, tolerate_ip_deny=False):
                     'url': song_url,
                     'format_id': file_format['format'],
                     'format': file_format['format'],
-                    'preference': file_format['preference'],
+                    'quality': file_format['preference'],
                     'abr': file_format.get('abr'),
                 })
 
index 42e263bfaba76f97a4318ab5624872fabda435a2..49a0a59890c3c1a148a645692d8620ce6148ea50 100644 (file)
@@ -201,7 +201,7 @@ def extract_original(original_url):
             formats.append({
                 'url': original_url,
                 'format_id': determine_ext(original_url, None),
-                'preference': 1,
+                'quality': 1,
             })
 
         playlist = self._parse_json(
index b95b001ad3dbfe2c1245fa00f0fa0ca3db3ad4ba..c0c35511fa267d9f9fc1c154d43e2f09dd6912ef 100644 (file)
@@ -175,7 +175,7 @@ def _extract_info(self, pc, mobile, i, referer):
                 formats.append({
                     'url': media_url,
                     'format_id': format_id,
-                    'preference': -1,
+                    'quality': -10,
                     'ext': ext,
                 })
 
index 4ac437c8b7a4b4affd6a9a2175dc807e4e964f7f..114556ef0aca81354896acb59bfbf3f42df859d1 100644 (file)
@@ -143,7 +143,7 @@ def _real_extract(self, url):
                         formats.append({
                             'format_id': format_id,
                             'url': orig_url,
-                            'preference': 1,
+                            'quality': 1,
                         })
             self._sort_formats(formats)
             info_dict['formats'] = formats
index e55b1a202426026763375880b549180efbd52a42..036b39023fb4e538e999163465ab1024e1255603 100644 (file)
@@ -84,7 +84,7 @@ def _parse_smil_formats(self, smil, smil_url, video_id, namespace=None, f4m_para
                 'format_id': 'smil_%d' % tbr,
                 'ext': 'flv',
                 'tbr': tbr,
-                'preference': -1000,
+                'preference': -1000,  # Strictly inferior than all other formats?
             })
         return formats
 
index dc6aa981959014b6b7b9167b3974ba9d092b9b71..0bdd6269306c7aa7480a9f415baed69be6631756 100644 (file)
@@ -137,11 +137,11 @@ def _real_extract(self, url):
                 if ext == 'm3u8':
                     formats.extend(self._extract_m3u8_formats(
                         video_url, video_id, 'mp4', entry_protocol='m3u8_native',
-                        preference=0, m3u8_id='HLS', fatal=False))
+                        quality=1, m3u8_id='HLS', fatal=False))
                 elif ext == 'f4m':
                     formats.extend(self._extract_f4m_formats(
                         video_url + '?hdcore=3.7.0&plugin=aasp-3.7.0.39.44', video_id,
-                        preference=0, f4m_id='HDS', fatal=False))
+                        quality=1, f4m_id='HDS', fatal=False))
                 else:
                     media_type = xpath_text(asset, './mediaType', 'media type', default='MP4')
                     vbr = int_or_none(xpath_text(asset, './bitrateVideo', 'vbr'), 1000)
index d6eb1574065dece67e28a4b36fa43478dd48dfa3..c18b16eb3fcb9e010aa495e3bd8b3271992340db 100644 (file)
@@ -206,7 +206,7 @@ def _real_extract(self, url):
             # disprefer 'secondary' streams
             if stream_type != 0:
                 for fmt in stream_formats:
-                    fmt['preference'] = -1
+                    fmt['quality'] = -10
 
             thumbnail_url = Stream.get('ThumbnailUrl')
             if thumbnail_url:
index e59b0b7b04a4ab841cef6c773d3b9a7e13e7e929..9ce90a928189ef655bf57b2958485323ff9f5a51 100644 (file)
@@ -132,7 +132,7 @@ def _real_extract(self, url):
                         'width': int_or_none(file_.get('width')),
                         'height': int_or_none(file_.get('height')),
                         'vbr': int_or_none(self._search_regex(r'_(\d+)\.mp4', format_url, 'vbr', default=None)),
-                        'preference': 1 if format_id == '1001' else None,
+                        'quality': 1 if format_id == '1001' else None,
                     })
             self._sort_formats(formats)
 
index 2cc2bf229b3bee21fa5b79e40af2a666cd4ccea1..d256236d18d2e9a244d2b170ffa9b1b4146ac588 100644 (file)
@@ -61,7 +61,7 @@ def _real_extract(self, url):
                 'tbr': int_or_none(s.get('label')),
                 'ext': 'mp4',
                 'format_id': format_id,
-                'preference': -100 if '.smil' in s['file'] else 0,
+                'preference': -100 if '.smil' in s['file'] else 0,  # Strictly inferior than all other formats?
             })
         self._sort_formats(formats)
 
index fbc7adaf46550a0b7acc9b61bd744ea074dcd996..a1dc1dde7baa260f4bfc481bab5e21f39fdb0497 100644 (file)
@@ -303,7 +303,7 @@ def _extract_video(self, video, team, extract_all=True):
                 formats.append({
                     'format_id': 'source',
                     'url': source_url,
-                    'preference': 1,
+                    'quality': 1,
                 })
 
             m3u8_url = video.get('m3u8')
index 30df905af294cae536710ccce596b30f0a80e117..aec8433ded526312064bf141f299cf3f86e26192 100644 (file)
@@ -183,7 +183,7 @@ def _real_extract(self, url):
                         'filesize': int_or_none(fmt.get('filesize')),
                         'format_note': qualities[format_id].get('quality_name'),
                         'quality': qualities[format_id].get('priority'),
-                        'preference': preference,
+                        'language_preference': preference,
                     })
 
         self._sort_formats(formats)
index 416b6acfcd80c6d74a07df2f1c79bdb2538af3da..ca6dbfc817ce0b8b9a2846da81426945f4a5cb6e 100644 (file)
@@ -425,7 +425,7 @@ def add_format_url(format_url):
                         stream_url, video_id, fatal=False)
                     # f4m downloader downloads only piece of live stream
                     for f4m_format in f4m_formats:
-                        f4m_format['preference'] = -1
+                        f4m_format['preference'] = -5
                     formats.extend(f4m_formats)
                 elif stream_type == 'hls':
                     formats.extend(self._extract_m3u8_formats(
index 101a5374ccd9c780d6f34e8ff82ef67148e8a0cb..035582ee82e263bf6d260888c61d27e35cf4dbb6 100644 (file)
@@ -62,7 +62,7 @@ def _real_extract(self, url):
             m3u8_url = compat_urlparse.urljoin('http://video.n-tv.de', vdata['videoM3u8'])
             formats.extend(self._extract_m3u8_formats(
                 m3u8_url, video_id, ext='mp4', entry_protocol='m3u8_native',
-                preference=0, m3u8_id='hls', fatal=False))
+                quality=1, m3u8_id='hls', fatal=False))
         self._sort_formats(formats)
 
         return {
index 1d42be39b3303c95952a8ec54a34abbb9d09f0b1..422d0b3304686983fc2f0c20713a1271b86bad94 100644 (file)
@@ -55,7 +55,7 @@ def _real_extract(self, url):
                 formats.append({
                     'url': http_template % q,
                     'format_id': q,
-                    'preference': preference(q),
+                    'quality': preference(q),
                 })
             self._sort_formats(formats)
         else:
index 8099ef1d6bd609a81f0c10e7a33f26311c63fcc8..1abda865d1df14968cbb642c5ad5b390a70c0882 100644 (file)
@@ -78,7 +78,7 @@ def _real_extract(self, url):
                         update_url_query(
                             'https://%s/hls/%s/index.m3u8'
                             % (edge_ep, channel_id), params),
-                        channel_id, 'mp4', preference=preference,
+                        channel_id, 'mp4', quality=preference,
                         m3u8_id='-'.join(format_id), fatal=False))
                     continue
                 elif tech_type == 'video/mp4' or tech_label == 'MP4':
@@ -88,7 +88,7 @@ def _real_extract(self, url):
                             'https://%s/mp4/%s.mp4' % (edge_ep, channel_id),
                             params),
                         'format_id': '-'.join(format_id),
-                        'preference': preference,
+                        'quality': preference,
                     })
                 else:
                     # rtmp format does not seem to work
index 4c5f57919b4e786b95570ce523790afd62b4e3ed..84e92dda492466e9abea8da3bd3783c51da3719c 100644 (file)
@@ -150,7 +150,7 @@ def _real_extract(self, url):
                 ext = 'mp4'
                 # Some streams have mp3 audio which does not play
                 # well with ffmpeg filter aac_adtstoasc
-                preference = -1
+                preference = -10
             elif format_ == 'adobe':  # f4m manifest fails with 404 in 80% of requests
                 continue
             else:  # Other formats not supported yet
index 084308aeb8922a1632eafe5a8395381710952c60..0106d166ff3c0f29f3016c5767352ed9349997a1 100644 (file)
@@ -121,7 +121,7 @@ def _real_extract(self, url):
                        % (details['prefix'], mid, details['ext'], vkey, guid),
                 'format': format_id,
                 'format_id': format_id,
-                'preference': details['preference'],
+                'quality': details['preference'],
                 'abr': details.get('abr'),
             })
         self._check_formats(formats, mid)
index a8afc001460b2eedf5b0e29104ff0039ea5fe611..2b5fea9458f307f8f593af8a95c13f3fd1457cab 100644 (file)
@@ -43,7 +43,7 @@ def _real_extract(self, url):
                 'format_id': fm[0],
                 'url': fm[1],
                 'vcodec': 'none',
-                'preference': i,
+                'quality': i,
             }
             for i, fm in
             enumerate(re.findall(r"([a-z0-9]+)\s*:\s*'([^']+)'", formats_str))
index 70f000ca8a77ba95c8657e19f1195f24dd31e076..d7baa3aa5ccf693dba9d4be5c820decc3bbae835 100644 (file)
@@ -93,7 +93,7 @@ def _real_extract(self, url):
                 'flash_version': 'LNX 11,2,202,429',
                 'rtmp_conn': rtmp_conn,
                 'no_resume': True,
-                'preference': 1,
+                'quality': 1,
             })
 
         m3u8_url = video_info.get('streamurl_hls')
index 02986f4426dd1ec63f56a3bf26b0ade4b60de15c..f78e90e97f9261c9bbc54679c99a10b7baf07092 100644 (file)
@@ -45,7 +45,7 @@ def _real_extract(self, url):
             if file_key:
                 formats.append({
                     'url': 'https://cdn-ondemand.rtp.pt' + file_key,
-                    'preference': 1,
+                    'quality': 1,
                 })
             self._sort_formats(formats)
         else:
index aceb35994c6577c04c89c76beacbf62491c296cf..e66036c7958cb4d2e1dd2dc9337ec422dfe08033 100644 (file)
@@ -180,11 +180,11 @@ def _real_extract(self, url):
                         'rtmp_live': True,
                         'ext': 'flv',
                         'vbr': int(quality),
-                        'preference': preference,
+                        'quality': preference,
                     }
                 elif transport == 'm3u8':
                     formats.extend(self._extract_m3u8_formats(
-                        url, video_id, 'mp4', preference=preference, m3u8_id='hls'))
+                        url, video_id, 'mp4', quality=preference, m3u8_id='hls'))
                     continue
                 else:
                     fmt = {
index 07b766b4a756f67d855ede90ebf72f0997da7e1d..60f2dd053f9d3d330892f46cb91c12827c8d1cf0 100644 (file)
@@ -99,7 +99,7 @@ def _real_extract(self, url):
                 formats.append({
                     'format_id': quality_id,
                     'url': update_url_query(file_api, {'vid': file_id}),
-                    'preference': preference(quality_id),
+                    'quality': preference(quality_id),
                     'ext': 'mp4',
                 })
             self._sort_formats(formats)
index 47f68bf197cbaff47fe0ed6e1b046fe37277cc52..72562379bb81bb8a63bbd75a5de1da9eaa9d2665 100644 (file)
@@ -422,7 +422,7 @@ def _extract_info_dict(self, info, full_title=None, secret_token=None):
                         'ext': urlhandle_detect_ext(urlh) or 'mp3',
                         'filesize': int_or_none(urlh.headers.get('Content-Length')),
                         'url': format_url,
-                        'preference': 10,
+                        'quality': 10,
                     })
 
         def invalid_url(url):
index f63a1359aed6620af8c42cd9d4652f5ec379c7c0..0f4c8189c92044536325a7693d372b2fa6bcc064 100644 (file)
@@ -89,7 +89,7 @@ def _real_extract(self, url):
                     formats.append({
                         'format_id': format_id,
                         'url': asset_url,
-                        'preference': preference(quality),
+                        'quality': preference(quality),
                         'ext': 'flv' if protocol == 'RTMP' else None,
                     })
         self._sort_formats(formats)
index 67457cc9416bd3c1cc3af0069c93a683626daad8..19cb1ff9e3866931e4ea76c83ba12a17d2478704 100644 (file)
@@ -92,7 +92,7 @@ def _real_extract(self, url):
             if aformat:
                 format['acodec'] = aformat['acodec']
                 format['abr'] = aformat['abr']
-                format['preference'] = aformat['preference']
+                format['quality'] = aformat['preference']
                 format['ext'] = 'm4a'
 
         self._sort_formats(formats)
index a29a64b6d5d2fbcec5667902eba259cefb679125..f8a27550e35e8f17d6284b9f64d2a1cc582dd5a7 100644 (file)
@@ -70,7 +70,7 @@ def _real_extract(self, url):
                     formats.append({
                         'url': format_url,
                         'format_id': f.get('label'),
-                        'preference': preference(f.get('label')),
+                        'quality': preference(f.get('label')),
                         'ext': ext,
                     })
                 urls.append(format_url)
index 9bcac4ec008239b5f0a11bea385f674d545bf2d9..44d5d220b95724593db008b7bcf3d37e394e6fdc 100644 (file)
@@ -57,7 +57,7 @@ def _real_extract(self, url):
                     'app': rtmp.group('app'),
                     'player_url': 'http://p.jwpcdn.com/6/10/jwplayer.flash.swf',
                     'page_url': 'http://www.telemb.be',
-                    'preference': -1,
+                    'preference': -10,
                 })
             formats.append(fmt)
         self._sort_formats(formats)
index 71aa357df5449c3ae1543be9a18ccd9127f7dad2..5eaa991eb525eba511ba3b451013ca2986f3fcd3 100644 (file)
@@ -133,11 +133,6 @@ def _real_extract(self, url):
                         'vcodec': 'none' if height == 0 else None,
                         'width': width,
                     })
-        for f in formats:
-            if f.get('acodec') == 'none':
-                f['preference'] = -40
-            elif f.get('vcodec') == 'none':
-                f['preference'] = -50
         # It seems like this would be correctly handled by default
         # However, unless someone can confirm this, the old
         # behaviour is being kept as-is
index 628adf2199ca7a1d7ebbc9ffece05e2447f59133..4a2a97fa42e76cc8eb788c5a2bb5950c4b0f4fe7 100644 (file)
@@ -110,7 +110,6 @@ def _real_extract(self, url):
                 'format_id': format_id,
                 'url': f_url,
                 'quality': quality(format_id),
-                'preference': -1,
             })
         self._sort_formats(formats)
 
index 8f6edab4b1f21b241b41accfe4cafefc2dd0092f..020425fc7b5dd4914d9d59a13fdeafb22c9a786f 100644 (file)
@@ -44,7 +44,7 @@ def _real_extract(self, url):
                 'ext': f['FileType'],
                 'format_id': '%s-%s' % (f['FileType'], f.get('Quality', '')),
                 'url': 'http://p3urort.blob.core.windows.net/tracks/%s' % f['FileRef'],
-                'preference': 3 if f['FileType'] == 'mp3' else 2,
+                'quality': 3 if f['FileType'] == 'mp3' else 2,
             } for f in s['Files']]
             self._sort_formats(formats)
             e = {
index 174e69cd6b1e8ce1e5bf829781140ea756bdc6bf..a02f9173187c3f8e54bfa5ffbac015b9fb2e03e1 100644 (file)
@@ -181,6 +181,7 @@ def _real_extract(self, url):
                     'url': format_url,
                     'width': int_or_none(f.get('width')),
                     'height': int_or_none(f.get('height')),
+                    # Clips should never be prefered over full video
                     'preference': 0 if f.get('type', '').endswith(
                         'clip') else 1,
                 })
index 6004261972bc4e49d3a7be338ebeb58ce15d050d..bbb1024d91852ba2d58d00ae15c41fb368aba24a 100644 (file)
@@ -179,16 +179,9 @@ def _parse_config(self, config, video_id):
             formats.append({
                 'format_id': 'live-archive-source',
                 'url': live_archive_source_url,
-                'preference': 1,
+                'quality': 10,
             })
 
-        # Reduntant code! This is already done in common.py
-        # for f in formats:
-        #     if f.get('vcodec') == 'none':
-        #         f['preference'] = -50
-        #     elif f.get('acodec') == 'none':
-        #         f['preference'] = -40
-
         subtitles = {}
         text_tracks = config['request'].get('text_tracks')
         if text_tracks:
@@ -251,7 +244,7 @@ def _extract_original_format(self, url, video_id):
                             'height': int_or_none(source_file.get('height')),
                             'filesize': parse_filesize(source_file.get('size')),
                             'format_id': source_name,
-                            'preference': 1,
+                            'quality': 1,
                         }
 
 
index b7d02fca3ac426679b21f2ba7213e2ac6fdb701b..54f88bba82ff9141470d5b71eeb5e617fd6697aa 100644 (file)
@@ -70,7 +70,7 @@ def _real_extract(self, url):
             f = {
                 'url': source_url,
                 'format_id': 'http',
-                'preference': 1,
+                'quality': 1,
             }
             if 'audio' in source_url:
                 f.update({
index ae32a0a68562e382dbef882b9988ebb818f03b51..a170966c36cd66da69e23f73034f8d889dee62aa 100644 (file)
@@ -62,7 +62,7 @@ def _extract_media(self, embed_config):
                     'format_id': format_id,
                     'url': aurl,
                     'tbr': int_or_none(a.get('bitrate')) or None,
-                    'preference': 1 if atype == 'original' else None,
+                    'quality': 1 if atype == 'original' else None,
                 }
                 if display_name == 'Audio':
                     f.update({
index ac1ccc4043ead820283c4cba57a0bb7873de9872..dd4fb54d463aa57ee0c03783eb412a5db0688282 100644 (file)
@@ -54,7 +54,7 @@ def get(meta, default=NO_DEFAULT, fatal=True):
             if determine_ext(format_url) == 'm3u8':
                 formats.extend(self._extract_m3u8_formats(
                     format_url, video_id, 'mp4', entry_protocol='m3u8_native',
-                    preference=1, m3u8_id='hls', fatal=False))
+                    quality=1, m3u8_id='hls', fatal=False))
             else:
                 format_id = mobj.group('id')
                 if format_id:
index 76c91bd92c6906f28412aa60e0cb6bf8ace10422..cd9c465e442efedf33fa3566d48fb882b18ea7e0 100644 (file)
@@ -93,7 +93,7 @@ def _extract_video_info(self, partner_id, video_id):
             formats.append({
                 'url': link.get('href'),
                 'format_id': link.get('rel'),
-                'preference': 1,
+                'quality': 1,
             })
 
         thumbnails = [{
index 6bac3026ede81754f41d6eb56c92815c41cfa06c..32dcc03b1192436e6bcd38e4ff82d294b5d15d98 100644 (file)
@@ -182,7 +182,7 @@ def _extract_formats(self, cid, video_id, record_id=None, is_live=False):
                 else:
                     assert False
                 for this_format in this_formats:
-                    this_format['preference'] = preference
+                    this_format['quality'] = preference
                 formats.extend(this_formats)
         self._sort_formats(formats)
         return formats