parent
4455918e7f
commit
119e40ef64
4 changed files with 59 additions and 57 deletions
44
README.md
44
README.md
|
@ -725,7 +725,7 @@ You can also fork the project on GitHub and run your fork's [build workflow](.gi
|
|||
screen, optionally prefixed with when to
|
||||
print it, separated by a ":". Supported
|
||||
values of "WHEN" are the same as that of
|
||||
--use-postprocessor, and "video" (default).
|
||||
--use-postprocessor (default: video).
|
||||
Implies --quiet. Implies --simulate unless
|
||||
--no-simulate or later stages of WHEN are
|
||||
used. This option can be used multiple times
|
||||
|
@ -979,18 +979,18 @@ You can also fork the project on GitHub and run your fork's [build workflow](.gi
|
|||
--ffmpeg-location PATH Location of the ffmpeg binary; either the
|
||||
path to the binary or its containing directory
|
||||
--exec [WHEN:]CMD Execute a command, optionally prefixed with
|
||||
when to execute it (after_move if
|
||||
unspecified), separated by a ":". Supported
|
||||
values of "WHEN" are the same as that of
|
||||
--use-postprocessor. Same syntax as the
|
||||
output template can be used to pass any
|
||||
field as arguments to the command. After
|
||||
download, an additional field "filepath"
|
||||
that contains the final path of the
|
||||
downloaded file is also available, and if no
|
||||
fields are passed, %(filepath)q is appended
|
||||
to the end of the command. This option can
|
||||
be used multiple times
|
||||
when to execute it, separated by a ":".
|
||||
Supported values of "WHEN" are the same as
|
||||
that of --use-postprocessor (default:
|
||||
after_move). Same syntax as the output
|
||||
template can be used to pass any field as
|
||||
arguments to the command. After download, an
|
||||
additional field "filepath" that contains
|
||||
the final path of the downloaded file is
|
||||
also available, and if no fields are passed,
|
||||
%(filepath)q is appended to the end of the
|
||||
command. This option can be used multiple
|
||||
times
|
||||
--no-exec Remove any previously defined --exec
|
||||
--convert-subs FORMAT Convert the subtitles to another format
|
||||
(currently supported: ass, lrc, srt, vtt)
|
||||
|
@ -1028,14 +1028,16 @@ You can also fork the project on GitHub and run your fork's [build workflow](.gi
|
|||
postprocessor is invoked. It can be one of
|
||||
"pre_process" (after video extraction),
|
||||
"after_filter" (after video passes filter),
|
||||
"before_dl" (before each video download),
|
||||
"post_process" (after each video download;
|
||||
default), "after_move" (after moving video
|
||||
file to it's final locations), "after_video"
|
||||
(after downloading and processing all
|
||||
formats of a video), or "playlist" (at end
|
||||
of playlist). This option can be used
|
||||
multiple times to add different postprocessors
|
||||
"video" (after --format; before
|
||||
--print/--output), "before_dl" (before each
|
||||
video download), "post_process" (after each
|
||||
video download; default), "after_move"
|
||||
(after moving video file to it's final
|
||||
locations), "after_video" (after downloading
|
||||
and processing all formats of a video), or
|
||||
"playlist" (at end of playlist). This option
|
||||
can be used multiple times to add different
|
||||
postprocessors
|
||||
|
||||
## SponsorBlock Options:
|
||||
Make chapter entries for, or remove various segments (sponsor,
|
||||
|
|
|
@ -2977,6 +2977,16 @@ class YoutubeDL:
|
|||
|
||||
# Does nothing under normal operation - for backward compatibility of process_info
|
||||
self.post_extract(info_dict)
|
||||
|
||||
def replace_info_dict(new_info):
|
||||
nonlocal info_dict
|
||||
if new_info == info_dict:
|
||||
return
|
||||
info_dict.clear()
|
||||
info_dict.update(new_info)
|
||||
|
||||
new_info, _ = self.pre_process(info_dict, 'video')
|
||||
replace_info_dict(new_info)
|
||||
self._num_downloads += 1
|
||||
|
||||
# info_dict['_filename'] needs to be set for backward compatibility
|
||||
|
@ -3090,13 +3100,6 @@ class YoutubeDL:
|
|||
for link_type, should_write in write_links.items()):
|
||||
return
|
||||
|
||||
def replace_info_dict(new_info):
|
||||
nonlocal info_dict
|
||||
if new_info == info_dict:
|
||||
return
|
||||
info_dict.clear()
|
||||
info_dict.update(new_info)
|
||||
|
||||
new_info, files_to_move = self.pre_process(info_dict, 'before_dl', files_to_move)
|
||||
replace_info_dict(new_info)
|
||||
|
||||
|
|
|
@ -277,6 +277,20 @@ def create_parser():
|
|||
out_dict[key] = out_dict.get(key, []) + [val] if append else val
|
||||
setattr(parser.values, option.dest, out_dict)
|
||||
|
||||
def when_prefix(default):
|
||||
return {
|
||||
'default': {},
|
||||
'type': 'str',
|
||||
'action': 'callback',
|
||||
'callback': _dict_from_options_callback,
|
||||
'callback_kwargs': {
|
||||
'allowed_keys': '|'.join(map(re.escape, POSTPROCESS_WHEN)),
|
||||
'default_key': default,
|
||||
'multiple_keys': False,
|
||||
'append': True,
|
||||
},
|
||||
}
|
||||
|
||||
parser = _YoutubeDLOptionParser()
|
||||
alias_group = optparse.OptionGroup(parser, 'Aliases')
|
||||
Formatter = string.Formatter()
|
||||
|
@ -1086,28 +1100,16 @@ def create_parser():
|
|||
help='Do not download the video but write all related files (Alias: --no-download)')
|
||||
verbosity.add_option(
|
||||
'-O', '--print',
|
||||
metavar='[WHEN:]TEMPLATE', dest='forceprint', default={}, type='str',
|
||||
action='callback', callback=_dict_from_options_callback,
|
||||
callback_kwargs={
|
||||
'allowed_keys': 'video|' + '|'.join(map(re.escape, POSTPROCESS_WHEN)),
|
||||
'default_key': 'video',
|
||||
'multiple_keys': False,
|
||||
'append': True,
|
||||
}, help=(
|
||||
metavar='[WHEN:]TEMPLATE', dest='forceprint', **when_prefix('video'),
|
||||
help=(
|
||||
'Field name or output template to print to screen, optionally prefixed with when to print it, separated by a ":". '
|
||||
'Supported values of "WHEN" are the same as that of --use-postprocessor, and "video" (default). '
|
||||
'Supported values of "WHEN" are the same as that of --use-postprocessor (default: video). '
|
||||
'Implies --quiet. Implies --simulate unless --no-simulate or later stages of WHEN are used. '
|
||||
'This option can be used multiple times'))
|
||||
verbosity.add_option(
|
||||
'--print-to-file',
|
||||
metavar='[WHEN:]TEMPLATE FILE', dest='print_to_file', default={}, type='str', nargs=2,
|
||||
action='callback', callback=_dict_from_options_callback,
|
||||
callback_kwargs={
|
||||
'allowed_keys': 'video|' + '|'.join(map(re.escape, POSTPROCESS_WHEN)),
|
||||
'default_key': 'video',
|
||||
'multiple_keys': False,
|
||||
'append': True,
|
||||
}, help=(
|
||||
metavar='[WHEN:]TEMPLATE FILE', dest='print_to_file', nargs=2, **when_prefix('video'),
|
||||
help=(
|
||||
'Append given template to the file. The values of WHEN and TEMPLATE are same as that of --print. '
|
||||
'FILE uses the same syntax as the output template. This option can be used multiple times'))
|
||||
verbosity.add_option(
|
||||
|
@ -1629,16 +1631,10 @@ def create_parser():
|
|||
help='Location of the ffmpeg binary; either the path to the binary or its containing directory')
|
||||
postproc.add_option(
|
||||
'--exec',
|
||||
metavar='[WHEN:]CMD', dest='exec_cmd', default={}, type='str',
|
||||
action='callback', callback=_dict_from_options_callback,
|
||||
callback_kwargs={
|
||||
'allowed_keys': '|'.join(map(re.escape, POSTPROCESS_WHEN)),
|
||||
'default_key': 'after_move',
|
||||
'multiple_keys': False,
|
||||
'append': True,
|
||||
}, help=(
|
||||
'Execute a command, optionally prefixed with when to execute it (after_move if unspecified), separated by a ":". '
|
||||
'Supported values of "WHEN" are the same as that of --use-postprocessor. '
|
||||
metavar='[WHEN:]CMD', dest='exec_cmd', **when_prefix('after_move'),
|
||||
help=(
|
||||
'Execute a command, optionally prefixed with when to execute it, separated by a ":". '
|
||||
'Supported values of "WHEN" are the same as that of --use-postprocessor (default: after_move). '
|
||||
'Same syntax as the output template can be used to pass any field as arguments to the command. '
|
||||
'After download, an additional field "filepath" that contains the final path of the downloaded file '
|
||||
'is also available, and if no fields are passed, %(filepath)q is appended to the end of the command. '
|
||||
|
@ -1714,7 +1710,8 @@ def create_parser():
|
|||
'ARGS are a semicolon ";" delimited list of NAME=VALUE. '
|
||||
'The "when" argument determines when the postprocessor is invoked. '
|
||||
'It can be one of "pre_process" (after video extraction), "after_filter" (after video passes filter), '
|
||||
'"before_dl" (before each video download), "post_process" (after each video download; default), '
|
||||
'"video" (after --format; before --print/--output), "before_dl" (before each video download), '
|
||||
'"post_process" (after each video download; default), '
|
||||
'"after_move" (after moving video file to it\'s final locations), '
|
||||
'"after_video" (after downloading and processing all formats of a video), '
|
||||
'or "playlist" (at end of playlist). '
|
||||
|
|
|
@ -3395,7 +3395,7 @@ def qualities(quality_ids):
|
|||
return q
|
||||
|
||||
|
||||
POSTPROCESS_WHEN = ('pre_process', 'after_filter', 'before_dl', 'post_process', 'after_move', 'after_video', 'playlist')
|
||||
POSTPROCESS_WHEN = ('pre_process', 'after_filter', 'video', 'before_dl', 'post_process', 'after_move', 'after_video', 'playlist')
|
||||
|
||||
|
||||
DEFAULT_OUTTMPL = {
|
||||
|
|
Loading…
Reference in a new issue