+ def process_video_result(self, info_dict, download=True):
+ assert info_dict.get('_type', 'video') == 'video'
+
+ if 'playlist' not in info_dict:
+ # It isn't part of a playlist
+ info_dict['playlist'] = None
+ info_dict['playlist_index'] = None
+
+ # We now pick which formats have to be downloaded
+ if info_dict.get('formats') is None:
+ # There's only one format available
+ formats = [info_dict]
+ else:
+ formats = info_dict['formats']
+
+ # We check that all the formats have the format and format_id fields
+ for (i, format) in enumerate(formats):
+ if format.get('format') is None:
+ format['format'] = compat_str(i)
+ if format.get('format_id') is None:
+ format['format_id'] = compat_str(i)
+
+ if self.params.get('listformats', None):
+ self.list_formats(info_dict)
+ return
+
+ req_format = self.params.get('format', 'best')
+ formats_to_download = []
+ if req_format == 'best' or req_format is None:
+ formats_to_download = [formats[-1]]
+ elif req_format == 'worst':
+ formats_to_download = [formats[0]]
+ # The -1 is for supporting YoutubeIE
+ elif req_format in ('-1', 'all'):
+ formats_to_download = formats
+ else:
+ # We can accept formats requestd in the format: 34/10/5, we pick
+ # the first that is availble, starting from left
+ req_formats = req_format.split('/')
+ for rf in req_formats:
+ matches = filter(lambda f:f['format_id'] == rf ,formats)
+ if matches:
+ formats_to_download = [matches[0]]
+ break
+ if not formats_to_download:
+ raise ExtractorError(u'requested format not available')
+
+ if download:
+ if len(formats_to_download) > 1:
+ self.to_screen(u'[info] %s: downloading video in %s formats' % (info_dict['id'], len(formats_to_download)))
+ for format in formats_to_download:
+ new_info = dict(info_dict)
+ new_info.update(format)
+ self.process_info(new_info)
+ # We update the info dict with the best quality format (backwards compatibility)
+ info_dict.update(formats_to_download[-1])
+ return info_dict
+