mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 18:47:06 -05:00 
			
		
		
		
	Merge pull request #12909 from remitamine/raw-sub
[YoutubeDL] write raw subtitle files
This commit is contained in:
		@@ -1763,29 +1763,30 @@ class YoutubeDL(object):
 | 
			
		||||
            ie = self.get_info_extractor(info_dict['extractor_key'])
 | 
			
		||||
            for sub_lang, sub_info in subtitles.items():
 | 
			
		||||
                sub_format = sub_info['ext']
 | 
			
		||||
                if sub_info.get('data') is not None:
 | 
			
		||||
                    sub_data = sub_info['data']
 | 
			
		||||
                sub_filename = subtitles_filename(filename, sub_lang, sub_format)
 | 
			
		||||
                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:
 | 
			
		||||
                    try:
 | 
			
		||||
                        sub_data = ie._download_webpage(
 | 
			
		||||
                            sub_info['url'], info_dict['id'], note=False)
 | 
			
		||||
                    except ExtractorError as err:
 | 
			
		||||
                        self.report_warning('Unable to download subtitle for "%s": %s' %
 | 
			
		||||
                                            (sub_lang, error_to_compat_str(err.cause)))
 | 
			
		||||
                        continue
 | 
			
		||||
                try:
 | 
			
		||||
                    sub_filename = subtitles_filename(filename, sub_lang, sub_format)
 | 
			
		||||
                    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))
 | 
			
		||||
                    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/rg3/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:
 | 
			
		||||
                        self.to_screen('[info] Writing video subtitles to: ' + sub_filename)
 | 
			
		||||
                        # Use newline='' to prevent conversion of newline characters
 | 
			
		||||
                        # See https://github.com/rg3/youtube-dl/issues/10268
 | 
			
		||||
                        with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile:
 | 
			
		||||
                            subfile.write(sub_data)
 | 
			
		||||
                except (OSError, IOError):
 | 
			
		||||
                    self.report_error('Cannot write subtitles file ' + sub_filename)
 | 
			
		||||
                    return
 | 
			
		||||
                        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
 | 
			
		||||
 | 
			
		||||
        if self.params.get('writeinfojson', False):
 | 
			
		||||
            infofn = replace_extension(filename, 'info.json', info_dict.get('ext'))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user