diff options
Diffstat (limited to 'yt_dlp/YoutubeDL.py')
-rw-r--r-- | yt_dlp/YoutubeDL.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index aa8a54a55..11add73ad 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -2405,7 +2405,7 @@ class YoutubeDL(object): } else: params = self.params - fd = get_suitable_downloader(info, params)(self, params) + fd = get_suitable_downloader(info, params, to_stdout=(name == '-'))(self, params) if not test: for ph in self._progress_hooks: fd.add_progress_hook(ph) @@ -2677,6 +2677,8 @@ class YoutubeDL(object): 'Requested formats are incompatible for merge and will be merged into mkv.') def correct_ext(filename): + if filename == '-': + return filename filename_real_ext = os.path.splitext(filename)[1][1:] filename_wo_ext = ( os.path.splitext(filename)[0] @@ -2696,7 +2698,8 @@ class YoutubeDL(object): 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): + elif (directly_mergable and get_suitable_downloader( + info_dict, self.params, to_stdout=(temp_filename== '-')) == 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 @@ -2713,14 +2716,23 @@ class YoutubeDL(object): 'You have requested merging of multiple formats but ffmpeg is not installed. ' 'The formats won\'t be merged.') + if temp_filename == '-': + reason = ('using a downloader other than ffmpeg' if directly_mergable + else 'but the formats are incompatible for simultaneous download' if merger.available + else 'but ffmpeg is not installed') + self.report_warning( + f'You have requested downloading multiple formats to stdout {reason}. ' + 'The formats will be streamed one after the other') + fname = temp_filename 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) + if temp_filename != '-': + 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 |