mirror of
				https://code.hackerspace.pl/q3k/youtube-dl
				synced 2025-03-16 11:43:02 +00:00 
			
		
		
		
	Implement the prefer_free_formats in YoutubeDL
This commit is contained in:
		
							parent
							
								
									79819f58f2
								
							
						
					
					
						commit
						e028d0d1e3
					
				
							
								
								
									
										49
									
								
								test/test_YoutubeDL.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								test/test_YoutubeDL.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  | 
 | ||||||
|  | import sys | ||||||
|  | import unittest | ||||||
|  | 
 | ||||||
|  | # Allow direct execution | ||||||
|  | import os | ||||||
|  | sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||||
|  | 
 | ||||||
|  | from helper import FakeYDL, parameters | ||||||
|  | 
 | ||||||
|  | class YDL(FakeYDL): | ||||||
|  |     def __init__(self): | ||||||
|  |         super(YDL, self).__init__() | ||||||
|  |         self.downloaded_info_dicts = [] | ||||||
|  |     def process_info(self, info_dict): | ||||||
|  |         self.downloaded_info_dicts.append(info_dict) | ||||||
|  | 
 | ||||||
|  | class TestFormatSelection(unittest.TestCase): | ||||||
|  |     def test_prefer_free_formats(self): | ||||||
|  |         # Same resolution => download webm | ||||||
|  |         ydl = YDL() | ||||||
|  |         ydl.params['prefer_free_formats'] = True | ||||||
|  |         formats = [{u'ext': u'webm', u'height': 460},{u'ext': u'mp4',  u'height': 460}] | ||||||
|  |         info_dict = {u'formats': formats, u'extractor': u'test'} | ||||||
|  |         ydl.process_ie_result(info_dict) | ||||||
|  |         downloaded = ydl.downloaded_info_dicts[0] | ||||||
|  |         self.assertEqual(downloaded[u'ext'], u'webm') | ||||||
|  | 
 | ||||||
|  |         # Different resolution => download best quality (mp4) | ||||||
|  |         ydl = YDL() | ||||||
|  |         ydl.params['prefer_free_formats'] = True | ||||||
|  |         formats = [{u'ext': u'webm', u'height': 720},{u'ext': u'mp4',u'height': 1080}] | ||||||
|  |         info_dict[u'formats'] = formats | ||||||
|  |         ydl.process_ie_result(info_dict) | ||||||
|  |         downloaded = ydl.downloaded_info_dicts[0] | ||||||
|  |         self.assertEqual(downloaded[u'ext'], u'mp4') | ||||||
|  | 
 | ||||||
|  |         # No prefer_free_formats => keep original formats order | ||||||
|  |         ydl = YDL() | ||||||
|  |         ydl.params['prefer_free_formats'] = False | ||||||
|  |         formats = [{u'ext': u'webm', u'height': 720},{u'ext': u'flv',u'height': 720}] | ||||||
|  |         info_dict[u'formats'] = formats | ||||||
|  |         ydl.process_ie_result(info_dict) | ||||||
|  |         downloaded = ydl.downloaded_info_dicts[0] | ||||||
|  |         self.assertEqual(downloaded[u'ext'], u'flv') | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     unittest.main() | ||||||
| @ -484,6 +484,15 @@ class YoutubeDL(object): | |||||||
|         format_limit = self.params.get('format_limit', None) |         format_limit = self.params.get('format_limit', None) | ||||||
|         if format_limit: |         if format_limit: | ||||||
|             formats = [f for f in formats if f['format_id'] <= format_limit] |             formats = [f for f in formats if f['format_id'] <= format_limit] | ||||||
|  |         if self.params.get('prefer_free_formats'): | ||||||
|  |             def _free_formats_key(f): | ||||||
|  |                 try: | ||||||
|  |                     ext_ord = [u'flv', u'mp4', u'webm'].index(f['ext']) | ||||||
|  |                 except ValueError: | ||||||
|  |                     ext_ord = -1 | ||||||
|  |                 # We only compare the extension if they have the same height and width | ||||||
|  |                 return (f.get('height'), f.get('width'), ext_ord) | ||||||
|  |             formats = sorted(formats, key=_free_formats_key) | ||||||
| 
 | 
 | ||||||
|         req_format = self.params.get('format', 'best') |         req_format = self.params.get('format', 'best') | ||||||
|         formats_to_download = [] |         formats_to_download = [] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
						Jaime Marquínez Ferrándiz