diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 708a04f92..c21864f7e 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -934,6 +934,15 @@ def gen(): # test('%(foo|)s.%(ext)s', ('.mp4', '_.mp4')) # FIXME: ? # test('%(foo|)s', ('', '_')) # FIXME: ? + # Trim filename + test('%(id)s.%(filesize)s.%(ext)s', ('1234.1024.mp4', '123.mp4'), trim_file_name=3) + test( + '%(id)s.%(filesize)s.%(ext)s', + ('1234.1024.info.json', '123.info.json'), + info=dict(self.outtmpl_info, ext='info.json'), trim_file_name=3 + ) + test('12 34.%(filesize)s.%(ext)s', ('12 34.1024.mp4', '12 .mp4'), trim_file_name=3) + # Environment variable expansion for prepare_filename os.environ['__yt_dlp_var'] = 'expanded' envvar = '%__yt_dlp_var%' if os.name == 'nt' else '$__yt_dlp_var' diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index 8790b326b..48f0a27c2 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -1455,6 +1455,12 @@ def _prepare_filename(self, info_dict, *, outtmpl=None, tmpl_type=None): if not filename: return None + trim_file_name = self.params.get('trim_file_name') + if trim_file_name: + # https://github.com/yt-dlp/yt-dlp/issues/5526#issuecomment-1312783517 + no_ext, *ext = filename.rsplit('.', info_dict.get('ext', '').count('.') + 1) + filename = join_nonempty(no_ext[:trim_file_name], *ext, delim='.') + if tmpl_type in ('', 'temp'): final_ext, ext = self.params.get('final_ext'), info_dict.get('ext') if final_ext and ext and final_ext != ext and filename.endswith(f'.{final_ext}'): @@ -1464,12 +1470,6 @@ def _prepare_filename(self, info_dict, *, outtmpl=None, tmpl_type=None): if force_ext: filename = replace_extension(filename, force_ext, info_dict.get('ext')) - # https://github.com/blackjack4494/youtube-dlc/issues/85 - trim_file_name = self.params.get('trim_file_name', False) - if trim_file_name: - no_ext, *ext = filename.rsplit('.', 2) - filename = join_nonempty(no_ext[:trim_file_name], *ext, delim='.') - return filename except ValueError as err: self.report_error('Error in output template: ' + str(err) + ' (encoding: ' + repr(preferredencoding()) + ')')