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()
'-I', '--playlist-items',
dest='playlist_items', metavar='ITEM_SPEC', default=None,
help=(
- 'Comma separated playlist_index of the videos to download. '
+ 'Comma separated playlist_index of the items to download. '
'You can specify a range using "[START]:[STOP][:STEP]". For backward compatibility, START-STOP is also supported. '
'Use negative indices to count from the right and negative STEP to download in reverse order. '
- 'E.g. "-I 1:3,7,-5::2" used on a playlist of size 15 will download the videos at index 1,2,3,7,11,13,15'))
+ 'E.g. "-I 1:3,7,-5::2" used on a playlist of size 15 will download the items at index 1,2,3,7,11,13,15'))
selection.add_option(
'--match-title',
dest='matchtitle', metavar='REGEX',
selection.add_option(
'--max-filesize',
metavar='SIZE', dest='max_filesize', default=None,
- help='Abort download if filesize if larger than SIZE, e.g. 50k or 44.6M')
+ help='Abort download if filesize is larger than SIZE, e.g. 50k or 44.6M')
selection.add_option(
'--date',
metavar='DATE', dest='date', default=None,
selection.add_option(
'--break-per-input',
action='store_true', dest='break_per_url', default=False,
- help='--break-on-existing, --break-on-reject, --max-downloads, and autonumber resets per input URL')
+ help='Alters --max-downloads, --break-on-existing, --break-on-reject, and autonumber to reset per input URL')
selection.add_option(
'--no-break-per-input',
action='store_false', dest='break_per_url',
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(
help=optparse.SUPPRESS_HELP)
postproc.add_option(
'--parse-metadata',
- metavar='FROM:TO', dest='parse_metadata', action='append',
+ metavar='[WHEN:]FROM:TO', dest='parse_metadata', **when_prefix('pre_process'),
help=(
- 'Parse additional metadata like title/artist from other fields; '
- 'see "MODIFYING METADATA" for details'))
+ 'Parse additional metadata like title/artist from other fields; see "MODIFYING METADATA" for details. '
+ 'Supported values of "WHEN" are the same as that of --use-postprocessor (default: pre_process)'))
postproc.add_option(
'--replace-in-metadata',
- dest='parse_metadata', metavar='FIELDS REGEX REPLACE', action='append', nargs=3,
- help='Replace text in a metadata field using the given regex. This option can be used multiple times')
+ dest='parse_metadata', metavar='[WHEN:]FIELDS REGEX REPLACE', nargs=3, **when_prefix('pre_process'),
+ help=(
+ 'Replace text in a metadata field using the given regex. This option can be used multiple times. '
+ 'Supported values of "WHEN" are the same as that of --use-postprocessor (default: pre_process)'))
postproc.add_option(
'--xattrs', '--xattr',
action='store_true', dest='xattrs', default=False,
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. '
'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). '