mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 06:22:38 +09: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