diff options
Diffstat (limited to 'yt_dlp/YoutubeDL.py')
-rw-r--r-- | yt_dlp/YoutubeDL.py | 63 |
1 files changed, 28 insertions, 35 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index 5b1ee8ee4..aa8a54a55 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -126,6 +126,7 @@ from .extractor import ( ) from .extractor.openload import PhantomJSwrapper from .downloader import ( + FFmpegFD, get_suitable_downloader, shorten_protocol_name ) @@ -2690,20 +2691,15 @@ class YoutubeDL(object): info_dict['__real_download'] = False _protocols = set(determine_protocol(f) for f in requested_formats) - if len(_protocols) == 1: + if len(_protocols) == 1: # All requested formats have same protocol info_dict['protocol'] = _protocols.pop() - directly_mergable = ( - 'no-direct-merge' not in self.params.get('compat_opts', []) - and info_dict.get('protocol') is not None # All requested formats have same protocol - and not self.params.get('allow_unplayable_formats') - and get_suitable_downloader(info_dict, self.params).__name__ == 'FFmpegFD') - if directly_mergable: - info_dict['url'] = requested_formats[0]['url'] - # Treat it as a single download - dl_filename = existing_file(full_filename, temp_filename) - if dl_filename is None: - success, real_download = self.dl(temp_filename, info_dict) - info_dict['__real_download'] = real_download + directly_mergable = FFmpegFD.can_merge_formats(info_dict) + if dl_filename is not None: + pass + elif (directly_mergable and get_suitable_downloader(info_dict, self.params) == FFmpegFD): + info_dict['url'] = '\n'.join(f['url'] for f in requested_formats) + success, real_download = self.dl(temp_filename, info_dict) + info_dict['__real_download'] = real_download else: downloaded = [] merger = FFmpegMergerPP(self) @@ -2717,28 +2713,25 @@ class YoutubeDL(object): 'You have requested merging of multiple formats but ffmpeg is not installed. ' 'The formats won\'t be merged.') - if dl_filename is None: - for f in requested_formats: - new_info = dict(info_dict) - del new_info['requested_formats'] - new_info.update(f) - fname = prepend_extension( - self.prepare_filename(new_info, 'temp'), - 'f%s' % f['format_id'], new_info['ext']) - if not self._ensure_dir_exists(fname): - return - downloaded.append(fname) - partial_success, real_download = self.dl(fname, new_info) - info_dict['__real_download'] = info_dict['__real_download'] or real_download - success = success and partial_success - if merger.available and not self.params.get('allow_unplayable_formats'): - info_dict['__postprocessors'].append(merger) - info_dict['__files_to_merge'] = downloaded - # Even if there were no downloads, it is being merged only now - info_dict['__real_download'] = True - else: - for file in downloaded: - files_to_move[file] = None + for f in requested_formats: + new_info = dict(info_dict) + del new_info['requested_formats'] + new_info.update(f) + fname = prepend_extension(temp_filename, 'f%s' % f['format_id'], new_info['ext']) + if not self._ensure_dir_exists(fname): + return + downloaded.append(fname) + partial_success, real_download = self.dl(fname, new_info) + info_dict['__real_download'] = info_dict['__real_download'] or real_download + success = success and partial_success + if merger.available and not self.params.get('allow_unplayable_formats'): + info_dict['__postprocessors'].append(merger) + info_dict['__files_to_merge'] = downloaded + # Even if there were no downloads, it is being merged only now + info_dict['__real_download'] = True + else: + for file in downloaded: + files_to_move[file] = None else: # Just a single file dl_filename = existing_file(full_filename, temp_filename) |