Created
August 18, 2020 19:46
-
-
Save jegfish/6aa9337516f213ed18b8145abedd87e4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://github.com/ytdl-org/youtube-dl/blob/7947a1f7dbc6ba47a6f22ab67fd330e57c0ef87c/youtube_dl/YoutubeDL.py#L1811 | |
# in process_info method of the YoutubeDL class in youtube_dl/YoutubeDL.py | |
# original as of writing this (latest commit fca6dba8b80286ae6d3ca0a60c4799c220a52650) | |
# youtube-dl version 2020.07.28 | |
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['requested_subtitles'] | |
ie = self.get_info_extractor(info_dict['extractor_key']) | |
for sub_lang, sub_info in subtitles.items(): | |
sub_format = sub_info['ext'] | |
sub_filename = subtitles_filename(filename, sub_lang, sub_format, info_dict.get('ext')) | |
if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(sub_filename)): | |
self.to_screen('[info] Video subtitle %s.%s is already present' % (sub_lang, sub_format)) | |
else: | |
self.to_screen('[info] Writing video subtitles to: ' + sub_filename) | |
if sub_info.get('data') is not None: | |
try: | |
# Use newline='' to prevent conversion of newline characters | |
# See https://github.com/ytdl-org/youtube-dl/issues/10268 | |
with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile: | |
subfile.write(sub_info['data']) | |
except (OSError, IOError): | |
self.report_error('Cannot write subtitles file ' + sub_filename) | |
return | |
else: | |
try: | |
sub_data = ie._request_webpage( | |
sub_info['url'], info_dict['id'], note=False).read() | |
with io.open(encodeFilename(sub_filename), 'wb') as subfile: | |
subfile.write(sub_data) | |
except (ExtractorError, IOError, OSError, ValueError) as err: | |
self.report_warning('Unable to download subtitle for "%s": %s' % | |
(sub_lang, error_to_compat_str(err))) | |
continue | |
# my changed code | |
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['requested_subtitles'] | |
ie = self.get_info_extractor(info_dict['extractor_key']) | |
failed_sub_langs = [] #CHANGE: keep track of sub langs that fail to download | |
for sub_lang, sub_info in subtitles.items(): | |
sub_format = sub_info['ext'] | |
sub_filename = subtitles_filename(filename, sub_lang, sub_format, info_dict.get('ext')) | |
if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(sub_filename)): | |
self.to_screen('[info] Video subtitle %s.%s is already present' % (sub_lang, sub_format)) | |
else: | |
self.to_screen('[info] Writing video subtitles to: ' + sub_filename) | |
if sub_info.get('data') is not None: | |
try: | |
# Use newline='' to prevent conversion of newline characters | |
# See https://github.com/ytdl-org/youtube-dl/issues/10268 | |
with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile: | |
subfile.write(sub_info['data']) | |
except (OSError, IOError): | |
self.report_error('Cannot write subtitles file ' + sub_filename) | |
return | |
else: | |
try: | |
sub_data = ie._request_webpage( | |
sub_info['url'], info_dict['id'], note=False).read() | |
with io.open(encodeFilename(sub_filename), 'wb') as subfile: | |
subfile.write(sub_data) | |
except (ExtractorError, IOError, OSError, ValueError) as err: | |
self.report_warning('Unable to download subtitle for "%s": %s' % | |
(sub_lang, error_to_compat_str(err))) | |
failed_sub_langs.append(sub_lang) #CHANGE: add sub lang to the list if it fails | |
continue | |
#CHANGE: delete failed sub langs from 'requested_subtitles' dictionary | |
for sub_lang in failed_sub_langs: | |
del info_dict['requested_subtitles'][sub_lang] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment