]> jfr.im git - yt-dlp.git/commitdiff
[youtube] Sort audio-only formats correctly
authorpukkandan <redacted>
Mon, 17 May 2021 19:41:57 +0000 (01:11 +0530)
committerpukkandan <redacted>
Wed, 19 May 2021 12:59:20 +0000 (18:29 +0530)
Closes #317

yt_dlp/extractor/youtube.py

index 4ffb90cb97e961823bf7b3b707f120af5d541a78..5e836f8831c7c324b19e6d8303de4a5472adaa5d 100644 (file)
@@ -1994,7 +1994,10 @@ def feed_entry(name):
         formats, itags, stream_ids = [], [], []
         itag_qualities = {}
         player_url = None
-        q = qualities(['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'])
+        q = qualities([
+            'tiny', 'audio_quality_low', 'audio_quality_medium', 'audio_quality_high',  # Audio only formats
+            'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'
+        ])
 
         streaming_data = player_response.get('streamingData') or {}
         streaming_formats = streaming_data.get('formats') or []
@@ -2013,6 +2016,8 @@ def feed_entry(name):
                 continue
 
             quality = fmt.get('quality')
+            if quality == 'tiny' or not quality:
+                quality = fmt.get('audioQuality', '').lower() or quality
             if itag and quality:
                 itag_qualities[itag] = quality
             # FORMAT_STREAM_TYPE_OTF(otf=1) requires downloading the init fragment
@@ -2102,9 +2107,6 @@ def feed_entry(name):
                         if itag in itags:
                             continue
                         if itag in itag_qualities:
-                            # Not actually usefull since the sorting is already done with "quality,res,fps,codec"
-                            # but kept to maintain feature parity (and code similarity) with youtube-dl
-                            # Remove if this causes any issues with sorting in future
                             f['quality'] = q(itag_qualities[itag])
                         filesize = int_or_none(self._search_regex(
                             r'/clen/(\d+)', f.get('fragment_base_url')