info_dict['upload_date'] = upload_date.strftime('%Y%m%d')
if self.params.get('listsubtitles', False):
- self.list_subtitles(info_dict['id'], info_dict.get('subtitles'))
+ if 'automatic_captions' in info_dict:
+ self.list_subtitles(info_dict['id'], info_dict.get('automatic_captions'), 'automatic captions')
+ self.list_subtitles(info_dict['id'], info_dict.get('subtitles'), 'subtitles')
return
- info_dict['subtitles'] = self.process_subtitles(info_dict['id'], info_dict.get('subtitles'))
+ info_dict['requested_subtitles'] = self.process_subtitles(
+ info_dict['id'], info_dict.get('subtitles'),
+ info_dict.get('automatic_captions'))
# This extractors handle format selection themselves
if info_dict['extractor'] in ['Youku']:
info_dict.update(formats_to_download[-1])
return info_dict
- def process_subtitles(self, video_id, available_subs):
+ def process_subtitles(self, video_id, available_subs, available_autocaps):
"""Select the requested subtitles and their format"""
+ if available_autocaps and self.params.get('writeautomaticsub'):
+ available_subs = available_subs.copy()
+ for lang, cap_info in available_autocaps.items():
+ if lang not in available_subs:
+ available_subs[lang] = cap_info
+
if not available_subs:
return available_subs
subtitles_are_requested = any([self.params.get('writesubtitles', False),
self.params.get('writeautomaticsub')])
- if subtitles_are_requested and 'subtitles' in info_dict and info_dict['subtitles']:
+ if subtitles_are_requested and info_dict.get('requested_subtitles'):
# subtitles download errors are already managed as troubles in relevant IE
# that way it will silently go on when used with unsupporting IE
- subtitles = info_dict['subtitles']
+ subtitles = info_dict['requested_subtitles']
for sub_lang, sub_info in subtitles.items():
sub_format = sub_info['ext']
if sub_info.get('data') is not None:
['ID', 'width', 'height', 'URL'],
[[t['id'], t.get('width', 'unknown'), t.get('height', 'unknown'), t['url']] for t in thumbnails]))
- def list_subtitles(self, video_id, subtitles):
+ def list_subtitles(self, video_id, subtitles, name='subtitles'):
if not subtitles:
- self.to_screen('%s has no subtitles' % video_id)
+ self.to_screen('%s has no %s' % (video_id, name))
return
- header_line = 'Language formats'
- sub_lines = [
- '%-12s%s' % (lang, ', '.join(f['ext'] for f in reversed(formats)))
- for lang, formats in subtitles.items()]
self.to_screen(
- 'Available subtitles for %s:\n%s\n%s' %
- (video_id, header_line, '\n'.join(sub_lines)))
+ 'Available %s for %s:' % (name, video_id))
+ self.to_screen(render_table(
+ ['Language', 'formats'],
+ [[lang, ', '.join(f['ext'] for f in reversed(formats))]
+ for lang, formats in subtitles.items()]))
def urlopen(self, req):
""" Start an HTTP download """