Add field name
for subtitles
Co-authored by: pukkandan, tpikonen Based on: #310, https://github.com/ytdl-org/youtube-dl/pull/26112
This commit is contained in:
parent
120916dac2
commit
2412044c90
3 changed files with 18 additions and 6 deletions
|
@ -3005,10 +3005,17 @@ class YoutubeDL(object):
|
||||||
return
|
return
|
||||||
self.to_screen(
|
self.to_screen(
|
||||||
'Available %s for %s:' % (name, video_id))
|
'Available %s for %s:' % (name, video_id))
|
||||||
|
|
||||||
|
def _row(lang, formats):
|
||||||
|
exts, names = zip(*((f['ext'], f['name']) for f in reversed(formats)))
|
||||||
|
if len(set(names)) == 1:
|
||||||
|
names = names[:1]
|
||||||
|
return [lang, ', '.join(names), ', '.join(exts)]
|
||||||
|
|
||||||
self.to_screen(render_table(
|
self.to_screen(render_table(
|
||||||
['Language', 'formats'],
|
['Language', 'Name', 'Formats'],
|
||||||
[[lang, ', '.join(f['ext'] for f in reversed(formats))]
|
[_row(lang, formats) for lang, formats in subtitles.items()],
|
||||||
for lang, formats in subtitles.items()]))
|
hideEmpty=True))
|
||||||
|
|
||||||
def urlopen(self, req):
|
def urlopen(self, req):
|
||||||
""" Start an HTTP download """
|
""" Start an HTTP download """
|
||||||
|
|
|
@ -250,6 +250,8 @@ class InfoExtractor(object):
|
||||||
entry and one of:
|
entry and one of:
|
||||||
* "data": The subtitles file contents
|
* "data": The subtitles file contents
|
||||||
* "url": A URL pointing to the subtitles file
|
* "url": A URL pointing to the subtitles file
|
||||||
|
It can optionally also have:
|
||||||
|
* "name": Name or description of the subtitles
|
||||||
"ext" will be calculated from URL if missing
|
"ext" will be calculated from URL if missing
|
||||||
automatic_captions: Like 'subtitles'; contains automatically generated
|
automatic_captions: Like 'subtitles'; contains automatically generated
|
||||||
captions instead of normal subtitles
|
captions instead of normal subtitles
|
||||||
|
|
|
@ -474,8 +474,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
||||||
filename = information['filepath']
|
filename = information['filepath']
|
||||||
|
|
||||||
ext = information['ext']
|
ext = information['ext']
|
||||||
sub_langs = []
|
sub_langs, sub_names, sub_filenames = [], [], []
|
||||||
sub_filenames = []
|
|
||||||
webm_vtt_warn = False
|
webm_vtt_warn = False
|
||||||
mp4_ass_warn = False
|
mp4_ass_warn = False
|
||||||
|
|
||||||
|
@ -485,6 +484,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
||||||
self.report_warning('JSON subtitles cannot be embedded')
|
self.report_warning('JSON subtitles cannot be embedded')
|
||||||
elif ext != 'webm' or ext == 'webm' and sub_ext == 'vtt':
|
elif ext != 'webm' or ext == 'webm' and sub_ext == 'vtt':
|
||||||
sub_langs.append(lang)
|
sub_langs.append(lang)
|
||||||
|
sub_names.append(sub_info.get('name'))
|
||||||
sub_filenames.append(sub_info['filepath'])
|
sub_filenames.append(sub_info['filepath'])
|
||||||
else:
|
else:
|
||||||
if not webm_vtt_warn and ext == 'webm' and sub_ext != 'vtt':
|
if not webm_vtt_warn and ext == 'webm' and sub_ext != 'vtt':
|
||||||
|
@ -510,10 +510,13 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
||||||
]
|
]
|
||||||
if information['ext'] == 'mp4':
|
if information['ext'] == 'mp4':
|
||||||
opts += ['-c:s', 'mov_text']
|
opts += ['-c:s', 'mov_text']
|
||||||
for (i, lang) in enumerate(sub_langs):
|
for i, (lang, name) in enumerate(zip(sub_langs, sub_names)):
|
||||||
opts.extend(['-map', '%d:0' % (i + 1)])
|
opts.extend(['-map', '%d:0' % (i + 1)])
|
||||||
lang_code = ISO639Utils.short2long(lang) or lang
|
lang_code = ISO639Utils.short2long(lang) or lang
|
||||||
opts.extend(['-metadata:s:s:%d' % i, 'language=%s' % lang_code])
|
opts.extend(['-metadata:s:s:%d' % i, 'language=%s' % lang_code])
|
||||||
|
if name:
|
||||||
|
opts.extend(['-metadata:s:s:%d' % i, 'handler_name=%s' % name,
|
||||||
|
'-metadata:s:s:%d' % i, 'title=%s' % name])
|
||||||
|
|
||||||
temp_filename = prepend_extension(filename, 'temp')
|
temp_filename = prepend_extension(filename, 'temp')
|
||||||
self.to_screen('Embedding subtitles in "%s"' % filename)
|
self.to_screen('Embedding subtitles in "%s"' % filename)
|
||||||
|
|
Loading…
Reference in a new issue