logtostderr: Log messages to stderr instead of stdout.
writedescription: Write the video description to a .description file
writeinfojson: Write the video description to a .info.json file
+ writeannotations: Write the video annotations to a .annotations.xml file
writethumbnail: Write the thumbnail image to a file
writesubtitles: Write the video subtitles to a file
writeautomaticsub: Write the automatic subtitles to a file
""" Report that the metadata file has been written """
self.to_screen(u'[info] Video description metadata as JSON to: ' + infofn)
+ def report_writeannotations(self, annofn):
+ """ Report that the annotations file has been written. """
+ self.to_screen(u'[info] Writing video annotations to: ' + annofn)
+
def report_file_already_downloaded(self, file_name):
"""Report file has already been fully downloaded."""
try:
info_dict['playlist'] = None
info_dict['playlist_index'] = None
+ # This extractors handle format selection themselves
+ if info_dict['extractor'] in [u'youtube', u'Youku', u'YouPorn', u'mixcloud']:
+ self.process_info(info_dict)
+ return info_dict
+
# We now pick which formats have to be downloaded
if info_dict.get('formats') is None:
# There's only one format available
# 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('height') is not None:
+ if format.get('width') is not None:
+ format_desc = u'%sx%s' % (format['width'], format['height'])
+ else:
+ format_desc = u'%sp' % format['height']
+ else:
+ format_desc = '???'
+ format['format'] = format_desc
if format.get('format_id') is None:
format['format_id'] = compat_str(i)
self.list_formats(info_dict)
return
+ format_limit = self.params.get('format_limit', None)
+ if 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')
formats_to_download = []
if req_format == 'best' or req_format is None:
self.report_error(u'Cannot write description file ' + descfn)
return
+ if self.params.get('writeannotations', False):
+ try:
+ annofn = filename + u'.annotations.xml'
+ self.report_writeannotations(annofn)
+ with io.open(encodeFilename(annofn), 'w', encoding='utf-8') as annofile:
+ annofile.write(info_dict['annotations'])
+ except (KeyError, TypeError):
+ self.report_warning(u'There are no annotations to write.')
+ except (OSError, IOError):
+ self.report_error(u'Cannot write annotations file: ' + annofn)
+ return
+
subtitles_are_requested = any([self.params.get('writesubtitles', False),
self.params.get('writeautomaticsub')])