mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Add temporary _sort_formats helper function
This commit is contained in:
		| @@ -436,6 +436,47 @@ class InfoExtractor(object): | ||||
|         } | ||||
|         return RATING_TABLE.get(rating.lower(), None) | ||||
|  | ||||
|     def _sort_formats(self, formats): | ||||
|         def _formats_key(f): | ||||
|             preference = f.get('preference') | ||||
|             if preference is None: | ||||
|                 preference = 0 if f.get('url', '').startswith('http') else -0.1 | ||||
|                 if f.get('ext') in ['f4f', 'f4m']:  # Not yet supported | ||||
|                     preference -= 0.5 | ||||
|  | ||||
|             if f.get('vcodec') == 'none':  # audio only | ||||
|                 if self._downloader.params.get('prefer_free_formats'): | ||||
|                     ORDER = [u'aac', u'mp3', u'm4a', u'webm', u'ogg', u'opus'] | ||||
|                 else: | ||||
|                     ORDER = [u'webm', u'opus', u'ogg', u'mp3', u'aac', u'm4a'] | ||||
|                 ext_preference = 0 | ||||
|                 try: | ||||
|                     audio_ext_preference = ORDER.index(f['ext']) | ||||
|                 except ValueError: | ||||
|                     audio_ext_preference = -1 | ||||
|             else: | ||||
|                 if self._downloader.params.get('prefer_free_formats'): | ||||
|                     ORDER = [u'flv', u'mp4', u'webm'] | ||||
|                 else: | ||||
|                     ORDER = [u'webm', u'flv', u'mp4'] | ||||
|                 try: | ||||
|                     ext_preference = ORDER.index(f['ext']) | ||||
|                 except ValueError: | ||||
|                     ext_preference = -1 | ||||
|                 audio_ext_preference = 0 | ||||
|  | ||||
|             return ( | ||||
|                 preference, | ||||
|                 f.get('height') if f.get('height') is not None else -1, | ||||
|                 f.get('width') if f.get('width') is not None else -1, | ||||
|                 ext_preference, | ||||
|                 f.get('vbr') if f.get('vbr') is not None else -1, | ||||
|                 f.get('abr') if f.get('abr') is not None else -1, | ||||
|                 audio_ext_preference, | ||||
|                 f.get('filesize') if f.get('filesize') is not None else -1, | ||||
|                 f.get('format_id'), | ||||
|             ) | ||||
|         formats.sort(key=_formats_key) | ||||
|  | ||||
|  | ||||
| class SearchInfoExtractor(InfoExtractor): | ||||
|   | ||||
| @@ -1433,16 +1433,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | ||||
|                 'format_note': note, | ||||
|             }) | ||||
|  | ||||
|         def _formats_key(f): | ||||
|             note = f.get('format_note') | ||||
|             if note is None: | ||||
|                 note = u'' | ||||
|             is_dash = u'DASH' in note | ||||
|             return ( | ||||
|                 0 if is_dash else 1, | ||||
|                 f.get('height') if f.get('height') is not None else -1, | ||||
|                 f.get('width') if f.get('width') is not None else -1) | ||||
|         formats.sort(key=_formats_key) | ||||
|         self._sort_formats(formats) | ||||
|  | ||||
|         return { | ||||
|             'id':           video_id, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister