diff options
Diffstat (limited to 'yt_dlp/__init__.py')
-rw-r--r-- | yt_dlp/__init__.py | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py index 4fa2e2d8c..7469b0f61 100644 --- a/yt_dlp/__init__.py +++ b/yt_dlp/__init__.py @@ -140,6 +140,8 @@ def _real_main(argv=None): '"-f best" selects the best pre-merged format which is often not the best option', 'To let yt-dlp download and merge the best available formats, simply do not pass any format selection', 'If you know what you are doing and want only the best pre-merged format, use "-f b" instead to suppress this warning'))) + if opts.exec_cmd.get('before_dl') and opts.exec_before_dl_cmd: + parser.error('using "--exec-before-download" conflicts with "--exec before_dl:"') if opts.usenetrc and (opts.username is not None or opts.password is not None): parser.error('using .netrc conflicts with giving username/password') if opts.password is not None and opts.username is None: @@ -330,6 +332,9 @@ def _real_main(argv=None): if _video_multistreams_set is False and _audio_multistreams_set is False: _unused_compat_opt('multistreams') outtmpl_default = opts.outtmpl.get('default') + if outtmpl_default == '': + outtmpl_default, opts.skip_download = None, True + del opts.outtmpl['default'] if opts.useid: if outtmpl_default is None: outtmpl_default = opts.outtmpl['default'] = '%(id)s.%(ext)s' @@ -348,9 +353,13 @@ def _real_main(argv=None): for k, tmpl in opts.outtmpl.items(): validate_outtmpl(tmpl, f'{k} output template') - opts.forceprint = opts.forceprint or [] - for tmpl in opts.forceprint or []: - validate_outtmpl(tmpl, 'print template') + for type_, tmpl_list in opts.forceprint.items(): + for tmpl in tmpl_list: + validate_outtmpl(tmpl, f'{type_} print template') + for type_, tmpl_list in opts.print_to_file.items(): + for tmpl, file in tmpl_list: + validate_outtmpl(tmpl, f'{type_} print-to-file template') + validate_outtmpl(file, f'{type_} print-to-file filename') validate_outtmpl(opts.sponsorblock_chapter_title, 'SponsorBlock chapter title') for k, tmpl in opts.progress_template.items(): k = f'{k[:-6]} console title' if '-title' in k else f'{k} progress' @@ -392,7 +401,10 @@ def _real_main(argv=None): opts.parse_metadata.append('title:%s' % opts.metafromtitle) opts.parse_metadata = list(itertools.chain(*map(metadataparser_actions, opts.parse_metadata))) - any_getting = opts.forceprint or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.getduration or opts.dumpjson or opts.dump_single_json + any_getting = (any(opts.forceprint.values()) or opts.dumpjson or opts.dump_single_json + or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail + or opts.getdescription or opts.getfilename or opts.getformat or opts.getduration) + any_printing = opts.print_json download_archive_fn = expand_path(opts.download_archive) if opts.download_archive is not None else opts.download_archive @@ -483,13 +495,6 @@ def _real_main(argv=None): # Run this before the actual video download 'when': 'before_dl' }) - # Must be after all other before_dl - if opts.exec_before_dl_cmd: - postprocessors.append({ - 'key': 'Exec', - 'exec_cmd': opts.exec_before_dl_cmd, - 'when': 'before_dl' - }) if opts.extractaudio: postprocessors.append({ 'key': 'FFmpegExtractAudio', @@ -590,13 +595,21 @@ def _real_main(argv=None): # XAttrMetadataPP should be run after post-processors that may change file contents if opts.xattrs: postprocessors.append({'key': 'XAttrMetadata'}) - # Exec must be the last PP - if opts.exec_cmd: + if opts.concat_playlist != 'never': + postprocessors.append({ + 'key': 'FFmpegConcat', + 'only_multi_video': opts.concat_playlist != 'always', + 'when': 'playlist', + }) + # Exec must be the last PP of each category + if opts.exec_before_dl_cmd: + opts.exec_cmd.setdefault('before_dl', opts.exec_before_dl_cmd) + for when, exec_cmd in opts.exec_cmd.items(): postprocessors.append({ 'key': 'Exec', - 'exec_cmd': opts.exec_cmd, + 'exec_cmd': exec_cmd, # Run this only after the files have been moved to their final locations - 'when': 'after_move' + 'when': when, }) def report_args_compat(arg, name): @@ -654,6 +667,7 @@ def _real_main(argv=None): 'forcefilename': opts.getfilename, 'forceformat': opts.getformat, 'forceprint': opts.forceprint, + 'print_to_file': opts.print_to_file, 'forcejson': opts.dumpjson or opts.print_json, 'dump_single_json': opts.dump_single_json, 'force_write_download_archive': opts.force_write_download_archive, @@ -747,6 +761,7 @@ def _real_main(argv=None): 'skip_playlist_after_errors': opts.skip_playlist_after_errors, 'cookiefile': opts.cookiefile, 'cookiesfrombrowser': opts.cookiesfrombrowser, + 'legacyserverconnect': opts.legacy_server_connect, 'nocheckcertificate': opts.no_check_certificate, 'prefer_insecure': opts.prefer_insecure, 'proxy': opts.proxy, |