sanitize = lambda k, v: sanitize_filename(
u'NA' if v is None else compat_str(v),
restricted=self.params.get('restrictfilenames'),
- is_id=k == u'id')
- template_dict = dict((k, sanitize(k, v)) for k, v in template_dict.items())
+ is_id=(k == u'id'))
+ template_dict = dict((k, sanitize(k, v))
+ for k, v in template_dict.items())
- filename = self.params['outtmpl'] % template_dict
+ tmpl = os.path.expanduser(self.params['outtmpl'])
+ filename = tmpl % template_dict
return filename
except KeyError as err:
self.report_error(u'Erroneous output template')
info_dict['playlist_index'] = None
# This extractors handle format selection themselves
- if info_dict['extractor'] in [u'youtube', u'Youku', u'YouPorn', u'mixcloud']:
+ if info_dict['extractor'] in [u'youtube', u'Youku', u'mixcloud']:
if download:
self.process_info(info_dict)
return info_dict
res=self.format_resolution(format),
note=u' ({})'.format(format['format_note']) if format.get('format_note') is not None else '',
)
+ # Automatically determine file extension if missing
+ if 'ext' not in format:
+ format['ext'] = determine_ext(format['url'])
if self.params.get('listformats', None):
self.list_formats(info_dict)
archive_file.write(vid_id + u'\n')
@staticmethod
- def format_resolution(format):
+ def format_resolution(format, default='unknown'):
if format.get('height') is not None:
if format.get('width') is not None:
res = u'%sx%s' % (format['width'], format['height'])
else:
res = u'%sp' % format['height']
else:
- res = '???'
+ res = default
return res
def list_formats(self, info_dict):
formats_s = []
for format in info_dict.get('formats', [info_dict]):
- formats_s.append(u'%-15s: %-5s %-15s[%s]' % (
+ formats_s.append(u'%-15s%-7s %-15s%s' % (
format['format_id'],
format['ext'],
- format.get('format_note') or '-',
+ format.get('format_note', ''),
self.format_resolution(format),
)
)