mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[utils] Improve subtitles_filename (closes #22753)
This commit is contained in:
		| @@ -74,6 +74,7 @@ from youtube_dl.utils import ( | |||||||
|     str_to_int, |     str_to_int, | ||||||
|     strip_jsonp, |     strip_jsonp, | ||||||
|     strip_or_none, |     strip_or_none, | ||||||
|  |     subtitles_filename, | ||||||
|     timeconvert, |     timeconvert, | ||||||
|     unescapeHTML, |     unescapeHTML, | ||||||
|     unified_strdate, |     unified_strdate, | ||||||
| @@ -261,6 +262,11 @@ class TestUtil(unittest.TestCase): | |||||||
|         self.assertEqual(replace_extension('.abc', 'temp'), '.abc.temp') |         self.assertEqual(replace_extension('.abc', 'temp'), '.abc.temp') | ||||||
|         self.assertEqual(replace_extension('.abc.ext', 'temp'), '.abc.temp') |         self.assertEqual(replace_extension('.abc.ext', 'temp'), '.abc.temp') | ||||||
|  |  | ||||||
|  |     def test_subtitles_filename(self): | ||||||
|  |         self.assertEqual(subtitles_filename('abc.ext', 'en', 'vtt'), 'abc.en.vtt') | ||||||
|  |         self.assertEqual(subtitles_filename('abc.ext', 'en', 'vtt', 'ext'), 'abc.en.vtt') | ||||||
|  |         self.assertEqual(subtitles_filename('abc.unexpected_ext', 'en', 'vtt', 'ext'), 'abc.unexpected_ext.en.vtt') | ||||||
|  |  | ||||||
|     def test_remove_start(self): |     def test_remove_start(self): | ||||||
|         self.assertEqual(remove_start(None, 'A - '), None) |         self.assertEqual(remove_start(None, 'A - '), None) | ||||||
|         self.assertEqual(remove_start('A - B', 'A - '), 'B') |         self.assertEqual(remove_start('A - B', 'A - '), 'B') | ||||||
|   | |||||||
| @@ -1814,7 +1814,7 @@ class YoutubeDL(object): | |||||||
|             ie = self.get_info_extractor(info_dict['extractor_key']) |             ie = self.get_info_extractor(info_dict['extractor_key']) | ||||||
|             for sub_lang, sub_info in subtitles.items(): |             for sub_lang, sub_info in subtitles.items(): | ||||||
|                 sub_format = sub_info['ext'] |                 sub_format = sub_info['ext'] | ||||||
|                 sub_filename = subtitles_filename(filename, sub_lang, sub_format) |                 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)): |                 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] Video subtitle %s.%s is already present' % (sub_lang, sub_format)) | ||||||
|                 else: |                 else: | ||||||
|   | |||||||
| @@ -393,7 +393,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | |||||||
|             sub_ext = sub_info['ext'] |             sub_ext = sub_info['ext'] | ||||||
|             if ext != 'webm' or ext == 'webm' and sub_ext == 'vtt': |             if ext != 'webm' or ext == 'webm' and sub_ext == 'vtt': | ||||||
|                 sub_langs.append(lang) |                 sub_langs.append(lang) | ||||||
|                 sub_filenames.append(subtitles_filename(filename, lang, sub_ext)) |                 sub_filenames.append(subtitles_filename(filename, lang, sub_ext, ext)) | ||||||
|             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': | ||||||
|                     webm_vtt_warn = True |                     webm_vtt_warn = True | ||||||
| @@ -606,9 +606,9 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): | |||||||
|                 self._downloader.to_screen( |                 self._downloader.to_screen( | ||||||
|                     '[ffmpeg] Subtitle file for %s is already in the requested format' % new_ext) |                     '[ffmpeg] Subtitle file for %s is already in the requested format' % new_ext) | ||||||
|                 continue |                 continue | ||||||
|             old_file = subtitles_filename(filename, lang, ext) |             old_file = subtitles_filename(filename, lang, ext, info.get('ext')) | ||||||
|             sub_filenames.append(old_file) |             sub_filenames.append(old_file) | ||||||
|             new_file = subtitles_filename(filename, lang, new_ext) |             new_file = subtitles_filename(filename, lang, new_ext, info.get('ext')) | ||||||
|  |  | ||||||
|             if ext in ('dfxp', 'ttml', 'tt'): |             if ext in ('dfxp', 'ttml', 'tt'): | ||||||
|                 self._downloader.report_warning( |                 self._downloader.report_warning( | ||||||
| @@ -616,7 +616,7 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): | |||||||
|                     'which results in style information loss') |                     'which results in style information loss') | ||||||
|  |  | ||||||
|                 dfxp_file = old_file |                 dfxp_file = old_file | ||||||
|                 srt_file = subtitles_filename(filename, lang, 'srt') |                 srt_file = subtitles_filename(filename, lang, 'srt', info.get('ext')) | ||||||
|  |  | ||||||
|                 with open(dfxp_file, 'rb') as f: |                 with open(dfxp_file, 'rb') as f: | ||||||
|                     srt_data = dfxp2srt(f.read()) |                     srt_data = dfxp2srt(f.read()) | ||||||
|   | |||||||
| @@ -2906,8 +2906,8 @@ def determine_ext(url, default_ext='unknown_video'): | |||||||
|         return default_ext |         return default_ext | ||||||
|  |  | ||||||
|  |  | ||||||
| def subtitles_filename(filename, sub_lang, sub_format): | def subtitles_filename(filename, sub_lang, sub_format, expected_real_ext=None): | ||||||
|     return filename.rsplit('.', 1)[0] + '.' + sub_lang + '.' + sub_format |     return replace_extension(filename, sub_lang + '.' + sub_format, expected_real_ext) | ||||||
|  |  | ||||||
|  |  | ||||||
| def date_from_str(date_str): | def date_from_str(date_str): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user