2014-09-12 23:58:44 -06:00
from __future__ import unicode_literals
2014-09-12 23:55:21 -06:00
import os . path
import optparse
2016-08-02 09:03:26 -06:00
import re
2014-09-12 23:55:21 -06:00
import sys
2015-01-23 17:38:48 -07:00
from . downloader . external import list_external_downloaders
2014-11-02 03:23:40 -07:00
from . compat import (
2014-09-30 09:27:53 -06:00
compat_expanduser ,
2015-02-28 13:42:16 -07:00
compat_get_terminal_size ,
2014-09-30 09:27:53 -06:00
compat_getenv ,
2014-11-15 07:17:19 -07:00
compat_kwargs ,
2015-09-05 09:42:41 -06:00
compat_shlex_split ,
2014-11-02 03:23:40 -07:00
)
from . utils import (
2021-01-23 05:18:12 -07:00
expand_path ,
2021-01-24 06:40:02 -07:00
get_executable_path ,
2021-02-03 06:36:09 -07:00
OUTTMPL_TYPES ,
2015-04-03 12:30:37 -06:00
preferredencoding ,
2021-02-08 02:58:38 -07:00
REMUX_EXTENSIONS ,
2014-09-12 23:55:21 -06:00
write_string ,
)
from . version import __version__
2017-07-23 02:21:35 -06:00
def _hide_login_info ( opts ) :
PRIVATE_OPTS = set ( [ ' -p ' , ' --password ' , ' -u ' , ' --username ' , ' --video-password ' , ' --ap-password ' , ' --ap-username ' ] )
eqre = re . compile ( ' ^(?P<key> ' + ( ' | ' . join ( re . escape ( po ) for po in PRIVATE_OPTS ) ) + ' )=.+$ ' )
def _scrub_eq ( o ) :
m = eqre . match ( o )
if m :
return m . group ( ' key ' ) + ' =PRIVATE '
else :
return o
opts = list ( map ( _scrub_eq , opts ) )
for idx , opt in enumerate ( opts ) :
if opt in PRIVATE_OPTS and idx + 1 < len ( opts ) :
opts [ idx + 1 ] = ' PRIVATE '
return opts
2014-09-12 23:55:21 -06:00
def parseOpts ( overrideArguments = None ) :
def _readOptions ( filename_bytes , default = [ ] ) :
try :
optionf = open ( filename_bytes )
except IOError :
return default # silently skip if file is not present
try :
2019-03-09 05:14:41 -07:00
# FIXME: https://github.com/ytdl-org/youtube-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56
2016-07-08 18:12:52 -06:00
contents = optionf . read ( )
if sys . version_info < ( 3 , ) :
contents = contents . decode ( preferredencoding ( ) )
res = compat_shlex_split ( contents , comments = True )
2014-09-12 23:55:21 -06:00
finally :
optionf . close ( )
return res
2021-01-16 11:21:00 -07:00
def _readUserConf ( package_name , default = [ ] ) :
# .config
xdg_config_home = compat_getenv ( ' XDG_CONFIG_HOME ' ) or compat_expanduser ( ' ~/.config ' )
userConfFile = os . path . join ( xdg_config_home , package_name , ' config ' )
if not os . path . isfile ( userConfFile ) :
userConfFile = os . path . join ( xdg_config_home , ' %s .conf ' % package_name )
userConf = _readOptions ( userConfFile , default = None )
if userConf is not None :
2021-01-23 05:18:12 -07:00
return userConf , userConfFile
2014-09-12 23:55:21 -06:00
2021-01-16 11:21:00 -07:00
# appdata
appdata_dir = compat_getenv ( ' appdata ' )
if appdata_dir :
userConfFile = os . path . join ( appdata_dir , package_name , ' config ' )
userConf = _readOptions ( userConfFile , default = None )
if userConf is None :
2021-01-23 05:18:12 -07:00
userConfFile + = ' .txt '
userConf = _readOptions ( userConfFile , default = None )
2021-01-16 11:21:00 -07:00
if userConf is not None :
2021-01-23 05:18:12 -07:00
return userConf , userConfFile
2014-09-12 23:55:21 -06:00
2021-01-16 11:21:00 -07:00
# home
userConfFile = os . path . join ( compat_expanduser ( ' ~ ' ) , ' %s .conf ' % package_name )
userConf = _readOptions ( userConfFile , default = None )
2014-09-12 23:55:21 -06:00
if userConf is None :
2021-01-23 05:18:12 -07:00
userConfFile + = ' .txt '
userConf = _readOptions ( userConfFile , default = None )
2021-01-16 11:21:00 -07:00
if userConf is not None :
2021-01-23 05:18:12 -07:00
return userConf , userConfFile
2014-09-12 23:55:21 -06:00
2021-01-23 05:18:12 -07:00
return default , None
2014-09-12 23:55:21 -06:00
def _format_option_string ( option ) :
''' ( ' -o ' , ' --option ' ) -> -o, --format METAVAR '''
opts = [ ]
if option . _short_opts :
opts . append ( option . _short_opts [ 0 ] )
if option . _long_opts :
opts . append ( option . _long_opts [ 0 ] )
if len ( opts ) > 1 :
opts . insert ( 1 , ' , ' )
2014-10-12 15:10:11 -06:00
if option . takes_value ( ) :
opts . append ( ' %s ' % option . metavar )
2014-09-12 23:55:21 -06:00
2016-02-14 02:37:17 -07:00
return ' ' . join ( opts )
2014-09-12 23:55:21 -06:00
def _comma_separated_values_options_callback ( option , opt_str , value , parser ) :
setattr ( parser . values , option . dest , value . split ( ' , ' ) )
2021-01-22 22:57:27 -07:00
def _dict_from_multiple_values_options_callback (
option , opt_str , value , parser , allowed_keys = r ' [ \ w-]+ ' , delimiter = ' : ' , default_key = None , process = None ) :
out_dict = getattr ( parser . values , option . dest )
mobj = re . match ( r ' (?i)(?P<key> %s ) %s (?P<val>.*)$ ' % ( allowed_keys , delimiter ) , value )
if mobj is not None :
key , val = mobj . group ( ' key ' ) . lower ( ) , mobj . group ( ' val ' )
elif default_key is not None :
key , val = default_key , value
else :
raise optparse . OptionValueError (
' wrong %s formatting; it should be %s , not " %s " ' % ( opt_str , option . metavar , value ) )
out_dict [ key ] = process ( val ) if callable ( process ) else val
2014-09-12 23:55:21 -06:00
# No need to wrap help messages if we're on a wide console
2015-02-28 13:42:16 -07:00
columns = compat_get_terminal_size ( ) . columns
2014-10-12 15:10:11 -06:00
max_width = columns if columns else 80
max_help_position = 80
2014-09-12 23:55:21 -06:00
fmt = optparse . IndentedHelpFormatter ( width = max_width , max_help_position = max_help_position )
fmt . format_option_strings = _format_option_string
kw = {
2014-10-12 15:10:11 -06:00
' version ' : __version__ ,
' formatter ' : fmt ,
2015-01-01 14:01:26 -07:00
' usage ' : ' % prog [OPTIONS] URL [URL...] ' ,
2014-10-12 15:10:11 -06:00
' conflict_handler ' : ' resolve ' ,
2014-09-12 23:55:21 -06:00
}
2014-11-15 07:17:19 -07:00
parser = optparse . OptionParser ( * * compat_kwargs ( kw ) )
2014-09-12 23:55:21 -06:00
2014-10-12 15:10:11 -06:00
general = optparse . OptionGroup ( parser , ' General Options ' )
general . add_option (
' -h ' , ' --help ' ,
action = ' help ' ,
2015-03-25 04:02:55 -06:00
help = ' Print this help text and exit ' )
2014-10-12 15:10:11 -06:00
general . add_option (
2020-02-29 02:33:09 -07:00
' --version ' ,
2014-10-12 15:10:11 -06:00
action = ' version ' ,
2015-03-25 04:02:55 -06:00
help = ' Print program version and exit ' )
2014-10-12 15:10:11 -06:00
general . add_option (
' -U ' , ' --update ' ,
action = ' store_true ' , dest = ' update_self ' ,
2021-02-09 13:06:02 -07:00
help = ' Update this program to latest version. Make sure that you have sufficient permissions (run with sudo if needed) ' )
2014-10-12 15:10:11 -06:00
general . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' -i ' , ' --ignore-errors ' , ' --no-abort-on-error ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
action = ' store_true ' , dest = ' ignoreerrors ' , default = True ,
2021-01-18 12:17:48 -07:00
help = ' Continue on download errors, for example to skip unavailable videos in a playlist (default) (Alias: --no-abort-on-error) ' )
2014-10-12 15:10:11 -06:00
general . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --abort-on-error ' , ' --no-ignore-errors ' ,
2014-10-12 15:10:11 -06:00
action = ' store_false ' , dest = ' ignoreerrors ' ,
2021-01-18 12:17:48 -07:00
help = ' Abort downloading of further videos if an error occurs (Alias: --no-ignore-errors) ' )
2014-10-12 15:10:11 -06:00
general . add_option (
' --dump-user-agent ' ,
action = ' store_true ' , dest = ' dump_user_agent ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Display the current browser identification ' )
2014-09-12 23:55:21 -06:00
general . add_option (
2014-10-12 15:10:11 -06:00
' --list-extractors ' ,
action = ' store_true ' , dest = ' list_extractors ' , default = False ,
2015-06-06 20:12:21 -06:00
help = ' List all supported extractors ' )
2014-10-12 15:10:11 -06:00
general . add_option (
' --extractor-descriptions ' ,
action = ' store_true ' , dest = ' list_extractor_descriptions ' , default = False ,
help = ' Output descriptions of all supported extractors ' )
2015-06-12 07:20:12 -06:00
general . add_option (
' --force-generic-extractor ' ,
action = ' store_true ' , dest = ' force_generic_extractor ' , default = False ,
help = ' Force extraction to use the generic extractor ' )
2014-09-12 23:55:21 -06:00
general . add_option (
' --default-search ' ,
dest = ' default_search ' , metavar = ' PREFIX ' ,
2021-01-18 12:17:48 -07:00
help = ' Use this prefix for unqualified URLs. For example " gvsearch2: " downloads two videos from google videos for youtube-dl " large apple " . Use the value " auto " to let youtube-dl guess ( " auto_warning " to emit a warning when guessing). " error " just throws an error. The default value " fixup_error " repairs broken URLs, but emits an error if this is not possible instead of searching ' )
2014-09-12 23:55:21 -06:00
general . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --ignore-config ' , ' --no-config ' ,
2014-09-12 23:55:21 -06:00
action = ' store_true ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-01-16 11:54:52 -07:00
' Disable loading any configuration files except the one provided by --config-location. '
' When given inside a configuration file, no further configuration files are loaded. '
' Additionally, (for backward compatibility) if this option is found inside the '
2021-01-18 12:17:48 -07:00
' system configuration file, the user configuration is not loaded ' ) )
2016-09-14 09:28:17 -06:00
general . add_option (
2016-12-31 09:41:37 -07:00
' --config-location ' ,
dest = ' config_location ' , metavar = ' PATH ' ,
2021-01-23 05:18:12 -07:00
help = ' Location of the main configuration file; either the path to the config or its containing directory ' )
2014-10-24 06:48:12 -06:00
general . add_option (
' --flat-playlist ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
action = ' store_const ' , dest = ' extract_flat ' , const = ' in_playlist ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Do not extract the videos of a playlist, only list them ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
general . add_option (
' --flat-videos ' ,
action = ' store_true ' , dest = ' extract_flat ' ,
2021-02-18 16:19:55 -07:00
# help='Do not resolve the video urls')
# doesn't work
help = optparse . SUPPRESS_HELP )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
general . add_option (
' --no-flat-playlist ' ,
action = ' store_false ' , dest = ' extract_flat ' ,
help = ' Extract the videos of a playlist ' )
2016-02-29 12:01:33 -07:00
general . add_option (
' --mark-watched ' ,
action = ' store_true ' , dest = ' mark_watched ' , default = False ,
help = ' Mark videos watched (YouTube only) ' )
2016-03-01 10:41:23 -07:00
general . add_option (
' --no-mark-watched ' ,
action = ' store_false ' , dest = ' mark_watched ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Do not mark videos watched ' )
2015-02-09 20:22:10 -07:00
general . add_option (
2021-01-18 12:17:48 -07:00
' --no-colors ' ,
2015-02-09 20:22:10 -07:00
action = ' store_true ' , dest = ' no_color ' ,
default = False ,
2015-03-25 04:02:55 -06:00
help = ' Do not emit color codes in output ' )
2014-09-12 23:55:21 -06:00
2015-01-10 11:55:36 -07:00
network = optparse . OptionGroup ( parser , ' Network Options ' )
network . add_option (
' --proxy ' , dest = ' proxy ' ,
default = None , metavar = ' URL ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
' Use the specified HTTP/HTTPS/SOCKS proxy. To enable '
' SOCKS proxy, specify a proper scheme. For example '
' socks5://127.0.0.1:1080/. Pass in an empty string (--proxy " " ) '
' for direct connection ' ) )
2015-01-10 11:55:36 -07:00
network . add_option (
' --socket-timeout ' ,
dest = ' socket_timeout ' , type = float , default = None , metavar = ' SECONDS ' ,
help = ' Time to wait before giving up, in seconds ' )
network . add_option (
' --source-address ' ,
metavar = ' IP ' , dest = ' source_address ' , default = None ,
2017-01-28 08:40:07 -07:00
help = ' Client-side IP address to bind to ' ,
2015-01-10 11:55:36 -07:00
)
2015-01-10 12:02:02 -07:00
network . add_option (
' -4 ' , ' --force-ipv4 ' ,
action = ' store_const ' , const = ' 0.0.0.0 ' , dest = ' source_address ' ,
2017-01-28 08:40:07 -07:00
help = ' Make all connections via IPv4 ' ,
2015-01-10 12:02:02 -07:00
)
network . add_option (
' -6 ' , ' --force-ipv6 ' ,
action = ' store_const ' , const = ' :: ' , dest = ' source_address ' ,
2017-01-28 08:40:07 -07:00
help = ' Make all connections via IPv6 ' ,
2015-01-10 12:02:02 -07:00
)
2017-02-18 13:58:17 -07:00
geo = optparse . OptionGroup ( parser , ' Geo Restriction ' )
geo . add_option (
2016-07-03 09:23:48 -06:00
' --geo-verification-proxy ' ,
dest = ' geo_verification_proxy ' , default = None , metavar = ' URL ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
' Use this proxy to verify the IP address for some geo-restricted sites. '
2021-01-18 12:17:48 -07:00
' The default proxy specified by --proxy (or none, if the option is not present) is used for the actual downloading ' ) )
2017-02-18 13:58:17 -07:00
geo . add_option (
2015-03-02 16:03:06 -07:00
' --cn-verification-proxy ' ,
dest = ' cn_verification_proxy ' , default = None , metavar = ' URL ' ,
2017-02-18 13:58:17 -07:00
help = optparse . SUPPRESS_HELP )
geo . add_option (
' --geo-bypass ' ,
action = ' store_true ' , dest = ' geo_bypass ' , default = True ,
2018-05-19 10:53:24 -06:00
help = ' Bypass geographic restriction via faking X-Forwarded-For HTTP header ' )
2017-02-18 13:58:17 -07:00
geo . add_option (
' --no-geo-bypass ' ,
action = ' store_false ' , dest = ' geo_bypass ' , default = True ,
2018-05-19 10:53:24 -06:00
help = ' Do not bypass geographic restriction via faking X-Forwarded-For HTTP header ' )
2017-02-18 13:58:17 -07:00
geo . add_option (
' --geo-bypass-country ' , metavar = ' CODE ' ,
dest = ' geo_bypass_country ' , default = None ,
2018-05-19 10:53:24 -06:00
help = ' Force bypass geographic restriction with explicitly provided two-letter ISO 3166-2 country code ' )
2018-05-01 18:18:01 -06:00
geo . add_option (
' --geo-bypass-ip-block ' , metavar = ' IP_BLOCK ' ,
dest = ' geo_bypass_ip_block ' , default = None ,
2018-05-19 10:53:24 -06:00
help = ' Force bypass geographic restriction with explicitly provided IP block in CIDR notation ' )
2015-01-10 11:55:36 -07:00
2014-10-12 15:10:11 -06:00
selection = optparse . OptionGroup ( parser , ' Video Selection ' )
2014-09-12 23:55:21 -06:00
selection . add_option (
' --playlist-start ' ,
dest = ' playliststart ' , metavar = ' NUMBER ' , default = 1 , type = int ,
2015-03-25 04:02:55 -06:00
help = ' Playlist video to start at (default is %d efault) ' )
2014-09-12 23:55:21 -06:00
selection . add_option (
' --playlist-end ' ,
dest = ' playlistend ' , metavar = ' NUMBER ' , default = None , type = int ,
2015-03-25 04:02:55 -06:00
help = ' Playlist video to end at (default is last) ' )
2015-01-24 20:24:55 -07:00
selection . add_option (
' --playlist-items ' ,
dest = ' playlist_items ' , metavar = ' ITEM_SPEC ' , default = None ,
2021-01-18 12:17:48 -07:00
help = ' Playlist video items to download. Specify indices of the videos in the playlist separated by commas like: " --playlist-items 1,2,5,8 " if you want to download videos indexed 1, 2, 5, 8 in the playlist. You can specify range: " --playlist-items 1-3,7,10-13 " , it will download the videos at index 1, 2, 3, 7, 10, 11, 12 and 13 ' )
2014-09-12 23:55:21 -06:00
selection . add_option (
2014-10-12 15:10:11 -06:00
' --match-title ' ,
dest = ' matchtitle ' , metavar = ' REGEX ' ,
2015-03-25 04:02:55 -06:00
help = ' Download only matching titles (regex or caseless sub-string) ' )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --reject-title ' ,
dest = ' rejecttitle ' , metavar = ' REGEX ' ,
2015-03-25 04:02:55 -06:00
help = ' Skip download for matching titles (regex or caseless sub-string) ' )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --max-downloads ' ,
dest = ' max_downloads ' , metavar = ' NUMBER ' , type = int , default = None ,
help = ' Abort after downloading NUMBER files ' )
selection . add_option (
' --min-filesize ' ,
metavar = ' SIZE ' , dest = ' min_filesize ' , default = None ,
help = ' Do not download any videos smaller than SIZE (e.g. 50k or 44.6m) ' )
selection . add_option (
' --max-filesize ' ,
metavar = ' SIZE ' , dest = ' max_filesize ' , default = None ,
help = ' Do not download any videos larger than SIZE (e.g. 50k or 44.6m) ' )
selection . add_option (
' --date ' ,
metavar = ' DATE ' , dest = ' date ' , default = None ,
2021-01-06 23:41:05 -07:00
help = (
2021-01-18 12:17:48 -07:00
' Download only videos uploaded in this date. '
' The date can be " YYYYMMDD " or in the format '
2021-01-06 23:41:05 -07:00
' " (now|today)[+-][0-9](day|week|month|year)(s)? " ' ) )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --datebefore ' ,
metavar = ' DATE ' , dest = ' datebefore ' , default = None ,
2021-01-06 23:41:05 -07:00
help = (
' Download only videos uploaded on or before this date. '
' The date formats accepted is the same as --date ' ) )
2014-09-12 23:55:21 -06:00
selection . add_option (
2014-10-12 15:10:11 -06:00
' --dateafter ' ,
metavar = ' DATE ' , dest = ' dateafter ' , default = None ,
2021-01-06 23:41:05 -07:00
help = (
' Download only videos uploaded on or after this date. '
' The date formats accepted is the same as --date ' ) )
2014-09-12 23:55:21 -06:00
selection . add_option (
2014-10-12 15:10:11 -06:00
' --min-views ' ,
metavar = ' COUNT ' , dest = ' min_views ' , default = None , type = int ,
2015-03-25 04:02:55 -06:00
help = ' Do not download any videos with less than COUNT views ' )
2014-09-12 23:55:21 -06:00
selection . add_option (
2014-10-12 15:10:11 -06:00
' --max-views ' ,
metavar = ' COUNT ' , dest = ' max_views ' , default = None , type = int ,
help = ' Do not download any videos with more than COUNT views ' )
2015-02-09 19:32:21 -07:00
selection . add_option (
' --match-filter ' ,
metavar = ' FILTER ' , dest = ' match_filter ' , default = None ,
help = (
2017-01-28 08:40:07 -07:00
' Generic video filter. '
2021-01-18 12:17:48 -07:00
' Specify any key (see " OUTPUT TEMPLATE " for a list of available keys) to '
2017-02-17 09:18:26 -07:00
' match if the key is present, '
' !key to check if the key is not present, '
2021-02-28 07:56:08 -07:00
' key>NUMBER (like " view_count > 12 " , also works with '
2017-02-18 09:59:26 -07:00
' >=, <, <=, !=, =) to compare against a number, '
' key = \' LITERAL \' (like " uploader = \' Mike Smith \' " , also works with !=) '
' to match against a string literal '
' and & to require multiple matches. '
2017-02-17 09:18:26 -07:00
' Values which are not known are excluded unless you '
' put a question mark (?) after the operator. '
2015-02-09 19:32:21 -07:00
' For example, to only match videos that have been liked more than '
' 100 times and disliked less than 50 times (or the dislike '
' functionality is not available at the given service), but who '
2015-09-13 06:00:10 -06:00
' also have a description, use --match-filter '
2021-01-18 12:17:48 -07:00
' " like_count > 100 & dislike_count <? 50 & description " ' ) )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
selection . add_option (
' --no-match-filter ' ,
metavar = ' FILTER ' , dest = ' match_filter ' , action = ' store_const ' , const = None ,
help = ' Do not use generic video filter (default) ' )
2014-09-12 23:55:21 -06:00
selection . add_option (
2014-10-12 15:10:11 -06:00
' --no-playlist ' ,
action = ' store_true ' , dest = ' noplaylist ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Download only the video, if the URL refers to a video and a playlist ' )
2015-02-24 09:25:02 -07:00
selection . add_option (
' --yes-playlist ' ,
2021-02-28 08:25:32 -07:00
action = ' store_false ' , dest = ' noplaylist ' ,
2021-01-18 12:17:48 -07:00
help = ' Download the playlist, if the URL refers to a video and a playlist ' )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --age-limit ' ,
metavar = ' YEARS ' , dest = ' age_limit ' , default = None , type = int ,
2015-03-25 04:02:55 -06:00
help = ' Download only videos suitable for the given age ' )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --download-archive ' , metavar = ' FILE ' ,
dest = ' download_archive ' ,
2021-01-18 12:17:48 -07:00
help = ' Download only videos not listed in the archive file. Record the IDs of all downloaded videos in it ' )
2020-09-21 09:26:18 -06:00
selection . add_option (
' --break-on-existing ' ,
action = ' store_true ' , dest = ' break_on_existing ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Stop the download process when encountering a file that is in the archive ' )
2021-01-12 18:01:01 -07:00
selection . add_option (
' --break-on-reject ' ,
action = ' store_true ' , dest = ' break_on_reject ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Stop the download process when encountering a file that has been filtered out ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
selection . add_option (
' --no-download-archive ' ,
dest = ' download_archive ' , action = " store_const " , const = None ,
help = ' Do not use archive file (default) ' )
2014-10-12 15:10:11 -06:00
selection . add_option (
' --include-ads ' ,
dest = ' include_ads ' , action = ' store_true ' ,
2014-09-12 23:55:21 -06:00
help = ' Download advertisements as well (experimental) ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
selection . add_option (
' --no-include-ads ' ,
dest = ' include_ads ' , action = ' store_false ' ,
help = ' Do not download advertisements (default) ' )
2014-09-12 23:55:21 -06:00
2014-10-12 15:10:11 -06:00
authentication = optparse . OptionGroup ( parser , ' Authentication Options ' )
authentication . add_option (
' -u ' , ' --username ' ,
dest = ' username ' , metavar = ' USERNAME ' ,
2015-03-25 04:02:55 -06:00
help = ' Login with this account ID ' )
2014-10-12 15:10:11 -06:00
authentication . add_option (
' -p ' , ' --password ' ,
dest = ' password ' , metavar = ' PASSWORD ' ,
2021-02-24 11:45:56 -07:00
help = ' Account password. If this option is left out, yt-dlp will ask interactively ' )
2014-10-12 15:10:11 -06:00
authentication . add_option (
' -2 ' , ' --twofactor ' ,
dest = ' twofactor ' , metavar = ' TWOFACTOR ' ,
2016-12-12 04:13:34 -07:00
help = ' Two-factor authentication code ' )
2014-10-12 15:10:11 -06:00
authentication . add_option (
' -n ' , ' --netrc ' ,
action = ' store_true ' , dest = ' usenetrc ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Use .netrc authentication data ' )
2014-10-12 15:10:11 -06:00
authentication . add_option (
' --video-password ' ,
dest = ' videopassword ' , metavar = ' PASSWORD ' ,
2021-01-01 05:26:37 -07:00
help = ' Video password (vimeo, youku) ' )
2016-09-13 15:16:01 -06:00
adobe_pass = optparse . OptionGroup ( parser , ' Adobe Pass Options ' )
adobe_pass . add_option (
2016-09-14 11:58:47 -06:00
' --ap-mso ' ,
dest = ' ap_mso ' , metavar = ' MSO ' ,
2016-09-15 09:17:17 -06:00
help = ' Adobe Pass multiple-system operator (TV provider) identifier, use --ap-list-mso for a list of available MSOs ' )
2016-09-13 15:16:01 -06:00
adobe_pass . add_option (
' --ap-username ' ,
2016-09-14 11:58:47 -06:00
dest = ' ap_username ' , metavar = ' USERNAME ' ,
2016-09-15 09:17:17 -06:00
help = ' Multiple-system operator account login ' )
2016-09-13 15:16:01 -06:00
adobe_pass . add_option (
' --ap-password ' ,
2016-09-14 11:58:47 -06:00
dest = ' ap_password ' , metavar = ' PASSWORD ' ,
2021-02-24 11:45:56 -07:00
help = ' Multiple-system operator account password. If this option is left out, yt-dlp will ask interactively ' )
2016-09-13 15:16:01 -06:00
adobe_pass . add_option (
2016-09-14 13:21:09 -06:00
' --ap-list-mso ' ,
action = ' store_true ' , dest = ' ap_list_mso ' , default = False ,
2016-09-15 09:17:17 -06:00
help = ' List all supported multiple-system operators ' )
2014-10-12 15:10:11 -06:00
video_format = optparse . OptionGroup ( parser , ' Video Format Options ' )
video_format . add_option (
' -f ' , ' --format ' ,
action = ' store ' , dest = ' format ' , metavar = ' FORMAT ' , default = None ,
Better Format Sorting (Squashed)
* Added --format-sort (-S height,filesize)
* Made fields reversible (-S +height)
* Added --format-sort-force, --no-format-sort-force
* Added limit (-S height:720)
* Added codec preference (-S vcodec,acodec)
* Correct handling of preference<-1000
* Rebased to yt-dlc
* Automatically determine missing bitrates
* aext, vext, protocol, acodec, vcodec can now takes priority as string, not number (-S vext:webm)
* Correct handling of None in codec, audio_codec (None means the codec is unknown while 'none' means it doesn't exist)
* Correctly parse filesize (-S filesize:200M)
* Generalized preference calculation
* Rewrote entire code into the class FormatSort
* Correctly handle user input errors
* Combined fields (-S +ext:webm:webm)
* Closest mode (-S filesize~50M)
* Aliases (framerate=fps, br=bitrate etc)
* Documentation
2020-10-26 09:50:09 -06:00
help = ' Video format code, see " FORMAT SELECTION " for more details ' )
video_format . add_option (
2021-01-06 23:41:05 -07:00
' -S ' , ' --format-sort ' , metavar = ' SORTORDER ' ,
Better Format Sorting (Squashed)
* Added --format-sort (-S height,filesize)
* Made fields reversible (-S +height)
* Added --format-sort-force, --no-format-sort-force
* Added limit (-S height:720)
* Added codec preference (-S vcodec,acodec)
* Correct handling of preference<-1000
* Rebased to yt-dlc
* Automatically determine missing bitrates
* aext, vext, protocol, acodec, vcodec can now takes priority as string, not number (-S vext:webm)
* Correct handling of None in codec, audio_codec (None means the codec is unknown while 'none' means it doesn't exist)
* Correctly parse filesize (-S filesize:200M)
* Generalized preference calculation
* Rewrote entire code into the class FormatSort
* Correctly handle user input errors
* Combined fields (-S +ext:webm:webm)
* Closest mode (-S filesize~50M)
* Aliases (framerate=fps, br=bitrate etc)
* Documentation
2020-10-26 09:50:09 -06:00
dest = ' format_sort ' , default = [ ] ,
action = ' callback ' , callback = _comma_separated_values_options_callback , type = ' str ' ,
help = ' Sort the formats by the fields given, see " Sorting Formats " for more details ' )
video_format . add_option (
' --format-sort-force ' , ' --S-force ' ,
action = ' store_true ' , dest = ' format_sort_force ' , metavar = ' FORMAT ' , default = False ,
help = (
' Force user specified sort order to have precedence over all fields, '
' see " Sorting Formats " for more details ' ) )
video_format . add_option (
' --no-format-sort-force ' ,
action = ' store_false ' , dest = ' format_sort_force ' , metavar = ' FORMAT ' , default = False ,
help = (
' Some fields have precedence over the user specified sort order (default), '
' see " Sorting Formats " for more details ' ) )
Better Format Selection
* Added options: --video-multistreams, --no-video-multistreams, --audio-multistreams, --no-audio-multistreams
* New format selectors: best*, worst*, bestvideo*, bestaudio*, worstvideo*, worstaudio*
* Added b,w,v,a as alias for best, worst, video and audio respectively in format selection
* Changed video format sorting to show video only files and video+audio files together.
2020-11-05 08:35:36 -07:00
video_format . add_option (
' --video-multistreams ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
action = ' store_true ' , dest = ' allow_multiple_video_streams ' , default = False ,
help = ' Allow multiple video streams to be merged into a single file ' )
Better Format Selection
* Added options: --video-multistreams, --no-video-multistreams, --audio-multistreams, --no-audio-multistreams
* New format selectors: best*, worst*, bestvideo*, bestaudio*, worstvideo*, worstaudio*
* Added b,w,v,a as alias for best, worst, video and audio respectively in format selection
* Changed video format sorting to show video only files and video+audio files together.
2020-11-05 08:35:36 -07:00
video_format . add_option (
' --no-video-multistreams ' ,
action = ' store_false ' , dest = ' allow_multiple_video_streams ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
help = ' Only one video stream is downloaded for each output file (default) ' )
Better Format Selection
* Added options: --video-multistreams, --no-video-multistreams, --audio-multistreams, --no-audio-multistreams
* New format selectors: best*, worst*, bestvideo*, bestaudio*, worstvideo*, worstaudio*
* Added b,w,v,a as alias for best, worst, video and audio respectively in format selection
* Changed video format sorting to show video only files and video+audio files together.
2020-11-05 08:35:36 -07:00
video_format . add_option (
' --audio-multistreams ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
action = ' store_true ' , dest = ' allow_multiple_audio_streams ' , default = False ,
help = ' Allow multiple audio streams to be merged into a single file ' )
Better Format Selection
* Added options: --video-multistreams, --no-video-multistreams, --audio-multistreams, --no-audio-multistreams
* New format selectors: best*, worst*, bestvideo*, bestaudio*, worstvideo*, worstaudio*
* Added b,w,v,a as alias for best, worst, video and audio respectively in format selection
* Changed video format sorting to show video only files and video+audio files together.
2020-11-05 08:35:36 -07:00
video_format . add_option (
' --no-audio-multistreams ' ,
action = ' store_false ' , dest = ' allow_multiple_audio_streams ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
help = ' Only one audio stream is downloaded for each output file (default) ' )
2014-10-12 15:10:11 -06:00
video_format . add_option (
' --all-formats ' ,
action = ' store_const ' , dest = ' format ' , const = ' all ' ,
2015-03-25 04:02:55 -06:00
help = ' Download all available video formats ' )
2014-10-12 15:10:11 -06:00
video_format . add_option (
' --prefer-free-formats ' ,
action = ' store_true ' , dest = ' prefer_free_formats ' , default = False ,
2021-02-18 07:17:46 -07:00
help = (
' Prefer video formats with free containers over non-free ones of same quality. '
' Use with " -S ext " to strictly prefer free containers irrespective of quality ' ) )
video_format . add_option (
' --no-prefer-free-formats ' ,
action = ' store_true ' , dest = ' prefer_free_formats ' , default = False ,
help = " Don ' t give any special preference to free containers (default) " )
2014-10-12 15:10:11 -06:00
video_format . add_option (
' -F ' , ' --list-formats ' ,
action = ' store_true ' , dest = ' listformats ' ,
2015-11-27 23:14:20 -07:00
help = ' List all available formats of requested videos ' )
2020-12-13 07:29:09 -07:00
video_format . add_option (
' --list-formats-as-table ' ,
Change defaults
* Enabled --ignore by default
* Disabled --video-multistreams and --audio-multistreams by default
* Changed default format selection to 'bv*+ba/b' when --audio-multistreams is disabled
* Changed default format sort order to 'res,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id'
* Changed default output template to '%(title)s [%(id)s].%(ext)s'
* Enabled `--list-formats-as-table` by default
2021-01-04 09:40:47 -07:00
action = ' store_true ' , dest = ' listformats_table ' , default = True ,
2021-01-18 12:17:48 -07:00
help = ' Present the output of -F in tabular form (default) ' )
2020-12-13 07:29:09 -07:00
video_format . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --list-formats-old ' , ' --no-list-formats-as-table ' ,
2020-12-13 07:29:09 -07:00
action = ' store_false ' , dest = ' listformats_table ' ,
2021-01-18 12:17:48 -07:00
help = ' Present the output of -F in the old form (Alias: --no-list-formats-as-table) ' )
2015-01-09 15:03:56 -07:00
video_format . add_option (
2015-01-09 18:03:00 -07:00
' --merge-output-format ' ,
action = ' store ' , dest = ' merge_output_format ' , metavar = ' FORMAT ' , default = None ,
2015-01-09 15:03:56 -07:00
help = (
2015-06-27 02:26:51 -06:00
' If a merge is required (e.g. bestvideo+bestaudio), '
' output to given container format. One of mkv, mp4, ogg, webm, flv. '
2015-01-09 15:03:56 -07:00
' Ignored if no merge is required ' ) )
2021-02-11 20:51:59 -07:00
video_format . add_option (
' --allow-unplayable-formats ' ,
action = ' store_true ' , dest = ' allow_unplayable_formats ' , default = False ,
help = (
' Allow unplayable formats to be listed and downloaded. '
' All video postprocessing will also be turned off ' ) )
video_format . add_option (
' --no-allow-unplayable-formats ' ,
action = ' store_false ' , dest = ' allow_unplayable_formats ' ,
help = ' Do not allow unplayable formats to be listed or downloaded (default) ' )
2014-10-12 15:10:11 -06:00
subtitles = optparse . OptionGroup ( parser , ' Subtitle Options ' )
subtitles . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --write-subs ' , ' --write-srt ' ,
2014-10-12 15:10:11 -06:00
action = ' store_true ' , dest = ' writesubtitles ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write subtitle file ' )
2014-10-12 15:10:11 -06:00
subtitles . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --no-write-subs ' , ' --no-write-srt ' ,
action = ' store_false ' , dest = ' writesubtitles ' ,
help = ' Do not write subtitle file (default) ' )
subtitles . add_option (
' --write-auto-subs ' , ' --write-automatic-subs ' ,
2014-10-12 15:10:11 -06:00
action = ' store_true ' , dest = ' writeautomaticsub ' , default = False ,
2015-11-16 07:15:25 -07:00
help = ' Write automatically generated subtitle file (YouTube only) ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
subtitles . add_option (
' --no-write-auto-subs ' , ' --no-write-automatic-subs ' ,
action = ' store_false ' , dest = ' writeautomaticsub ' , default = False ,
help = ' Do not write automatically generated subtitle file (default) ' )
2014-10-12 15:10:11 -06:00
subtitles . add_option (
' --all-subs ' ,
action = ' store_true ' , dest = ' allsubtitles ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Download all the available subtitles of the video ' )
2014-10-12 15:10:11 -06:00
subtitles . add_option (
' --list-subs ' ,
action = ' store_true ' , dest = ' listsubtitles ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' List all available subtitles for the video ' )
2014-10-12 15:10:11 -06:00
subtitles . add_option (
' --sub-format ' ,
2015-02-15 10:03:41 -07:00
action = ' store ' , dest = ' subtitlesformat ' , metavar = ' FORMAT ' , default = ' best ' ,
2015-04-04 08:00:23 -06:00
help = ' Subtitle format, accepts formats preference, for example: " srt " or " ass/srt/best " ' )
2014-10-12 15:10:11 -06:00
subtitles . add_option (
' --sub-lang ' , ' --sub-langs ' , ' --srt-lang ' ,
action = ' callback ' , dest = ' subtitleslangs ' , metavar = ' LANGS ' , type = ' str ' ,
default = [ ] , callback = _comma_separated_values_options_callback ,
2016-01-22 12:50:06 -07:00
help = ' Languages of the subtitles to download (optional) separated by commas, use --list-subs for available language tags ' )
2014-10-12 15:10:11 -06:00
downloader = optparse . OptionGroup ( parser , ' Download Options ' )
downloader . add_option (
2016-05-30 08:48:35 -06:00
' -r ' , ' --limit-rate ' , ' --rate-limit ' ,
dest = ' ratelimit ' , metavar = ' RATE ' ,
2015-03-25 04:02:55 -06:00
help = ' Maximum download rate in bytes per second (e.g. 50K or 4.2M) ' )
2014-10-12 15:10:11 -06:00
downloader . add_option (
' -R ' , ' --retries ' ,
dest = ' retries ' , metavar = ' RETRIES ' , default = 10 ,
2021-01-18 12:17:48 -07:00
help = ' Number of retries (default is %d efault), or " infinite " ' )
2016-03-19 08:40:36 -06:00
downloader . add_option (
' --fragment-retries ' ,
dest = ' fragment_retries ' , metavar = ' RETRIES ' , default = 10 ,
2017-03-28 10:35:48 -06:00
help = ' Number of retries for a fragment (default is %d efault), or " infinite " (DASH, hlsnative and ISM) ' )
2016-08-26 15:52:18 -06:00
downloader . add_option (
2021-01-06 23:41:05 -07:00
' --skip-unavailable-fragments ' , ' --no-abort-on-unavailable-fragment ' ,
2016-08-26 15:52:18 -06:00
action = ' store_true ' , dest = ' skip_unavailable_fragments ' , default = True ,
2021-01-18 12:17:48 -07:00
help = ' Skip unavailable fragments for DASH, hlsnative and ISM (default) (Alias: --no-abort-on-unavailable-fragment) ' )
2017-01-28 07:06:22 -07:00
downloader . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --abort-on-unavailable-fragment ' , ' --no-skip-unavailable-fragments ' ,
2016-08-26 15:52:18 -06:00
action = ' store_false ' , dest = ' skip_unavailable_fragments ' ,
2021-01-18 12:17:48 -07:00
help = ' Abort downloading if a fragment is unavailable (Alias: --no-skip-unavailable-fragments) ' )
2017-04-23 14:09:08 -06:00
downloader . add_option (
' --keep-fragments ' ,
action = ' store_true ' , dest = ' keep_fragments ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Keep downloaded fragments on disk after downloading is finished ' )
downloader . add_option (
' --no-keep-fragments ' ,
action = ' store_false ' , dest = ' keep_fragments ' ,
help = ' Delete downloaded fragments after downloading is finished (default) ' )
2014-10-12 15:10:11 -06:00
downloader . add_option (
' --buffer-size ' ,
dest = ' buffersize ' , metavar = ' SIZE ' , default = ' 1024 ' ,
2015-03-25 04:02:55 -06:00
help = ' Size of download buffer (e.g. 1024 or 16K) (default is %d efault) ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
downloader . add_option (
' --resize-buffer ' ,
action = ' store_false ' , dest = ' noresizebuffer ' ,
help = ' The buffer size is automatically resized from an initial value of --buffer-size (default) ' )
2014-10-12 15:10:11 -06:00
downloader . add_option (
' --no-resize-buffer ' ,
action = ' store_true ' , dest = ' noresizebuffer ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Do not automatically adjust the buffer size ' )
2018-01-27 23:21:45 -07:00
downloader . add_option (
' --http-chunk-size ' ,
dest = ' http_chunk_size ' , metavar = ' SIZE ' , default = None ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
' Size of a chunk for chunk-based HTTP downloading (e.g. 10485760 or 10M) (default is disabled). '
' May be useful for bypassing bandwidth throttling imposed by a webserver (experimental) ' ) )
2014-10-12 15:10:11 -06:00
downloader . add_option (
' --test ' ,
action = ' store_true ' , dest = ' test ' , default = False ,
help = optparse . SUPPRESS_HELP )
2014-07-10 21:11:11 -06:00
downloader . add_option (
' --playlist-reverse ' ,
action = ' store_true ' ,
help = ' Download playlist videos in reverse order ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
downloader . add_option (
' --no-playlist-reverse ' ,
2021-01-06 23:41:05 -07:00
action = ' store_false ' , dest = ' playlist_reverse ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Download playlist videos in default order (default) ' )
2017-01-31 02:03:31 -07:00
downloader . add_option (
' --playlist-random ' ,
action = ' store_true ' ,
help = ' Download playlist videos in random order ' )
2015-01-24 20:49:44 -07:00
downloader . add_option (
' --xattr-set-filesize ' ,
dest = ' xattr_set_filesize ' , action = ' store_true ' ,
2018-05-19 10:53:24 -06:00
help = ' Set file xattribute ytdl.filesize with expected file size ' )
2015-02-17 04:09:12 -07:00
downloader . add_option (
' --hls-prefer-native ' ,
2016-04-21 11:02:17 -06:00
dest = ' hls_prefer_native ' , action = ' store_true ' , default = None ,
2016-04-21 10:44:01 -06:00
help = ' Use the native HLS downloader instead of ffmpeg ' )
2016-04-21 11:02:17 -06:00
downloader . add_option (
' --hls-prefer-ffmpeg ' ,
dest = ' hls_prefer_native ' , action = ' store_false ' , default = None ,
help = ' Use ffmpeg instead of the native HLS downloader ' )
2016-01-30 04:26:40 -07:00
downloader . add_option (
' --hls-use-mpegts ' ,
2021-02-26 09:21:31 -07:00
dest = ' hls_use_mpegts ' , action = ' store_true ' , default = None ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-02-26 09:21:31 -07:00
' Use the mpegts container for HLS videos; '
' allowing some players to play the video while downloading, '
' and reducing the chance of file corruption if download is interrupted. '
' This is enabled by default for live streams ' ) )
downloader . add_option (
' --no-hls-use-mpegts ' ,
dest = ' hls_use_mpegts ' , action = ' store_false ' ,
help = (
' Do not use the mpegts container for HLS videos. '
' This is default when not downloading live streams ' ) )
2015-01-23 17:38:48 -07:00
downloader . add_option (
' --external-downloader ' ,
2021-01-22 22:59:20 -07:00
dest = ' external_downloader ' , metavar = ' NAME ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-02-27 04:22:27 -07:00
' Name or path of the external downloader to use. '
' Currently supports %s (Recommended: aria2c) ' % ' , ' . join ( list_external_downloaders ( ) ) ) )
2015-03-02 07:06:09 -07:00
downloader . add_option (
2021-01-22 22:59:20 -07:00
' --downloader-args ' , ' --external-downloader-args ' ,
metavar = ' NAME:ARGS ' , dest = ' external_downloader_args ' , default = { } , type = ' str ' ,
action = ' callback ' , callback = _dict_from_multiple_values_options_callback ,
2021-01-23 05:11:21 -07:00
callback_kwargs = {
2021-01-23 05:18:12 -07:00
' allowed_keys ' : ' | ' . join ( list_external_downloaders ( ) ) ,
2021-01-23 05:11:21 -07:00
' default_key ' : ' default ' , ' process ' : compat_shlex_split } ,
2021-01-22 22:59:20 -07:00
help = (
' Give these arguments to the external downloader. '
' Specify the downloader name and the arguments separated by a colon " : " . '
' You can use this option multiple times (Alias: --external-downloader-args) ' ) )
2014-10-12 15:10:11 -06:00
workarounds = optparse . OptionGroup ( parser , ' Workarounds ' )
2014-09-12 23:55:21 -06:00
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --encoding ' ,
dest = ' encoding ' , metavar = ' ENCODING ' ,
2014-09-12 23:55:21 -06:00
help = ' Force the specified encoding (experimental) ' )
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --no-check-certificate ' ,
action = ' store_true ' , dest = ' no_check_certificate ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Suppress HTTPS certificate validation ' )
2014-09-12 23:55:21 -06:00
workarounds . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --prefer-insecure ' , ' --prefer-unsecure ' ,
action = ' store_true ' , dest = ' prefer_insecure ' ,
2018-02-27 08:30:08 -07:00
help = ' Use an unencrypted connection to retrieve information about the video. (Currently supported only for YouTube) ' )
2014-09-12 23:55:21 -06:00
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --user-agent ' ,
metavar = ' UA ' , dest = ' user_agent ' ,
2015-03-25 04:02:55 -06:00
help = ' Specify a custom user agent ' )
2014-09-12 23:55:21 -06:00
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --referer ' ,
metavar = ' URL ' , dest = ' referer ' , default = None ,
2015-03-25 04:02:55 -06:00
help = ' Specify a custom referer, use if the video access is restricted to one domain ' ,
2014-09-12 23:55:21 -06:00
)
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --add-header ' ,
2021-01-22 22:57:27 -07:00
metavar = ' FIELD:VALUE ' , dest = ' headers ' , default = { } , type = ' str ' ,
action = ' callback ' , callback = _dict_from_multiple_values_options_callback ,
help = ' Specify a custom HTTP header and its value, separated by a colon " : " . You can use this option multiple times ' ,
2014-09-12 23:55:21 -06:00
)
workarounds . add_option (
2014-10-12 15:10:11 -06:00
' --bidi-workaround ' ,
dest = ' bidi_workaround ' , action = ' store_true ' ,
help = ' Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH ' )
2021-02-27 05:41:23 -07:00
workarounds . add_option (
' --sleep-requests ' , metavar = ' SECONDS ' ,
dest = ' sleep_interval_requests ' , type = float ,
help = ' Number of seconds to sleep between requests during data extraction ' )
2015-01-23 04:05:01 -07:00
workarounds . add_option (
2016-08-04 04:17:22 -06:00
' --sleep-interval ' , ' --min-sleep-interval ' , metavar = ' SECONDS ' ,
2015-01-23 04:07:13 -07:00
dest = ' sleep_interval ' , type = float ,
2016-08-08 14:46:52 -06:00
help = (
' Number of seconds to sleep before each download when used alone '
' or a lower bound of a range for randomized sleep before each download '
' (minimum possible number of seconds to sleep) when used along with '
2021-01-18 12:17:48 -07:00
' --max-sleep-interval ' ) )
2016-08-04 04:17:22 -06:00
workarounds . add_option (
' --max-sleep-interval ' , metavar = ' SECONDS ' ,
dest = ' max_sleep_interval ' , type = float ,
2016-08-08 14:46:52 -06:00
help = (
' Upper bound of a range for randomized sleep before each download '
' (maximum possible number of seconds to sleep). Must only be used '
2021-01-18 12:17:48 -07:00
' along with --min-sleep-interval ' ) )
2020-09-28 21:11:32 -06:00
workarounds . add_option (
2021-01-06 23:41:05 -07:00
' --sleep-subtitles ' , metavar = ' SECONDS ' ,
2020-10-31 20:36:16 -06:00
dest = ' sleep_interval_subtitles ' , default = 0 , type = int ,
2021-02-27 05:41:23 -07:00
help = ' Number of seconds to sleep before each subtitle download ' )
2014-09-12 23:55:21 -06:00
2021-02-24 12:46:57 -07:00
verbosity = optparse . OptionGroup ( parser , ' Verbosity and Simulation Options ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -q ' , ' --quiet ' ,
action = ' store_true ' , dest = ' quiet ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Activate quiet mode ' )
2014-09-12 23:55:21 -06:00
verbosity . add_option (
' --no-warnings ' ,
dest = ' no_warnings ' , action = ' store_true ' , default = False ,
help = ' Ignore warnings ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -s ' , ' --simulate ' ,
action = ' store_true ' , dest = ' simulate ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Do not download the video and do not write anything to disk ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --skip-download ' , ' --no-download ' ,
2014-10-12 15:10:11 -06:00
action = ' store_true ' , dest = ' skip_download ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Do not download the video ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -g ' , ' --get-url ' ,
action = ' store_true ' , dest = ' geturl ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print URL ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -e ' , ' --get-title ' ,
action = ' store_true ' , dest = ' gettitle ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print title ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-id ' ,
action = ' store_true ' , dest = ' getid ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print id ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-thumbnail ' ,
action = ' store_true ' , dest = ' getthumbnail ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print thumbnail URL ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-description ' ,
action = ' store_true ' , dest = ' getdescription ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print video description ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-duration ' ,
action = ' store_true ' , dest = ' getduration ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print video length ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-filename ' ,
action = ' store_true ' , dest = ' getfilename ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print output filename ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --get-format ' ,
action = ' store_true ' , dest = ' getformat ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Simulate, quiet but print output format ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -j ' , ' --dump-json ' ,
action = ' store_true ' , dest = ' dumpjson ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Simulate, quiet but print JSON information. See " OUTPUT TEMPLATE " for a description of available keys ' )
2014-10-24 16:30:57 -06:00
verbosity . add_option (
' -J ' , ' --dump-single-json ' ,
action = ' store_true ' , dest = ' dump_single_json ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-01-06 23:41:05 -07:00
' Simulate, quiet but print JSON information for each command-line argument. '
2021-01-18 12:17:48 -07:00
' If the URL refers to a playlist, dump the whole playlist information in a single line ' ) )
2015-01-08 10:01:41 -07:00
verbosity . add_option (
' --print-json ' ,
action = ' store_true ' , dest = ' print_json ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Be quiet and print the video information as JSON (video is still being downloaded) ' )
2020-11-05 10:43:21 -07:00
verbosity . add_option (
2021-01-06 23:41:05 -07:00
' --force-write-archive ' , ' --force-write-download-archive ' , ' --force-download-archive ' ,
2020-11-05 10:43:21 -07:00
action = ' store_true ' , dest = ' force_write_download_archive ' , default = False ,
help = (
' Force download archive entries to be written as far as no errors occur, '
2021-01-18 12:17:48 -07:00
' even if -s or another simulation switch is used (Alias: --force-download-archive) ' ) )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --newline ' ,
action = ' store_true ' , dest = ' progress_with_newline ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Output progress bar as new lines ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --no-progress ' ,
action = ' store_true ' , dest = ' noprogress ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Do not print progress bar ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --console-title ' ,
action = ' store_true ' , dest = ' consoletitle ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Display progress in console titlebar ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' -v ' , ' --verbose ' ,
action = ' store_true ' , dest = ' verbose ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Print various debugging information ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
2015-03-08 11:37:43 -06:00
' --dump-pages ' , ' --dump-intermediate-pages ' ,
2014-10-12 15:10:11 -06:00
action = ' store_true ' , dest = ' dump_intermediate_pages ' , default = False ,
2015-05-22 08:14:55 -06:00
help = ' Print downloaded pages encoded using base64 to debug problems (very verbose) ' )
2014-10-12 15:10:11 -06:00
verbosity . add_option (
' --write-pages ' ,
action = ' store_true ' , dest = ' write_pages ' , default = False ,
help = ' Write downloaded intermediary pages to files in the current directory to debug problems ' )
verbosity . add_option (
' --youtube-print-sig-code ' ,
action = ' store_true ' , dest = ' youtube_print_sig_code ' , default = False ,
help = optparse . SUPPRESS_HELP )
verbosity . add_option (
2015-02-09 20:52:33 -07:00
' --print-traffic ' , ' --dump-headers ' ,
2014-10-12 15:10:11 -06:00
dest = ' debug_printtraffic ' , action = ' store_true ' , default = False ,
help = ' Display sent and read HTTP traffic ' )
2015-01-10 13:02:27 -07:00
verbosity . add_option (
' -C ' , ' --call-home ' ,
dest = ' call_home ' , action = ' store_true ' , default = False ,
2021-02-24 11:45:56 -07:00
# help='[Broken] Contact the yt-dlp server for debugging')
2021-02-09 13:06:02 -07:00
help = optparse . SUPPRESS_HELP )
2015-01-10 13:09:15 -07:00
verbosity . add_option (
' --no-call-home ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
dest = ' call_home ' , action = ' store_false ' ,
2021-02-24 11:45:56 -07:00
# help='Do not contact the yt-dlp server for debugging (default)')
2021-02-09 13:06:02 -07:00
help = optparse . SUPPRESS_HELP )
2014-10-12 15:10:11 -06:00
filesystem = optparse . OptionGroup ( parser , ' Filesystem Options ' )
filesystem . add_option (
' -a ' , ' --batch-file ' ,
dest = ' batchfile ' , metavar = ' FILE ' ,
2018-03-27 09:25:29 -06:00
help = " File containing URLs to download ( ' - ' for stdin), one URL per line. "
2021-01-18 12:17:48 -07:00
" Lines starting with ' # ' , ' ; ' or ' ] ' are considered as comments and ignored " )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --id ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
action = ' store_true ' , dest = ' useid ' , help = optparse . SUPPRESS_HELP )
2021-01-23 05:18:12 -07:00
filesystem . add_option (
' -P ' , ' --paths ' ,
metavar = ' TYPE:PATH ' , dest = ' paths ' , default = { } , type = ' str ' ,
action = ' callback ' , callback = _dict_from_multiple_values_options_callback ,
callback_kwargs = {
2021-02-03 06:36:09 -07:00
' allowed_keys ' : ' home|temp| %s ' % ' | ' . join ( OUTTMPL_TYPES . keys ( ) ) ,
2021-01-23 05:18:12 -07:00
' process ' : lambda x : x . strip ( ) } ,
help = (
' The paths where the files should be downloaded. '
2021-02-03 06:36:09 -07:00
' Specify the type of file and the path separated by a colon " : " . '
' All the same types as --output are supported. '
2021-01-23 05:18:12 -07:00
' Additionally, you can also provide " home " and " temp " paths. '
' All intermediary files are first downloaded to the temp path and '
' then the final files are moved over to the home path after download is finished. '
2021-02-03 06:36:09 -07:00
' This option is ignored if --output is an absolute path ' ) )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' -o ' , ' --output ' ,
2021-02-03 06:36:09 -07:00
metavar = ' [TYPE:]TEMPLATE ' , dest = ' outtmpl ' , default = { } , type = ' str ' ,
action = ' callback ' , callback = _dict_from_multiple_values_options_callback ,
callback_kwargs = {
' allowed_keys ' : ' | ' . join ( OUTTMPL_TYPES . keys ( ) ) ,
' default_key ' : ' default ' , ' process ' : lambda x : x . strip ( ) } ,
2021-01-18 12:17:48 -07:00
help = ' Output filename template, see " OUTPUT TEMPLATE " for details ' )
2021-01-16 10:12:05 -07:00
filesystem . add_option (
' --output-na-placeholder ' ,
2021-01-24 09:01:13 -07:00
dest = ' outtmpl_na_placeholder ' , metavar = ' TEXT ' , default = ' NA ' ,
help = ( ' Placeholder value for unavailable meta fields in output filename template (default: " %d efault " ) ' ) )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --autonumber-size ' ,
2017-02-23 16:04:27 -07:00
dest = ' autonumber_size ' , metavar = ' NUMBER ' , type = int ,
help = optparse . SUPPRESS_HELP )
2016-05-01 06:34:11 -06:00
filesystem . add_option (
' --autonumber-start ' ,
2017-01-28 09:57:56 -07:00
dest = ' autonumber_start ' , metavar = ' NUMBER ' , default = 1 , type = int ,
help = ' Specify the start value for %(autonumber)s (default is %d efault) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --restrict-filenames ' ,
action = ' store_true ' , dest = ' restrictfilenames ' , default = False ,
help = ' Restrict filenames to only ASCII characters, and avoid " & " and spaces in filenames ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --no-restrict-filenames ' ,
2021-02-17 12:09:38 -07:00
action = ' store_false ' , dest = ' restrictfilenames ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Allow Unicode characters, " & " and spaces in filenames (default) ' )
2021-02-17 12:09:38 -07:00
filesystem . add_option (
' --windows-filenames ' ,
action = ' store_true ' , dest = ' windowsfilenames ' , default = False ,
help = ' Force filenames to be windows compatible ' )
filesystem . add_option (
' --no-windows-filenames ' ,
action = ' store_false ' , dest = ' windowsfilenames ' ,
help = ' Make filenames windows compatible only if using windows (default) ' )
filesystem . add_option (
' --trim-filenames ' , ' --trim-file-names ' , metavar = ' LENGTH ' ,
dest = ' trim_file_name ' , default = 0 , type = int ,
help = ' Limit the filename length (excluding extension) to the specified number of characters ' )
2014-12-12 09:11:53 -07:00
filesystem . add_option (
' -A ' , ' --auto-number ' ,
action = ' store_true ' , dest = ' autonumber ' , default = False ,
2017-02-23 16:04:27 -07:00
help = optparse . SUPPRESS_HELP )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' -t ' , ' --title ' ,
action = ' store_true ' , dest = ' usetitle ' , default = False ,
2017-02-23 16:04:27 -07:00
help = optparse . SUPPRESS_HELP )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' -l ' , ' --literal ' , default = False ,
action = ' store_true ' , dest = ' usetitle ' ,
2017-02-23 16:04:27 -07:00
help = optparse . SUPPRESS_HELP )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' -w ' , ' --no-overwrites ' ,
2019-10-13 10:00:48 -06:00
action = ' store_false ' , dest = ' overwrites ' , default = None ,
help = ' Do not overwrite any files ' )
filesystem . add_option (
' --force-overwrites ' , ' --yes-overwrites ' ,
action = ' store_true ' , dest = ' overwrites ' ,
help = ' Overwrite all video and metadata files. This option includes --no-continue ' )
filesystem . add_option (
' --no-force-overwrites ' ,
action = ' store_const ' , dest = ' overwrites ' , const = None ,
help = ' Do not overwrite the video, but overwrite related files (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' -c ' , ' --continue ' ,
action = ' store_true ' , dest = ' continue_dl ' , default = True ,
2021-02-04 15:53:04 -07:00
help = ' Resume partially downloaded files/fragments (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --no-continue ' ,
action = ' store_false ' , dest = ' continue_dl ' ,
2021-02-04 15:53:04 -07:00
help = (
' Do not resume partially downloaded fragments. '
' If the file is unfragmented, restart download of the entire file ' ) )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --part ' ,
action = ' store_false ' , dest = ' nopart ' , default = False ,
help = ' Use .part files instead of writing directly into output file (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --no-part ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
action = ' store_true ' , dest = ' nopart ' ,
2015-03-25 04:02:55 -06:00
help = ' Do not use .part files - write directly into output file ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --mtime ' ,
action = ' store_true ' , dest = ' updatetime ' , default = True ,
help = ' Use the Last-modified header to set the file modification time (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --no-mtime ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
action = ' store_false ' , dest = ' updatetime ' ,
2015-03-25 04:02:55 -06:00
help = ' Do not use the Last-modified header to set the file modification time ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --write-description ' ,
action = ' store_true ' , dest = ' writedescription ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write video description to a .description file ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --no-write-description ' ,
action = ' store_false ' , dest = ' writedescription ' ,
help = ' Do not write video description (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --write-info-json ' ,
action = ' store_true ' , dest = ' writeinfojson ' , default = False ,
2021-02-04 15:53:04 -07:00
help = ' Write video metadata to a .info.json file (this may contain personal information) ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --no-write-info-json ' ,
action = ' store_false ' , dest = ' writeinfojson ' ,
help = ' Do not write video metadata (default) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --write-annotations ' ,
action = ' store_true ' , dest = ' writeannotations ' , default = False ,
2015-05-02 11:38:30 -06:00
help = ' Write video annotations to a .annotations.xml file ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --no-write-annotations ' ,
action = ' store_false ' , dest = ' writeannotations ' ,
help = ' Do not write video annotations (default) ' )
2021-01-30 04:13:20 -07:00
filesystem . add_option (
' --write-playlist-metafiles ' ,
action = ' store_true ' , dest = ' allow_playlist_files ' , default = True ,
help = (
' Write playlist metadata in addition to the video metadata '
' when using --write-info-json, --write-description etc. (default) ' ) )
filesystem . add_option (
' --no-write-playlist-metafiles ' ,
action = ' store_false ' , dest = ' allow_playlist_files ' ,
help = (
' Do not write playlist metadata when using '
' --write-info-json, --write-description etc. ' ) )
2021-01-27 08:02:51 -07:00
filesystem . add_option (
' --get-comments ' ,
action = ' store_true ' , dest = ' getcomments ' , default = False ,
2021-02-28 07:56:08 -07:00
help = (
' Retrieve video comments to be placed in the .info.json file. '
' The comments are fetched even without this option if the extraction is known to be quick ' ) )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
2016-06-05 13:52:58 -06:00
' --load-info-json ' , ' --load-info ' ,
2014-10-12 15:10:11 -06:00
dest = ' load_info_filename ' , metavar = ' FILE ' ,
2015-04-04 08:09:11 -06:00
help = ' JSON file containing the video information (created with the " --write-info-json " option) ' )
2014-10-12 15:10:11 -06:00
filesystem . add_option (
' --cookies ' ,
dest = ' cookiefile ' , metavar = ' FILE ' ,
2015-03-25 04:02:55 -06:00
help = ' File to read cookies from and dump cookie jar in ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
filesystem . add_option (
' --no-cookies ' ,
action = ' store_const ' , const = None , dest = ' cookiefile ' , metavar = ' FILE ' ,
help = ' Do not read/dump cookies (default) ' )
2014-09-12 23:55:21 -06:00
filesystem . add_option (
' --cache-dir ' , dest = ' cachedir ' , default = None , metavar = ' DIR ' ,
2021-01-18 12:17:48 -07:00
help = ' Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl . At the moment, only YouTube player files (for videos with obfuscated signatures) are cached, but that may change ' )
2014-09-12 23:55:21 -06:00
filesystem . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --no-cache-dir ' , action = ' store_false ' , dest = ' cachedir ' ,
2014-09-12 23:55:21 -06:00
help = ' Disable filesystem caching ' )
filesystem . add_option (
2014-10-12 15:10:11 -06:00
' --rm-cache-dir ' ,
action = ' store_true ' , dest = ' rm_cachedir ' ,
2014-09-12 23:55:21 -06:00
help = ' Delete all filesystem cache files ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
thumbnail = optparse . OptionGroup ( parser , ' Thumbnail Images ' )
2015-01-24 18:38:47 -07:00
thumbnail . add_option (
' --write-thumbnail ' ,
action = ' store_true ' , dest = ' writethumbnail ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write thumbnail image to disk ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
thumbnail . add_option (
' --no-write-thumbnail ' ,
action = ' store_false ' , dest = ' writethumbnail ' ,
help = ' Do not write thumbnail image to disk (default) ' )
2015-01-24 19:11:12 -07:00
thumbnail . add_option (
' --write-all-thumbnails ' ,
action = ' store_true ' , dest = ' write_all_thumbnails ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write all thumbnail image formats to disk ' )
2015-01-24 18:38:47 -07:00
thumbnail . add_option (
' --list-thumbnails ' ,
action = ' store_true ' , dest = ' list_thumbnails ' , default = False ,
help = ' Simulate and list all available thumbnail formats ' )
2020-10-27 04:37:21 -06:00
link = optparse . OptionGroup ( parser , ' Internet Shortcut Options ' )
link . add_option (
' --write-link ' ,
action = ' store_true ' , dest = ' writelink ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Write an internet shortcut file, depending on the current platform (.url, .webloc or .desktop). The URL may be cached by the OS ' )
2020-10-27 04:37:21 -06:00
link . add_option (
' --write-url-link ' ,
action = ' store_true ' , dest = ' writeurllink ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Write a .url Windows internet shortcut. The OS caches the URL based on the file path ' )
2020-10-27 04:37:21 -06:00
link . add_option (
' --write-webloc-link ' ,
action = ' store_true ' , dest = ' writewebloclink ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Write a .webloc macOS internet shortcut ' )
2020-10-27 04:37:21 -06:00
link . add_option (
' --write-desktop-link ' ,
action = ' store_true ' , dest = ' writedesktoplink ' , default = False ,
2021-01-18 12:17:48 -07:00
help = ' Write a .desktop Linux internet shortcut ' )
2020-10-27 04:37:21 -06:00
postproc = optparse . OptionGroup ( parser , ' Post-Processing Options ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' -x ' , ' --extract-audio ' ,
action = ' store_true ' , dest = ' extractaudio ' , default = False ,
2021-01-26 10:57:32 -07:00
help = ' Convert video files to audio-only files (requires ffmpeg and ffprobe) ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --audio-format ' , metavar = ' FORMAT ' , dest = ' audioformat ' , default = ' best ' ,
2017-03-16 05:54:47 -06:00
help = ' Specify audio format: " best " , " aac " , " flac " , " mp3 " , " m4a " , " opus " , " vorbis " , or " wav " ; " %d efault " by default; No effect without -x ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --audio-quality ' , metavar = ' QUALITY ' ,
dest = ' audioquality ' , default = ' 5 ' ,
2021-01-26 10:57:32 -07:00
help = ' Specify ffmpeg audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default %d efault) ' )
2020-05-16 10:09:12 -06:00
postproc . add_option (
' --remux-video ' ,
metavar = ' FORMAT ' , dest = ' remuxvideo ' , default = None ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-01-27 20:56:50 -07:00
' Remux the video into another container if necessary (currently supported: %s ). '
2021-01-27 08:02:51 -07:00
' If target container does not support the video/audio codec, remuxing will fail. '
' You can specify multiple rules; eg. " aac>m4a/mov>mp4/mkv " will remux aac to m4a, mov to mp4 '
2021-02-08 02:58:38 -07:00
' and anything else to mkv. ' % ' | ' . join ( REMUX_EXTENSIONS ) ) )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --recode-video ' ,
metavar = ' FORMAT ' , dest = ' recodevideo ' , default = None ,
2021-01-27 20:56:50 -07:00
help = (
' Re-encode the video into another format if re-encoding is necessary. '
' The supported formats are the same as --remux-video ' ) )
2015-06-09 19:08:16 -06:00
postproc . add_option (
2021-01-22 22:57:27 -07:00
' --postprocessor-args ' , ' --ppa ' ,
metavar = ' NAME:ARGS ' , dest = ' postprocessor_args ' , default = { } , type = ' str ' ,
action = ' callback ' , callback = _dict_from_multiple_values_options_callback ,
callback_kwargs = { ' default_key ' : ' default-compat ' , ' allowed_keys ' : r ' \ w+(?: \ + \ w+)? ' , ' process ' : compat_shlex_split } ,
2021-01-07 12:28:41 -07:00
help = (
' Give these arguments to the postprocessors. '
2021-01-20 09:07:40 -07:00
' Specify the postprocessor/executable name and the arguments separated by a colon " : " '
2021-01-22 22:57:27 -07:00
' to give the argument to the specified postprocessor/executable. Supported postprocessors are: '
2021-01-20 09:07:40 -07:00
' SponSkrub, ExtractAudio, VideoRemuxer, VideoConvertor, EmbedSubtitle, Metadata, Merger, '
' FixupStretched, FixupM4a, FixupM3u8, SubtitlesConvertor and EmbedThumbnail. '
2021-01-26 10:57:32 -07:00
' The supported executables are: SponSkrub, FFmpeg, FFprobe, and AtomicParsley. '
2021-01-20 09:07:40 -07:00
' You can also specify " PP+EXE:ARGS " to give the arguments to the specified executable '
2021-02-24 09:05:18 -07:00
' only when being used by the specified postprocessor. Additionally, for ffmpeg/ffprobe, '
' a number can be appended to the exe name seperated by " _i " to pass the argument '
' before the specified input file. Eg: --ppa " Merger+ffmpeg_i1:-v quiet " . '
' You can use this option multiple times to give different arguments to different '
' postprocessors. (Alias: --ppa) ' ) )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' -k ' , ' --keep-video ' ,
action = ' store_true ' , dest = ' keepvideo ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Keep the intermediate video file on disk after post-processing ' )
postproc . add_option (
' --no-keep-video ' ,
action = ' store_false ' , dest = ' keepvideo ' ,
help = ' Delete the intermediate video file after post-processing (default) ' )
postproc . add_option (
' --post-overwrites ' ,
action = ' store_false ' , dest = ' nopostoverwrites ' ,
help = ' Overwrite post-processed files (default) ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --no-post-overwrites ' ,
action = ' store_true ' , dest = ' nopostoverwrites ' , default = False ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Do not overwrite post-processed files ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --embed-subs ' ,
action = ' store_true ' , dest = ' embedsubtitles ' , default = False ,
2016-03-19 16:12:34 -06:00
help = ' Embed subtitles in the video (only for mp4, webm and mkv videos) ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
postproc . add_option (
' --no-embed-subs ' ,
action = ' store_false ' , dest = ' embedsubtitles ' ,
help = ' Do not embed subtitles (default) ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --embed-thumbnail ' ,
action = ' store_true ' , dest = ' embedthumbnail ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Embed thumbnail in the audio as cover art ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
postproc . add_option (
' --no-embed-thumbnail ' ,
action = ' store_false ' , dest = ' embedthumbnail ' ,
help = ' Do not embed thumbnail (default) ' )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --add-metadata ' ,
action = ' store_true ' , dest = ' addmetadata ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write metadata to the video file ' )
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
postproc . add_option (
' --no-add-metadata ' ,
action = ' store_false ' , dest = ' addmetadata ' ,
help = ' Do not write metadata (default) ' )
2015-03-04 14:33:56 -07:00
postproc . add_option (
' --metadata-from-title ' ,
metavar = ' FORMAT ' , dest = ' metafromtitle ' ,
2021-01-26 03:20:20 -07:00
help = optparse . SUPPRESS_HELP )
postproc . add_option (
' --parse-metadata ' ,
metavar = ' FIELD:FORMAT ' , dest = ' metafromfield ' , action = ' append ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-01-26 03:20:20 -07:00
' Parse additional metadata like title/artist from other fields. '
' Give field name to extract data from, and format of the field seperated by a " : " . '
2021-01-29 10:51:20 -07:00
' Either regular expression with named capture groups or a '
' similar syntax to the output template can also be used. '
2021-02-28 08:25:32 -07:00
' The parsed parameters replace any existing values and can be use in output template. '
2021-01-26 03:20:20 -07:00
' This option can be used multiple times. '
' Example: --parse-metadata " title: %(artist)s - %(title)s " matches a title like '
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' " Coldplay - Paradise " . '
2021-01-26 03:20:20 -07:00
' Example (regex): --parse-metadata " description:Artist - (?P<artist>.+?) " ' ) )
2014-10-12 15:10:11 -06:00
postproc . add_option (
' --xattrs ' ,
action = ' store_true ' , dest = ' xattrs ' , default = False ,
2015-03-25 04:02:55 -06:00
help = ' Write metadata to the video file \' s xattrs (using dublin core and xdg standards) ' )
2015-01-09 21:45:51 -07:00
postproc . add_option (
' --fixup ' ,
2021-03-07 00:02:59 -07:00
metavar = ' POLICY ' , dest = ' fixup ' , default = None ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
' Automatically correct known faults of the file. '
' One of never (do nothing), warn (only emit a warning), '
' detect_or_warn (the default; fix file if we can, warn otherwise) ' ) )
2014-10-12 15:10:11 -06:00
postproc . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --prefer-avconv ' , ' --no-prefer-ffmpeg ' ,
2014-10-12 15:10:11 -06:00
action = ' store_false ' , dest = ' prefer_ffmpeg ' ,
2021-01-26 10:57:32 -07:00
help = optparse . SUPPRESS_HELP )
2014-10-12 15:10:11 -06:00
postproc . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --prefer-ffmpeg ' , ' --no-prefer-avconv ' ,
2021-01-26 10:57:32 -07:00
action = ' store_true ' , dest = ' prefer_ffmpeg ' , default = True ,
help = optparse . SUPPRESS_HELP )
2015-02-13 03:14:01 -07:00
postproc . add_option (
' --ffmpeg-location ' , ' --avconv-location ' , metavar = ' PATH ' ,
dest = ' ffmpeg_location ' ,
2021-01-26 10:57:32 -07:00
help = ' Location of the ffmpeg binary; either the path to the binary or its containing directory ' )
2014-09-12 23:55:21 -06:00
postproc . add_option (
2014-10-12 15:10:11 -06:00
' --exec ' ,
metavar = ' CMD ' , dest = ' exec_cmd ' ,
2020-04-23 13:31:38 -06:00
help = ' Execute a command on the file after downloading and post-processing, similar to find \' s -exec syntax. Example: --exec \' adb push {} /sdcard/Music/ && rm {} \' ' )
2015-02-28 06:43:24 -07:00
postproc . add_option (
2015-12-30 10:12:35 -07:00
' --convert-subs ' , ' --convert-subtitles ' ,
2015-02-28 06:43:24 -07:00
metavar = ' FORMAT ' , dest = ' convertsubtitles ' , default = None ,
2017-09-22 12:30:03 -06:00
help = ' Convert the subtitles to other format (currently supported: srt|ass|vtt|lrc) ' )
2014-09-12 23:55:21 -06:00
2021-01-18 12:17:48 -07:00
sponskrub = optparse . OptionGroup ( parser , ' SponSkrub (SponsorBlock) Options ' , description = (
2021-02-24 11:45:56 -07:00
' SponSkrub (https://github.com/yt-dlp/SponSkrub) is a utility to mark/remove sponsor segments '
2021-01-18 12:17:48 -07:00
' from downloaded YouTube videos using SponsorBlock API (https://sponsor.ajay.app) ' ) )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
2020-11-14 17:28:41 -07:00
' --sponskrub ' ,
action = ' store_true ' , dest = ' sponskrub ' , default = None ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = (
2021-01-18 12:17:48 -07:00
' Use sponskrub to mark sponsored sections. '
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' This is enabled by default if the sponskrub binary exists (Youtube only) ' ) )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
2020-11-14 17:28:41 -07:00
' --no-sponskrub ' ,
action = ' store_false ' , dest = ' sponskrub ' ,
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
help = ' Do not use sponskrub ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
2020-11-14 17:28:41 -07:00
' --sponskrub-cut ' , default = False ,
action = ' store_true ' , dest = ' sponskrub_cut ' ,
help = ' Cut out the sponsor sections instead of simply marking them ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --no-sponskrub-cut ' ,
action = ' store_false ' , dest = ' sponskrub_cut ' ,
help = ' Simply mark the sponsor sections, not cut them out (default) ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
2020-11-14 17:28:41 -07:00
' --sponskrub-force ' , default = False ,
action = ' store_true ' , dest = ' sponskrub_force ' ,
help = ' Run sponskrub even if the video was already downloaded ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --no-sponskrub-force ' ,
action = ' store_true ' , dest = ' sponskrub_force ' ,
help = ' Do not cut out the sponsor sections if the video was already downloaded (default) ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
2020-11-14 17:28:41 -07:00
' --sponskrub-location ' , metavar = ' PATH ' ,
dest = ' sponskrub_path ' , default = ' ' ,
2021-01-18 12:17:48 -07:00
help = ' Location of the sponskrub binary; either the path to the binary or its containing directory ' )
2021-01-06 23:41:05 -07:00
sponskrub . add_option (
' --sponskrub-args ' , dest = ' sponskrub_args ' , metavar = ' ARGS ' ,
2021-01-07 12:28:41 -07:00
help = optparse . SUPPRESS_HELP )
2020-11-14 17:28:41 -07:00
2020-09-16 05:00:41 -06:00
extractor = optparse . OptionGroup ( parser , ' Extractor Options ' )
2021-02-28 16:48:37 -07:00
extractor . add_option (
' --extractor-retries ' ,
2021-03-02 14:33:04 -07:00
dest = ' extractor_retries ' , metavar = ' RETRIES ' , default = 3 ,
2021-02-28 16:48:37 -07:00
help = ' Number of retries for known extractor errors (default is %d efault), or " infinite " ' )
2020-09-16 05:00:41 -06:00
extractor . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --allow-dynamic-mpd ' , ' --no-ignore-dynamic-mpd ' ,
2020-09-16 05:00:41 -06:00
action = ' store_true ' , dest = ' dynamic_mpd ' , default = True ,
2021-01-18 12:17:48 -07:00
help = ' Process dynamic DASH manifests (default) (Alias: --no-ignore-dynamic-mpd) ' )
2020-09-16 05:00:41 -06:00
extractor . add_option (
Added negative switches for many existing options
* The idea is that it should be possible to negate any boolean option by adding a `no-` to the switch
New: `--no-ignore-dynamic-mpd`, `--no-allow-dynamic-mpd`, `--allow-dynamic-mpd`, `--youtube-include-hls-manifest`, `--no-youtube-include-hls-manifest`, `--no-youtube-skip-hls-manifest`, `--no-download`, `--no-download-archive`, `--resize-buffer`, `--part`, `--mtime`, `--no-keep-fragments`, `--no-cookies`, `--no-write-annotations`, `--no-write-info-json`, `--no-write-description`, `--no-write-thumbnail`, `--youtube-include-dash-manifest`, `--post-overwrites`, `--no-keep-video`, `--no-embed-subs`, `--no-embed-thumbnail`, `--no-add-metadata`, `--no-include-ads`, `--no-write-sub`, `--no-write-auto-sub`, `--no-playlist-reverse`, `--no-restrict-filenames`, `--youtube-include-dash-manifest`, `--no-format-sort-force`, `--flat-videos`, `--no-list-formats-as-table`, `--no-sponskrub`, `--no-sponskrub-cut`, `--no-sponskrub-force`
Renamed: `--write-subs`, --no-write-subs`, `--no-write-auto-subs, `--write-auto-subs`. Note that these can still be used without the ending "s"
2021-01-04 10:45:15 -07:00
' --ignore-dynamic-mpd ' , ' --no-allow-dynamic-mpd ' ,
2020-09-16 05:00:41 -06:00
action = ' store_false ' , dest = ' dynamic_mpd ' ,
2021-01-18 12:17:48 -07:00
help = ' Do not process dynamic DASH manifests (Alias: --no-allow-dynamic-mpd) ' )
2021-02-24 07:47:53 -07:00
extractor . add_option (
' --hls-split-discontinuity ' ,
dest = ' hls_split_discontinuity ' , action = ' store_true ' , default = False ,
help = ' Split HLS playlists to different formats at discontinuities such as ad breaks '
)
extractor . add_option (
' --no-hls-split-discontinuity ' ,
dest = ' hls_split_discontinuity ' , action = ' store_false ' ,
help = ' Do not split HLS playlists to different formats at discontinuities such as ad breaks (default) ' )
2021-02-24 09:01:01 -07:00
extractor . add_option (
' --youtube-include-dash-manifest ' , ' --no-youtube-skip-dash-manifest ' ,
action = ' store_true ' , dest = ' youtube_include_dash_manifest ' , default = True ,
help = ' Download the DASH manifests and related data on YouTube videos (default) (Alias: --no-youtube-skip-dash-manifest) ' )
extractor . add_option (
' --youtube-skip-dash-manifest ' , ' --no-youtube-include-dash-manifest ' ,
action = ' store_false ' , dest = ' youtube_include_dash_manifest ' ,
help = ' Do not download the DASH manifests and related data on YouTube videos (Alias: --no-youtube-include-dash-manifest) ' )
extractor . add_option (
' --youtube-include-hls-manifest ' , ' --no-youtube-skip-hls-manifest ' ,
action = ' store_true ' , dest = ' youtube_include_hls_manifest ' , default = True ,
help = ' Download the HLS manifests and related data on YouTube videos (default) (Alias: --no-youtube-skip-hls-manifest) ' )
extractor . add_option (
' --youtube-skip-hls-manifest ' , ' --no-youtube-include-hls-manifest ' ,
action = ' store_false ' , dest = ' youtube_include_hls_manifest ' ,
help = ' Do not download the HLS manifests and related data on YouTube videos (Alias: --no-youtube-include-hls-manifest) ' )
2020-09-16 05:00:41 -06:00
2014-09-12 23:55:21 -06:00
parser . add_option_group ( general )
2015-01-10 11:55:36 -07:00
parser . add_option_group ( network )
2017-02-18 13:58:17 -07:00
parser . add_option_group ( geo )
2014-09-12 23:55:21 -06:00
parser . add_option_group ( selection )
parser . add_option_group ( downloader )
parser . add_option_group ( filesystem )
2015-01-24 18:38:47 -07:00
parser . add_option_group ( thumbnail )
2020-10-27 04:37:21 -06:00
parser . add_option_group ( link )
2014-09-12 23:55:21 -06:00
parser . add_option_group ( verbosity )
parser . add_option_group ( workarounds )
parser . add_option_group ( video_format )
parser . add_option_group ( subtitles )
parser . add_option_group ( authentication )
2016-09-15 09:18:31 -06:00
parser . add_option_group ( adobe_pass )
2014-09-12 23:55:21 -06:00
parser . add_option_group ( postproc )
2021-01-06 23:41:05 -07:00
parser . add_option_group ( sponskrub )
2020-09-16 05:00:41 -06:00
parser . add_option_group ( extractor )
2014-09-12 23:55:21 -06:00
if overrideArguments is not None :
opts , args = parser . parse_args ( overrideArguments )
if opts . verbose :
2014-10-12 15:10:11 -06:00
write_string ( ' [debug] Override config: ' + repr ( overrideArguments ) + ' \n ' )
2014-09-12 23:55:21 -06:00
else :
2015-04-11 15:57:56 -06:00
def compat_conf ( conf ) :
if sys . version_info < ( 3 , ) :
return [ a . decode ( preferredencoding ( ) , ' replace ' ) for a in conf ]
return conf
2021-01-16 11:21:00 -07:00
configs = {
2021-01-23 05:18:12 -07:00
' command-line ' : compat_conf ( sys . argv [ 1 : ] ) ,
' custom ' : [ ] , ' home ' : [ ] , ' portable ' : [ ] , ' user ' : [ ] , ' system ' : [ ] }
paths = { ' command-line ' : False }
opts , args = parser . parse_args ( configs [ ' command-line ' ] )
2015-03-24 09:39:46 -06:00
2021-01-16 11:21:00 -07:00
def get_configs ( ) :
2021-01-23 05:18:12 -07:00
if ' --config-location ' in configs [ ' command-line ' ] :
2021-01-16 11:21:00 -07:00
location = compat_expanduser ( opts . config_location )
if os . path . isdir ( location ) :
2021-02-24 11:45:56 -07:00
location = os . path . join ( location , ' yt-dlp.conf ' )
2021-01-16 11:21:00 -07:00
if not os . path . exists ( location ) :
parser . error ( ' config-location %s does not exist. ' % location )
2021-01-23 05:18:12 -07:00
configs [ ' custom ' ] = _readOptions ( location , default = None )
if configs [ ' custom ' ] is None :
configs [ ' custom ' ] = [ ]
else :
paths [ ' custom ' ] = location
if ' --ignore-config ' in configs [ ' command-line ' ] :
2021-01-16 11:21:00 -07:00
return
if ' --ignore-config ' in configs [ ' custom ' ] :
return
2021-01-23 05:18:12 -07:00
def read_options ( path , user = False ) :
2021-02-24 11:45:56 -07:00
# Multiple package names can be given here
# Eg: ('yt-dlp', 'youtube-dlc', 'youtube-dl') will look for
# the configuration file of any of these three packages
for package in ( ' yt-dlp ' , ) :
2021-01-23 05:18:12 -07:00
if user :
2021-01-24 13:07:09 -07:00
config , current_path = _readUserConf ( package , default = None )
else :
current_path = os . path . join ( path , ' %s .conf ' % package )
config = _readOptions ( current_path , default = None )
if config is not None :
return config , current_path
return [ ] , None
2021-01-23 05:18:12 -07:00
2021-01-24 06:40:02 -07:00
configs [ ' portable ' ] , paths [ ' portable ' ] = read_options ( get_executable_path ( ) )
2021-01-16 11:21:00 -07:00
if ' --ignore-config ' in configs [ ' portable ' ] :
return
2021-01-23 05:18:12 -07:00
def get_home_path ( ) :
opts = parser . parse_args ( configs [ ' portable ' ] + configs [ ' custom ' ] + configs [ ' command-line ' ] ) [ 0 ]
return expand_path ( opts . paths . get ( ' home ' , ' ' ) ) . strip ( )
configs [ ' home ' ] , paths [ ' home ' ] = read_options ( get_home_path ( ) )
if ' --ignore-config ' in configs [ ' home ' ] :
return
configs [ ' system ' ] , paths [ ' system ' ] = read_options ( ' /etc ' )
2021-01-16 11:21:00 -07:00
if ' --ignore-config ' in configs [ ' system ' ] :
return
2021-01-23 05:18:12 -07:00
configs [ ' user ' ] , paths [ ' user ' ] = read_options ( ' ' , True )
2021-01-16 11:21:00 -07:00
if ' --ignore-config ' in configs [ ' user ' ] :
2021-01-23 05:18:12 -07:00
configs [ ' system ' ] , paths [ ' system ' ] = [ ] , None
2016-09-14 09:28:17 -06:00
2021-01-16 11:21:00 -07:00
get_configs ( )
2021-01-23 05:18:12 -07:00
argv = configs [ ' system ' ] + configs [ ' user ' ] + configs [ ' home ' ] + configs [ ' portable ' ] + configs [ ' custom ' ] + configs [ ' command-line ' ]
2014-09-12 23:55:21 -06:00
opts , args = parser . parse_args ( argv )
if opts . verbose :
2021-01-23 05:18:12 -07:00
for label in ( ' System ' , ' User ' , ' Portable ' , ' Home ' , ' Custom ' , ' Command-line ' ) :
key = label . lower ( )
if paths . get ( key ) is None :
continue
if paths [ key ] :
write_string ( ' [debug] %s config file: %s \n ' % ( label , paths [ key ] ) )
write_string ( ' [debug] %s config: %s \n ' % ( label , repr ( _hide_login_info ( configs [ key ] ) ) ) )
2014-09-12 23:55:21 -06:00
return parser , opts , args