mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[YoutubeDL] Improve _default_format_spec (closes #14461)
This commit is contained in:
		| @@ -466,12 +466,18 @@ class TestFormatSelection(unittest.TestCase): | ||||
|         ydl = YDL({'simulate': True}) | ||||
|         self.assertEqual(ydl._default_format_spec({}), 'bestvideo+bestaudio/best') | ||||
|  | ||||
|         ydl = YDL({'is_live': True}) | ||||
|         self.assertEqual(ydl._default_format_spec({}), 'best/bestvideo+bestaudio') | ||||
|  | ||||
|         ydl = YDL({'simulate': True, 'is_live': True}) | ||||
|         self.assertEqual(ydl._default_format_spec({}), 'bestvideo+bestaudio/best') | ||||
|  | ||||
|         ydl = YDL({'outtmpl': '-'}) | ||||
|         self.assertEqual(ydl._default_format_spec({}), 'best') | ||||
|         self.assertEqual(ydl._default_format_spec({}), 'best/bestvideo+bestaudio') | ||||
|  | ||||
|         ydl = YDL({}) | ||||
|         self.assertEqual(ydl._default_format_spec({}, download=False), 'bestvideo+bestaudio/best') | ||||
|         self.assertEqual(ydl._default_format_spec({'is_live': True}), 'best') | ||||
|         self.assertEqual(ydl._default_format_spec({'is_live': True}), 'best/bestvideo+bestaudio') | ||||
|  | ||||
|  | ||||
| class TestYoutubeDL(unittest.TestCase): | ||||
|   | ||||
| @@ -1078,22 +1078,27 @@ class YoutubeDL(object): | ||||
|         return _filter | ||||
|  | ||||
|     def _default_format_spec(self, info_dict, download=True): | ||||
|         req_format_list = [] | ||||
|  | ||||
|         def can_have_partial_formats(): | ||||
|             if self.params.get('simulate', False): | ||||
|                 return True | ||||
|             if not download: | ||||
|                 return True | ||||
|             if self.params.get('outtmpl', DEFAULT_OUTTMPL) == '-': | ||||
|                 return False | ||||
|             if info_dict.get('is_live'): | ||||
|                 return False | ||||
|         def can_merge(): | ||||
|             merger = FFmpegMergerPP(self) | ||||
|             return merger.available and merger.can_merge() | ||||
|         if can_have_partial_formats(): | ||||
|             req_format_list.append('bestvideo+bestaudio') | ||||
|         req_format_list.append('best') | ||||
|  | ||||
|         def prefer_best(): | ||||
|             if self.params.get('simulate', False): | ||||
|                 return False | ||||
|             if not download: | ||||
|                 return False | ||||
|             if self.params.get('outtmpl', DEFAULT_OUTTMPL) == '-': | ||||
|                 return True | ||||
|             if info_dict.get('is_live'): | ||||
|                 return True | ||||
|             if not can_merge(): | ||||
|                 return True | ||||
|             return False | ||||
|  | ||||
|         req_format_list = ['bestvideo+bestaudio', 'best'] | ||||
|         if prefer_best(): | ||||
|             req_format_list.reverse() | ||||
|         return '/'.join(req_format_list) | ||||
|  | ||||
|     def build_format_selector(self, format_spec): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․