mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[YoutubeDL] format spec: Do not fail when a filter gives an empty result
For example with 'best[height<40]' we ended getting a 'IndexError: list index out of range'.
This commit is contained in:
		| @@ -15,7 +15,7 @@ from youtube_dl import YoutubeDL | |||||||
| from youtube_dl.compat import compat_str | from youtube_dl.compat import compat_str | ||||||
| from youtube_dl.extractor import YoutubeIE | from youtube_dl.extractor import YoutubeIE | ||||||
| from youtube_dl.postprocessor.common import PostProcessor | from youtube_dl.postprocessor.common import PostProcessor | ||||||
| from youtube_dl.utils import match_filter_func | from youtube_dl.utils import ExtractorError, match_filter_func | ||||||
|  |  | ||||||
| TEST_URL = 'http://localhost/sample.mp4' | TEST_URL = 'http://localhost/sample.mp4' | ||||||
|  |  | ||||||
| @@ -362,6 +362,13 @@ class TestFormatSelection(unittest.TestCase): | |||||||
|         downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] |         downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] | ||||||
|         self.assertEqual(downloaded_ids, ['B', 'C', 'D']) |         self.assertEqual(downloaded_ids, ['B', 'C', 'D']) | ||||||
|  |  | ||||||
|  |         ydl = YDL({'format': 'best[height<40]'}) | ||||||
|  |         try: | ||||||
|  |             ydl.process_ie_result(info_dict) | ||||||
|  |         except ExtractorError: | ||||||
|  |             pass | ||||||
|  |         self.assertEqual(ydl.downloaded_info_dicts, []) | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestYoutubeDL(unittest.TestCase): | class TestYoutubeDL(unittest.TestCase): | ||||||
|     def test_subtitles(self): |     def test_subtitles(self): | ||||||
|   | |||||||
| @@ -1005,6 +1005,9 @@ class YoutubeDL(object): | |||||||
|                 format_spec = selector.selector |                 format_spec = selector.selector | ||||||
|  |  | ||||||
|                 def selector_function(formats): |                 def selector_function(formats): | ||||||
|  |                     formats = list(formats) | ||||||
|  |                     if not formats: | ||||||
|  |                         return | ||||||
|                     if format_spec == 'all': |                     if format_spec == 'all': | ||||||
|                         for f in formats: |                         for f in formats: | ||||||
|                             yield f |                             yield f | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz