Add -f bestaudio (Fixes #2163)
This commit is contained in:
		
							parent
							
								
									a70c83768e
								
							
						
					
					
						commit
						ba7678f9cc
					
				@ -150,6 +150,36 @@ class TestFormatSelection(unittest.TestCase):
 | 
				
			|||||||
        downloaded = ydl.downloaded_info_dicts[0]
 | 
					        downloaded = ydl.downloaded_info_dicts[0]
 | 
				
			||||||
        self.assertEqual(downloaded['format_id'], u'35')
 | 
					        self.assertEqual(downloaded['format_id'], u'35')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_format_selection_audio(self):
 | 
				
			||||||
 | 
					        formats = [
 | 
				
			||||||
 | 
					            {u'format_id': u'audio-low', u'ext': u'webm', 'preference': 1, 'vcodec': 'none'},
 | 
				
			||||||
 | 
					            {u'format_id': u'audio-mid', u'ext': u'webm', 'preference': 2, 'vcodec': 'none'},
 | 
				
			||||||
 | 
					            {u'format_id': u'audio-high', u'ext': u'flv', 'preference': 3, 'vcodec': 'none'},
 | 
				
			||||||
 | 
					            {u'format_id': u'vid', u'ext': u'mp4', 'preference': 4},
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        info_dict = {u'formats': formats, u'extractor': u'test'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ydl = YDL({'format': u'bestaudio'})
 | 
				
			||||||
 | 
					        ydl.process_ie_result(info_dict.copy())
 | 
				
			||||||
 | 
					        downloaded = ydl.downloaded_info_dicts[0]
 | 
				
			||||||
 | 
					        self.assertEqual(downloaded['format_id'], u'audio-high')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ydl = YDL({'format': u'worstaudio'})
 | 
				
			||||||
 | 
					        ydl.process_ie_result(info_dict.copy())
 | 
				
			||||||
 | 
					        downloaded = ydl.downloaded_info_dicts[0]
 | 
				
			||||||
 | 
					        self.assertEqual(downloaded['format_id'], u'audio-low')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        formats = [
 | 
				
			||||||
 | 
					            {u'format_id': u'vid-low', u'ext': u'mp4', 'preference': 1},
 | 
				
			||||||
 | 
					            {u'format_id': u'vid-high', u'ext': u'mp4', 'preference': 2},
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        info_dict = {u'formats': formats, u'extractor': u'test'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ydl = YDL({'format': u'bestaudio/worstaudio/best'})
 | 
				
			||||||
 | 
					        ydl.process_ie_result(info_dict.copy())
 | 
				
			||||||
 | 
					        downloaded = ydl.downloaded_info_dicts[0]
 | 
				
			||||||
 | 
					        self.assertEqual(downloaded['format_id'], u'vid-high')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_youtube_format_selection(self):
 | 
					    def test_youtube_format_selection(self):
 | 
				
			||||||
        order = [
 | 
					        order = [
 | 
				
			||||||
            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13',
 | 
					            '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13',
 | 
				
			||||||
 | 
				
			|||||||
@ -637,6 +637,18 @@ class YoutubeDL(object):
 | 
				
			|||||||
            return available_formats[-1]
 | 
					            return available_formats[-1]
 | 
				
			||||||
        elif format_spec == 'worst':
 | 
					        elif format_spec == 'worst':
 | 
				
			||||||
            return available_formats[0]
 | 
					            return available_formats[0]
 | 
				
			||||||
 | 
					        elif format_spec == 'bestaudio':
 | 
				
			||||||
 | 
					            audio_formats = [
 | 
				
			||||||
 | 
					                f for f in available_formats
 | 
				
			||||||
 | 
					                if f.get('vcodec') == 'none']
 | 
				
			||||||
 | 
					            if audio_formats:
 | 
				
			||||||
 | 
					                return audio_formats[-1]
 | 
				
			||||||
 | 
					        elif format_spec == 'worstaudio':
 | 
				
			||||||
 | 
					            audio_formats = [
 | 
				
			||||||
 | 
					                f for f in available_formats
 | 
				
			||||||
 | 
					                if f.get('vcodec') == 'none']
 | 
				
			||||||
 | 
					            if audio_formats:
 | 
				
			||||||
 | 
					                return audio_formats[0]
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            extensions = ['mp4', 'flv', 'webm', '3gp']
 | 
					            extensions = ['mp4', 'flv', 'webm', '3gp']
 | 
				
			||||||
            if format_spec in extensions:
 | 
					            if format_spec in extensions:
 | 
				
			||||||
 | 
				
			|||||||
@ -257,7 +257,7 @@ def parseOpts(overrideArguments=None):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    video_format.add_option('-f', '--format',
 | 
					    video_format.add_option('-f', '--format',
 | 
				
			||||||
            action='store', dest='format', metavar='FORMAT', default='best',
 | 
					            action='store', dest='format', metavar='FORMAT', default='best',
 | 
				
			||||||
            help='video format code, specify the order of preference using slashes: "-f 22/17/18". "-f mp4" and "-f flv" are also supported')
 | 
					            help='video format code, specify the order of preference using slashes: "-f 22/17/18". "-f mp4" and "-f flv" are also supported. You can also use the special names "best", "bestaudio", and "worst"')
 | 
				
			||||||
    video_format.add_option('--all-formats',
 | 
					    video_format.add_option('--all-formats',
 | 
				
			||||||
            action='store_const', dest='format', help='download all available video formats', const='all')
 | 
					            action='store_const', dest='format', help='download all available video formats', const='all')
 | 
				
			||||||
    video_format.add_option('--prefer-free-formats',
 | 
					    video_format.add_option('--prefer-free-formats',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user