Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
yt-dlp(1)							     yt-dlp(1)

NAME
       yt-dlp -	A feature-rich command-line audio/video	downloader

SYNOPSIS
       yt-dlp [OPTIONS]	URL [URL...]

DESCRIPTION
       yt-dlp  is a feature-rich command-line audio/video downloader with sup-
       port for	thousands of sites.  The  project  is  a  fork	of  youtube-dl
       (https://github.com/ytdl-org/youtube-dl)	 based	on  the	 now  inactive
       youtube-dlc (https://github.com/blackjack4494/yt-dlc).

OPTIONS
   General Options:
       -h, --help
	      Print this help text and exit

       --version
	      Print program version and	exit

       -U, --update
	      Update this program to the latest	version

       --no-update
	      Do not check for updates (default)

       --update-to [CHANNEL]@[TAG]
	      Upgrade/downgrade	to a  specific	version.   CHANNEL  can	 be  a
	      repository  as  well.   CHANNEL  and TAG default to "stable" and
	      "latest" respectively if	omitted;  See  "UPDATE"	 for  details.
	      Supported	channels: stable, nightly, master

       -i, --ignore-errors
	      Ignore download and postprocessing errors.  The download will be
	      considered successful even if the	postprocessing fails

       --no-abort-on-error
	      Continue	with  next video on download errors; e.g.  to skip un-
	      available	videos in a playlist (default)

       --abort-on-error
	      Abort downloading	of further videos if an	error  occurs  (Alias:
	      --no-ignore-errors)

       --list-extractors
	      List all supported extractors and	exit

       --extractor-descriptions
	      Output descriptions of all supported extractors and exit

       --use-extractors	NAMES
	      Extractor	 names	to  use	separated by commas.  You can also use
	      regexes, "all", "default"	and "end"  (end	 URL  matching);  e.g.
	      --ies  "holodex.*,end,youtube".	Prefix	the name with a	"-" to
	      exclude it, e.g.	--ies default,-generic.	 Use --list-extractors
	      for a list of extractor names.  (Alias: --ies)

       --default-search	PREFIX
	      Use this prefix for unqualified URLs.  E.g.   "gvsearch2:python"
	      downloads	 two  videos  from  google  videos for the search term
	      "python".	 Use the value "auto" to let yt-dlp guess ("auto_warn-
	      ing" 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

       --ignore-config
	      Don't  load  any	more configuration files except	those given to
	      --config-locations.  For backward	compatibility, if this	option
	      is found inside the system configuration file, the user configu-
	      ration is	not loaded.  (Alias: --no-config)

       --no-config-locations
	      Do not load any custom configuration files (default).  When giv-
	      en inside	a configuration	file, ignore all previous --config-lo-
	      cations defined in the current file

       --config-locations PATH
	      Location	of the main configuration file;	either the path	to the
	      config or	its containing directory ("-" for stdin).  Can be used
	      multiple times and inside	other configuration files

       --plugin-dirs DIR
	      Path to an additional directory to search	for plugins.  This op-
	      tion can be used multiple	times  to  add	multiple  directories.
	      Use "default" to search the default plugin directories (default)

       --no-plugin-dirs
	      Clear plugin directories to search, including defaults and those
	      provided by previous --plugin-dirs

       --js-runtimes RUNTIME[:PATH]
	      Additional  JavaScript runtime to	enable,	with an	optional loca-
	      tion for the runtime (either the path to the binary or its  con-
	      taining  directory).   This option can be	used multiple times to
	      enable multiple runtimes.	 Supported runtimes are	(in  order  of
	      priority,	 from  highest	to  lowest): deno, node, quickjs, bun.
	      Only "deno" is enabled by	default.  The highest priority runtime
	      that is both enabled and available will be used.	 In  order  to
	      use  a lower priority runtime when "deno"	is available, --no-js-
	      runtimes needs to	be passed before enabling other	runtimes

       --no-js-runtimes
	      Clear JavaScript runtimes	 to  enable,  including	 defaults  and
	      those provided by	previous --js-runtimes

       --remote-components COMPONENT
	      Remote  components to allow yt-dlp to fetch when required.  This
	      option is	currently not needed if	you are	using an official exe-
	      cutable or have the requisite version of the yt-dlp-ejs  package
	      installed.  You can use this option multiple times to allow mul-
	      tiple   components.    Supported	 values:   ejs:npm   (external
	      JavaScript components from npm), ejs:github (external JavaScript
	      components from yt-dlp-ejs GitHub).  By default, no remote  com-
	      ponents are allowed

       --no-remote-components
	      Disallow fetching	of all remote components, including any	previ-
	      ously allowed by --remote-components or defaults.

       --flat-playlist
	      Do not extract a playlist's URL result entries; some entry meta-
	      data may be missing and downloading may be bypassed

       --no-flat-playlist
	      Fully extract the	videos of a playlist (default)

       --live-from-start
	      Download livestreams from	the start.  Currently experimental and
	      only supported for YouTube, Twitch, and TVer

       --no-live-from-start
	      Download livestreams from	the current time (default)

       --wait-for-video	MIN[-MAX]
	      Wait  for	scheduled streams to become available.	Pass the mini-
	      mum number of seconds (or	range) to wait between retries

       --no-wait-for-video
	      Do not wait for scheduled	streams	(default)

       --mark-watched
	      Mark videos watched (even	with --simulate)

       --no-mark-watched
	      Do not mark videos watched (default)

       --color [STREAM:]POLICY
	      Whether to emit color codes in output,  optionally  prefixed  by
	      the  STREAM  (stdout or stderr) to apply the setting to.	Can be
	      one of "always", "auto" (default), "never", or  "no_color"  (use
	      non color	terminal sequences).  Use "auto-tty" or	"no_color-tty"
	      to  decide based on terminal support only.  Can be used multiple
	      times

       --compat-options	OPTS
	      Options that can help  keep  compatibility  with	youtube-dl  or
	      youtube-dlc configurations by reverting some of the changes made
	      in yt-dlp.  See "Differences in default behavior"	for details

       --alias ALIASES OPTIONS
	      Create  aliases  for  an	option string.	Unless an alias	starts
	      with a dash "-", it is prefixed with "--".  Arguments are	parsed
	      according	to the Python string formatting	 mini-language.	  E.g.
	      --alias  get-audio,-X  "-S  aext:{0},abr	-x --audio-format {0}"
	      creates options "--get-audio" and	"-X" that  takes  an  argument
	      (ARG0) and expands to "-S	aext:ARG0,abr -x --audio-format	ARG0".
	      All  defined aliases are listed in the --help output.  Alias op-
	      tions can	trigger	more aliases; so be careful to avoid  defining
	      recursive	options.  As a safety measure, each alias may be trig-
	      gered  a maximum of 100 times.  This option can be used multiple
	      times

       -t, --preset-alias PRESET
	      Applies a	predefined set of options.  e.g.  --preset-alias  mp3.
	      The  following presets are available: mp3, aac, mp4, mkv,	sleep.
	      See the "Preset Aliases" section at the end for more info.  This
	      option can be used multiple times

   Network Options:
       --proxy URL
	      Use the  specified  HTTP/HTTPS/SOCKS  proxy.   To	 enable	 SOCKS
	      proxy,	   specify	 a	 proper	     scheme,	  e.g.
	      socks5://user:pass@127.0.0.1:1080/.  Pass	 in  an	 empty	string
	      (--proxy "") for direct connection

       --socket-timeout	SECONDS
	      Time to wait before giving up, in	seconds

       --source-address	IP
	      Client-side IP address to	bind to

       --impersonate CLIENT[:OS]
	      Client  to  impersonate for requests.  E.g.  chrome, chrome-110,
	      chrome:windows-10.  Pass	--impersonate=""  to  impersonate  any
	      client.	Note  that  forcing impersonation for all requests may
	      have a detrimental impact	on download speed and stability

       --list-impersonate-targets
	      List available clients to	impersonate.

       -4, --force-ipv4
	      Make all connections via IPv4

       -6, --force-ipv6
	      Make all connections via IPv6

       --enable-file-urls
	      Enable file:// URLs.  This is disabled by	default	 for  security
	      reasons.

   Geo-restriction:
       --geo-verification-proxy	URL
	      Use  this	proxy to verify	the IP address for some	geo-restricted
	      sites.  The default proxy	specified by --proxy (or none, if  the
	      option is	not present) is	used for the actual downloading

       --xff VALUE
	      How  to  fake  X-Forwarded-For HTTP header to try	bypassing geo-
	      graphic restriction.  One	of "default" (only when	 known	to  be
	      useful),	"never", an IP block in	CIDR notation, or a two-letter
	      ISO 3166-2 country code

   Video Selection:
       -I, --playlist-items ITEM_SPEC
	      Comma-separated playlist_index of	the items  to  download.   You
	      can specify a range using	"[START]:[STOP][:STEP]".  For backward
	      compatibility,  START-STOP  is also supported.  Use negative in-
	      dices to count from the right and	negative STEP to  download  in
	      reverse  order.	E.g.   "-I  1:3,7,-5::2" used on a playlist of
	      size 15 will download the	items at index 1,2,3,7,11,13,15

       --min-filesize SIZE
	      Abort download if	filesize is smaller than SIZE,	e.g.   50k  or
	      44.6M

       --max-filesize SIZE
	      Abort  download  if  filesize  is	larger than SIZE, e.g.	50k or
	      44.6M

       --date DATE
	      Download only videos uploaded on this date.   The	 date  can  be
	      "YYYYMMDD"     or	    in	   the	  format    [now|today|yester-
	      day][-N[day|week|month|year]].   E.g.    "--date	 today-2weeks"
	      downloads	only videos uploaded on	the same day two weeks ago

       --datebefore DATE
	      Download	only videos uploaded on	or before this date.  The date
	      formats accepted are the same as --date

       --dateafter DATE
	      Download only videos uploaded on or after	this date.   The  date
	      formats accepted are the same as --date

       --match-filters FILTER
	      Generic  video  filter.  Any "OUTPUT TEMPLATE" field can be com-
	      pared with a number or a string using the	operators  defined  in
	      "Filtering  Formats".   You  can	also simply specify a field to
	      match if the field is present, use  "!field"  to	check  if  the
	      field is not present, and	"&" to check multiple conditions.  Use
	      a	"" to escape "&" or quotes if needed.  If used multiple	times,
	      the  filter  matches  if	at least one of	the conditions is met.
	      E.g.  --match-filters !is_live --match-filters  "like_count>?100
	      &	 description~='(?i)&  dogs"  matches  only videos that are not
	      live OR those that have a	like count more	than 100 (or the  like
	      field is not available) and also has a description that contains
	      the phrase "cats & dogs" (caseless).  Use	"--match-filters -" to
	      interactively ask	whether	to download each video

       --no-match-filters
	      Do not use any --match-filters (default)

       --break-match-filters FILTER
	      Same  as "--match-filters" but stops the download	process	when a
	      video is rejected

       --no-break-match-filters
	      Do not use any --break-match-filters (default)

       --no-playlist
	      Download only the	video, if the URL refers  to  a	 video	and  a
	      playlist

       --yes-playlist
	      Download	the  playlist,	if  the	 URL  refers  to a video and a
	      playlist

       --age-limit YEARS
	      Download only videos suitable for	the given age

       --download-archive FILE
	      Download only videos not listed in the archive file.  Record the
	      IDs of all downloaded videos in it

       --no-download-archive
	      Do not use archive file (default)

       --max-downloads NUMBER
	      Abort after downloading NUMBER files

       --break-on-existing
	      Stop the download	process	when encountering a file  that	is  in
	      the archive supplied with	the --download-archive option

       --no-break-on-existing
	      Do  not  stop the	download process when encountering a file that
	      is in the	archive	(default)

       --break-per-input
	      Alters --max-downloads, --break-on-existing,  --break-match-fil-
	      ters, and	autonumber to reset per	input URL

       --no-break-per-input
	      --break-on-existing  and	similar	 options terminates the	entire
	      download queue

       --skip-playlist-after-errors N
	      Number of	allowed	failures until the rest	 of  the  playlist  is
	      skipped

   Download Options:
       -N, --concurrent-fragments N
	      Number  of  fragments  of	 a dash/hlsnative video	that should be
	      downloaded concurrently (default is 1)

       -r, --limit-rate	RATE
	      Maximum download rate in bytes per second, e.g.  50K or 4.2M

       --throttled-rate	RATE
	      Minimum download rate in bytes per second	below which throttling
	      is assumed and the video data is re-extracted, e.g.  100K

       -R, --retries RETRIES
	      Number of	retries	(default is 10), or "infinite"

       --file-access-retries RETRIES
	      Number of	times to retry on file access error (default is	3), or
	      "infinite"

       --fragment-retries RETRIES
	      Number of	retries	for a fragment (default	is 10),	or  "infinite"
	      (DASH, hlsnative and ISM)

       --retry-sleep [TYPE:]EXPR
	      Time  to	sleep between retries in seconds (optionally) prefixed
	      by the type of retry (http (default), fragment, file_access, ex-
	      tractor) to apply	the sleep to.  EXPR  can  be  a	 number,  lin-
	      ear=START[:END[:STEP=1]]	or exp=START[:END[:BASE=2]].  This op-
	      tion can be used multiple	times to set the sleep for the differ-
	      ent retry	types, e.g.  --retry-sleep  linear=1::2	 --retry-sleep
	      fragment:exp=1:20

       --skip-unavailable-fragments
	      Skip unavailable fragments for DASH, hlsnative and ISM downloads
	      (default)	(Alias:	--no-abort-on-unavailable-fragments)

       --abort-on-unavailable-fragments
	      Abort  download  if a fragment is	unavailable (Alias: --no-skip-
	      unavailable-fragments)

       --keep-fragments
	      Keep downloaded fragments	on disk	after downloading is finished

       --no-keep-fragments
	      Delete downloaded	fragments after	downloading is	finished  (de-
	      fault)

       --buffer-size SIZE
	      Size of download buffer, e.g.  1024 or 16K (default is 1024)

       --resize-buffer
	      The  buffer  size	is automatically resized from an initial value
	      of --buffer-size (default)

       --no-resize-buffer
	      Do not automatically adjust the buffer size

       --http-chunk-size SIZE
	      Size of a	chunk for chunk-based HTTP downloading,	e.g.  10485760
	      or 10M (default is disabled).  May be useful for bypassing band-
	      width throttling imposed by a webserver (experimental)

       --playlist-random
	      Download playlist	videos in random order

       --lazy-playlist
	      Process entries in the playlist as they are received.  This dis-
	      ables n_entries, --playlist-random and --playlist-reverse

       --no-lazy-playlist
	      Process videos in	the playlist only after	the entire playlist is
	      parsed (default)

       --hls-use-mpegts
	      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

       --no-hls-use-mpegts
	      Do not use the mpegts container for HLS videos.  This is default
	      when not downloading live	streams

       --download-sections REGEX
	      Download only chapters that match	the regular expression.	 A "*"
	      prefix  denotes  time-range  instead of chapter.	Negative time-
	      stamps are calculated from the end.  "*from-url" can be used  to
	      download	between	the "start_time" and "end_time"	extracted from
	      the URL.	Needs ffmpeg.  This option can be used multiple	 times
	      to   download   multiple	 sections,  e.g.   --download-sections
	      "*10:15-inf" --download-sections "intro"

       --downloader [PROTO:]NAME
	      Name or path of the external downloader to use (optionally) pre-
	      fixed by the protocols (http, ftp, m3u8, dash, rstp, rtmp,  mms)
	      to  use  it for.	Currently supports native, aria2c, axel, curl,
	      ffmpeg, httpie, wget.  You can use this option multiple times to
	      set  different  downloaders  for	different   protocols.	  E.g.
	      --downloader  aria2c  --downloader  "dash,m3u8:native"  will use
	      aria2c for http/ftp downloads, and  the  native  downloader  for
	      dash/m3u8	downloads (Alias: --external-downloader)

       --downloader-args NAME:ARGS
	      Give  these  arguments  to the external downloader.  Specify the
	      downloader name and the arguments	separated by a colon ":".  For
	      ffmpeg, arguments	can be passed to different positions using the
	      same syntax as --postprocessor-args.  You	can  use  this	option
	      multiple	times  to  give	different arguments to different down-
	      loaders (Alias: --external-downloader-args)

   Filesystem Options:
       -a, --batch-file	FILE
	      File containing URLs to download ("-" for	stdin),	 one  URL  per
	      line.   Lines  starting  with  "#", ";" or "]" are considered as
	      comments and ignored

       --no-batch-file
	      Do not read URLs from batch file (default)

       -P, --paths [TYPES:]PATH
	      The paths	where the files	should	be  downloaded.	  Specify  the
	      type  of	file  and  the path separated by a colon ":".  All the
	      same TYPES as --output are supported.  Additionally, you can al-
	      so provide "home"	(default) 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  fin-
	      ished.  This option is ignored if	--output is an absolute	path

       -o, --output [TYPES:]TEMPLATE
	      Output filename template;	see "OUTPUT TEMPLATE" for details

       --output-na-placeholder TEXT
	      Placeholder for unavailable fields in --output (default: "NA")

       --restrict-filenames
	      Restrict	filenames  to only ASCII characters, and avoid "&" and
	      spaces in	filenames

       --no-restrict-filenames
	      Allow Unicode characters,	"&" and	spaces in filenames (default)

       --windows-filenames
	      Force filenames to be Windows-compatible

       --no-windows-filenames
	      Sanitize filenames only minimally

       --trim-filenames	LENGTH
	      Limit the	filename length	(excluding extension) to the specified
	      number of	characters

       -w, --no-overwrites
	      Do not overwrite any files

       --force-overwrites
	      Overwrite	all video and metadata files.	This  option  includes
	      --no-continue

       --no-force-overwrites
	      Do  not  overwrite  the  video, but overwrite related files (de-
	      fault)

       -c, --continue
	      Resume partially downloaded files/fragments (default)

       --no-continue
	      Do not resume partially downloaded fragments.  If	 the  file  is
	      not fragmented, restart download of the entire file

       --part Use  .part  files	 instead  of writing directly into output file
	      (default)

       --no-part
	      Do not use .part files - write directly into output file

       --mtime
	      Use the Last-modified header to set the file modification	time

       --no-mtime
	      Do not use the Last-modified header to set the file modification
	      time (default)

       --write-description
	      Write video description to a .description	file

       --no-write-description
	      Do not write video description (default)

       --write-info-json
	      Write video metadata to a	.info.json file	(this may contain per-
	      sonal information)

       --no-write-info-json
	      Do not write video metadata (default)

       --write-playlist-metafiles
	      Write playlist metadata in addition to the video	metadata  when
	      using --write-info-json, --write-description etc.	 (default)

       --no-write-playlist-metafiles
	      Do  not  write  playlist	metadata when using --write-info-json,
	      --write-description etc.

       --clean-info-json
	      Remove some internal metadata such as filenames from the	infoj-
	      son (default)

       --no-clean-info-json
	      Write all	fields to the infojson

       --write-comments
	      Retrieve	video comments to be placed in the infojson.  The com-
	      ments are	fetched	even without this option if the	extraction  is
	      known to be quick	(Alias:	--get-comments)

       --no-write-comments
	      Do not retrieve video comments unless the	extraction is known to
	      be quick (Alias: --no-get-comments)

       --load-info-json	FILE
	      JSON  file  containing  the  video information (created with the
	      "--write-info-json" option)

       --cookies FILE
	      Netscape formatted file to read cookies from and dump cookie jar
	      in

       --no-cookies
	      Do not read/dump cookies from/to file (default)

       --cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]
	      The name of the browser to load cookies  from.   Currently  sup-
	      ported  browsers	are:  brave,  chrome, chromium,	edge, firefox,
	      opera, safari, vivaldi, whale.  Optionally, the KEYRING used for
	      decrypting Chromium cookies on Linux, the	name/path of the  PRO-
	      FILE  to	load cookies from, and the CONTAINER name (if Firefox)
	      ("none" for no container)	can be	given  with  their  respective
	      separators.  By default, all containers of the most recently ac-
	      cessed  profile are used.	 Currently supported keyrings are: ba-
	      sictext, gnomekeyring, kwallet, kwallet5,	kwallet6

       --no-cookies-from-browser
	      Do not load cookies from browser (default)

       --cache-dir DIR
	      Location in the filesystem where yt-dlp  can  store  some	 down-
	      loaded  information  (such  as client ids	and signatures)	perma-
	      nently.  By default ${XDG_CACHE_HOME}/yt-dlp

       --no-cache-dir
	      Disable filesystem caching

       --rm-cache-dir
	      Delete all filesystem cache files

   Thumbnail Options:
       --write-thumbnail
	      Write thumbnail image to disk

       --no-write-thumbnail
	      Do not write thumbnail image to disk (default)

       --write-all-thumbnails
	      Write all	thumbnail image	formats	to disk

       --list-thumbnails
	      List available thumbnails	of each	video.	Simulate unless	 --no-
	      simulate is used

   Internet Shortcut Options:
       --write-link
	      Write  an	internet shortcut file,	depending on the current plat-
	      form (.url, .webloc or .desktop).	 The URL may be	cached by  the
	      OS

       --write-url-link
	      Write  a	.url Windows internet shortcut.	 The OS	caches the URL
	      based on the file	path

       --write-webloc-link
	      Write a .webloc macOS internet shortcut

       --write-desktop-link
	      Write a .desktop Linux internet shortcut

   Verbosity and Simulation Options:
       -q, --quiet
	      Activate quiet mode.  If used with --verbose, print the  log  to
	      stderr

       --no-quiet
	      Deactivate quiet mode.  (Default)

       --no-warnings
	      Ignore warnings

       -s, --simulate
	      Do not download the video	and do not write anything to disk

       --no-simulate
	      Download the video even if printing/listing options are used

       --ignore-no-formats-error
	      Ignore "No video formats"	error.	Useful for extracting metadata
	      even  if the videos are not actually available for download (ex-
	      perimental)

       --no-ignore-no-formats-error
	      Throw error when no downloadable video formats  are  found  (de-
	      fault)

       --skip-download
	      Do  not  download	 the video but write all related files (Alias:
	      --no-download)

       -O, --print [WHEN:]TEMPLATE
	      Field name or output template to	print  to  screen,  optionally
	      prefixed	with  when to print it,	separated by a ":".  Supported
	      values of	"WHEN" are the same  as	 that  of  --use-postprocessor
	      (default:	 video).   Implies --quiet.  Implies --simulate	unless
	      --no-simulate or later stages of WHEN are	used.  This option can
	      be used multiple times

       --print-to-file [WHEN:]TEMPLATE FILE
	      Append given template to the file.  The values of	WHEN and  TEM-
	      PLATE  are the same as that of --print.  FILE uses the same syn-
	      tax as the output	template.  This	option can  be	used  multiple
	      times

       -j, --dump-json
	      Quiet,  but print	JSON information for each video.  Simulate un-
	      less --no-simulate is used.  See "OUTPUT	TEMPLATE"  for	a  de-
	      scription	of available keys

       -J, --dump-single-json
	      Quiet,  but  print  JSON	information  for  each URL or infojson
	      passed.  Simulate	unless --no-simulate  is  used.	  If  the  URL
	      refers  to  a playlist, the whole	playlist information is	dumped
	      in a single line

       --force-write-archive
	      Force download archive entries to	be written as far as no	errors
	      occur, even if -s	or another simulation option is	 used  (Alias:
	      --force-download-archive)

       --newline
	      Output progress bar as new lines

       --no-progress
	      Do not print progress bar

       --progress
	      Show progress bar, even if in quiet mode

       --console-title
	      Display progress in console titlebar

       --progress-template [TYPES:]TEMPLATE
	      Template	for  progress outputs, optionally prefixed with	one of
	      "download:" (default), "download-title:"	(the  console  title),
	      "postprocess:", or "postprocess-title:".	The video's fields are
	      accessible  under	the "info" key and the progress	attributes are
	      accessible  under	  "progress"   key.    E.g.    --console-title
	      --progress-template			 "download-title:%(in-
	      fo.id)s-%(progress.eta)s"

       --progress-delta	SECONDS
	      Time between progress output (default: 0)

       -v, --verbose
	      Print various debugging information

       --dump-pages
	      Print downloaded pages encoded using base64  to  debug  problems
	      (very verbose)

       --write-pages
	      Write  downloaded	intermediary pages to files in the current di-
	      rectory to debug problems

       --print-traffic
	      Display sent and read HTTP traffic

   Workarounds:
       --encoding ENCODING
	      Force the	specified encoding (experimental)

       --legacy-server-connect
	      Explicitly allow HTTPS connection	to servers that	do not support
	      RFC 5746 secure renegotiation

       --no-check-certificates
	      Suppress HTTPS certificate validation

       --prefer-insecure
	      Use an unencrypted connection to retrieve	information about  the
	      video (Currently supported only for YouTube)

       --add-headers FIELD:VALUE
	      Specify a	custom HTTP header and its value, separated by a colon
	      ":".  You	can use	this option multiple times

       --bidi-workaround
	      Work around terminals that lack bidirectional text support.  Re-
	      quires bidiv or fribidi executable in PATH

       --sleep-requests	SECONDS
	      Number  of seconds to sleep between requests during data extrac-
	      tion

       --sleep-interval	SECONDS
	      Number of	seconds	to sleep before	each download.	 This  is  the
	      minimum  time to sleep when used along with --max-sleep-interval
	      (Alias: --min-sleep-interval)

       --max-sleep-interval SECONDS
	      Maximum number of	seconds	to sleep.  Can only be used along with
	      --min-sleep-interval

       --sleep-subtitles SECONDS
	      Number of	seconds	to sleep before	each subtitle download

   Video Format	Options:
       -f, --format FORMAT
	      Video format code, see "FORMAT SELECTION"	for more details

       -S, --format-sort SORTORDER
	      Sort the formats by the fields given, see	"Sorting Formats"  for
	      more details

       --format-sort-reset
	      Disregard	 previous  user	 specified sort	order and reset	to the
	      default

       --format-sort-force
	      Force user specified sort	order  to  have	 precedence  over  all
	      fields,  see  "Sorting  Formats"	for  more details (Alias: --S-
	      force)

       --no-format-sort-force
	      Some fields have precedence over the user	specified  sort	 order
	      (default)

       --video-multistreams
	      Allow multiple video streams to be merged	into a single file

       --no-video-multistreams
	      Only  one	 video	stream is downloaded for each output file (de-
	      fault)

       --audio-multistreams
	      Allow multiple audio streams to be merged	into a single file

       --no-audio-multistreams
	      Only one audio stream is downloaded for each  output  file  (de-
	      fault)

       --prefer-free-formats
	      Prefer  video formats with free containers over non-free ones of
	      the same quality.	 Use with "-S ext"  to	strictly  prefer  free
	      containers irrespective of quality

       --no-prefer-free-formats
	      Don't give any special preference	to free	containers (default)

       --check-formats
	      Make sure	formats	are selected only from those that are actually
	      downloadable

       --check-all-formats
	      Check all	formats	for whether they are actually downloadable

       --no-check-formats
	      Do not check that	the formats are	actually downloadable

       -F, --list-formats
	      List available formats of	each video.  Simulate unless --no-sim-
	      ulate is used

       --merge-output-format FORMAT
	      Containers  that	may be used when merging formats, separated by
	      "/", e.g.	 "mp4/mkv".  Ignored if	no merge is  required.	 (cur-
	      rently supported:	avi, flv, mkv, mov, mp4, webm)

   Subtitle Options:
       --write-subs
	      Write subtitle file

       --no-write-subs
	      Do not write subtitle file (default)

       --write-auto-subs
	      Write  automatically generated subtitle file (Alias: --write-au-
	      tomatic-subs)

       --no-write-auto-subs
	      Do not write auto-generated subtitles  (default)	(Alias:	 --no-
	      write-automatic-subs)

       --list-subs
	      List  available  subtitles of each video.	 Simulate unless --no-
	      simulate is used

       --sub-format FORMAT
	      Subtitle format; accepts formats preference  separated  by  "/",
	      e.g.  "srt" or "ass/srt/best"

       --sub-langs LANGS
	      Languages	 of  the subtitles to download (can be regex) or "all"
	      separated	by commas, e.g.	 --sub-langs "en.*,ja"	(where	"en.*"
	      is  a  regex  pattern that matches "en" followed by 0 or more of
	      any character).  You can prefix the language code	with a "-"  to
	      exclude  it  from	 the  requested	 languages, e.g.  --sub- langs
	      all,-live_chat.  Use --list-subs for a list  of  available  lan-
	      guage tags

   Authentication Options:
       -u, --username USERNAME
	      Login with this account ID

       -p, --password PASSWORD
	      Account  password.   If this option is left out, yt-dlp will ask
	      interactively

       -2, --twofactor TWOFACTOR
	      Two-factor authentication	code

       -n, --netrc
	      Use .netrc authentication	data

       --netrc-location	PATH
	      Location of .netrc authentication	data; either the path  or  its
	      containing directory.  Defaults to ~/.netrc

       --netrc-cmd NETRC_CMD
	      Command to execute to get	the credentials	for an extractor.

       --video-password	PASSWORD
	      Video-specific password

       --ap-mso	MSO
	      Adobe  Pass  multiple-system  operator (TV provider) identifier,
	      use --ap-list-mso	for a list of available	MSOs

       --ap-username USERNAME
	      Multiple-system operator account login

       --ap-password PASSWORD
	      Multiple-system operator account password.  If  this  option  is
	      left out,	yt-dlp will ask	interactively

       --ap-list-mso
	      List all supported multiple-system operators

       --client-certificate CERTFILE
	      Path  to client certificate file in PEM format.  May include the
	      private key

       --client-certificate-key	KEYFILE
	      Path to private key file for client certificate

       --client-certificate-password PASSWORD
	      Password for client certificate private key, if  encrypted.   If
	      not provided, and	the key	is encrypted, yt-dlp will ask interac-
	      tively

   Post-Processing Options:
       -x, --extract-audio
	      Convert video files to audio-only	files (requires	ffmpeg and ff-
	      probe)

       --audio-format FORMAT
	      Format to	convert	the audio to when -x is	used.  (currently sup-
	      ported: best (default), aac, alac, flac, m4a, mp3, opus, vorbis,
	      wav).   You  can	specify	multiple rules using similar syntax as
	      --remux-video

       --audio-quality QUALITY
	      Specify ffmpeg audio quality to use when	converting  the	 audio
	      with -x.	Insert a value between 0 (best)	and 10 (worst) for VBR
	      or a specific bitrate like 128K (default 5)

       --remux-video FORMAT
	      Remux  the  video	into another container if necessary (currently
	      supported: avi, flv, gif,	mkv, mov, mp4, webm, aac, aiff,	 alac,
	      flac,  m4a,  mka,	 mp3,  ogg, opus, vorbis, wav).	 If the	target
	      container	does not support the video/audio codec,	remuxing  will
	      fail.	 You	 can	 specify    multiple	rules;	  e.g.
	      "aac>m4a/mov>mp4/mkv" will remux aac to m4a, mov to mp4 and any-
	      thing else to mkv

       --recode-video FORMAT
	      Re-encode	the video into another format if necessary.  The  syn-
	      tax and supported	formats	are the	same as	--remux-video

       --postprocessor-args NAME:ARGS
	      Give  these  arguments to	the postprocessors.  Specify the post-
	      processor/executable name	and the	arguments separated by a colon
	      ":" to give the argument	to  the	 specified  postprocessor/exe-
	      cutable.	 Supported  PP are: Merger, ModifyChapters, SplitChap-
	      ters, ExtractAudio, VideoRemuxer,	VideoConvertor,	Metadata,  Em-
	      bedSubtitle,  EmbedThumbnail, SubtitlesConvertor,	ThumbnailsCon-
	      vertor, FixupStretched, FixupM4a,	FixupM3u8, FixupTimestamp  and
	      FixupDuration.   The  supported  executables are:	AtomicParsley,
	      FFmpeg and FFprobe.  You can also	specify	"PP+EXE:ARGS" to  give
	      the  arguments  to the specified executable only when being used
	      by the specified postprocessor.	Additionally,  for  ffmpeg/ff-
	      probe,  "_i"/"_o"	 can be	appended to the	prefix optionally fol-
	      lowed by a number	to pass	the argument before the	specified  in-
	      put/output  file,	 e.g.  --ppa "Merger+ffmpeg_i1:-v quiet".  You
	      can use this option multiple times to give  different  arguments
	      to different postprocessors.  (Alias: --ppa)

       -k, --keep-video
	      Keep the intermediate video file on disk after post-processing

       --no-keep-video
	      Delete  the  intermediate	 video file after post-processing (de-
	      fault)

       --post-overwrites
	      Overwrite	post-processed files (default)

       --no-post-overwrites
	      Do not overwrite post-processed files

       --embed-subs
	      Embed subtitles in the video (only for mp4, webm and mkv videos)

       --no-embed-subs
	      Do not embed subtitles (default)

       --embed-thumbnail
	      Embed thumbnail in the video as cover art

       --no-embed-thumbnail
	      Do not embed thumbnail (default)

       --embed-metadata
	      Embed metadata to	the video file.	 Also embeds chapters/infojson
	      if present unless	 --no-embed-chapters/--no-embed-info-json  are
	      used (Alias: --add-metadata)

       --no-embed-metadata
	      Do not add metadata to file (default) (Alias: --no-add-metadata)

       --embed-chapters
	      Add chapter markers to the video file (Alias: --add-chapters)

       --no-embed-chapters
	      Do not add chapter markers (default) (Alias: --no-add-chapters)

       --embed-info-json
	      Embed the	infojson as an attachment to mkv/mka video files

       --no-embed-info-json
	      Do not embed the infojson	as an attachment to the	video file

       --parse-metadata	[WHEN:]FROM:TO
	      Parse  additional	 metadata like title/artist from other fields;
	      see "MODIFYING  METADATA"	 for  details.	 Supported  values  of
	      "WHEN"  are  the	same  as that of --use-postprocessor (default:
	      pre_process)

       --replace-in-metadata [WHEN:]FIELDS REGEX REPLACE
	      Replace text in a	metadata field using the  given	 regex.	  This
	      option  can  be used multiple times.  Supported values of	"WHEN"
	      are  the	same  as   that	  of   --use-postprocessor   (default:
	      pre_process)

       --xattrs
	      Write metadata to	the video file's xattrs	(using Dublin Core and
	      XDG standards)

       --concat-playlist POLICY
	      Concatenate  videos in a playlist.  One of "never", "always", or
	      "multi_video" (default; only  when  the  videos  form  a	single
	      show).  All the video files must have the	same codecs and	number
	      of  streams  to  be concatenable.	 The "pl_video:" prefix	can be
	      used with	"--paths" and "--output" to set	 the  output  filename
	      for the concatenated files.  See "OUTPUT TEMPLATE" for details

       --fixup POLICY
	      Automatically  correct  known  faults of the file.  One of never
	      (do nothing), warn (only emit a  warning),  detect_or_warn  (the
	      default;	fix  the  file	if we can, warn	otherwise), force (try
	      fixing even if the file already exists)

       --ffmpeg-location PATH
	      Location of the ffmpeg binary; either the	path to	the binary  or
	      its containing directory

       --exec [WHEN:]CMD
	      Execute  a command, optionally prefixed with when	to execute it,
	      separated	by a ":".  Supported values of "WHEN" are the same  as
	      that  of	--use-postprocessor  (default:	after_move).  The same
	      syntax as	the output template can	be used	to pass	any  field  as
	      arguments	  to   the   command.	 If   no  fields  are  passed,
	      %(filepath,_filename|)q is appended to the end of	 the  command.
	      This option can be used multiple times

       --no-exec
	      Remove any previously defined --exec

       --convert-subs FORMAT
	      Convert  the  subtitles  to another format (currently supported:
	      ass, lrc,	srt, vtt).  Use	"--convert-subs	none" to disable  con-
	      version (default)	(Alias:	--convert- subtitles)

       --convert-thumbnails FORMAT
	      Convert  the  thumbnails to another format (currently supported:
	      jpg, png,	webp).	You can	specify	multiple rules	using  similar
	      syntax  as "--remux-video".  Use "--convert- thumbnails none" to
	      disable conversion (default)

       --split-chapters
	      Split video into multiple	files based on internal	chapters.  The
	      "chapter:" prefix	can be used with "--paths" and	"--output"  to
	      set  the	output filename	for the	split files.  See "OUTPUT TEM-
	      PLATE" for details

       --no-split-chapters
	      Do not split video based on chapters (default)

       --remove-chapters REGEX
	      Remove chapters whose title matches the  given  regular  expres-
	      sion.   The syntax is the	same as	--download-sections.  This op-
	      tion can be used multiple	times

       --no-remove-chapters
	      Do not remove any	chapters from the file (default)

       --force-keyframes-at-cuts
	      Force keyframes at cuts when downloading/splitting/removing sec-
	      tions.  This is slow due to needing a re-encode, but the result-
	      ing video	may have fewer artifacts around	the cuts

       --no-force-keyframes-at-cuts
	      Do not force keyframes around the	chapters  when	cutting/split-
	      ting (default)

       --use-postprocessor NAME[:ARGS]
	      The  (case-sensitive)  name  of  plugin postprocessors to	be en-
	      abled, and (optionally) arguments	to be passed to	it,  separated
	      by  a  colon  ":".   ARGS	 are a semicolon ";" delimited list of
	      NAME=VALUE.  The "when" argument determines when the postproces-
	      sor is invoked.  It can be one of	"pre_process" (after video ex-
	      traction), "after_filter"	(after video passes  filter),  "video"
	      (after  --format;	 before	--print/--output), "before_dl" (before
	      each video download), "post_process" (after each video download;
	      default),	"after_move" (after moving the video file to its final
	      location), "after_video" (after downloading and  processing  all
	      formats  of  a video), or	"playlist" (at end of playlist).  This
	      option can be used multiple times	to add	different  postproces-
	      sors

   SponsorBlock	Options:
       Make  chapter  entries for, or remove various segments (sponsor,	intro-
       ductions, etc.)	from downloaded	YouTube	videos using the  SponsorBlock
       API (https://sponsor.ajay.app)

       --sponsorblock-mark CATS
	      SponsorBlock  categories	to  create  chapters for, separated by
	      commas.  Available categories are	sponsor, intro,	 outro,	 self-
	      promo,   preview,	 filler,  interaction,	music_offtopic,	 hook,
	      poi_highlight, chapter, all and default (=all).  You can	prefix
	      the category with	a "-" to exclude it.  See [1] for descriptions
	      of  the  categories.  E.g.  --sponsorblock-mark all,-preview [1]
	      https://wiki.sponsor.ajay.app/w/Segment_Categories

       --sponsorblock-remove CATS
	      SponsorBlock categories to be removed from the video file, sepa-
	      rated by commas.	If a category is present in both mark and  re-
	      move,  remove  takes precedence.	The syntax and available cate-
	      gories are the same as for --sponsorblock-mark except that  "de-
	      fault"  refers  to  "all,-filler"	and poi_highlight, chapter are
	      not available

       --sponsorblock-chapter-title TEMPLATE
	      An output	template for the title of  the	SponsorBlock  chapters
	      created  by  --sponsorblock-mark.	 The only available fields are
	      start_time,  end_time,  category,	 categories,   name,   catego-
	      ry_names.	 Defaults to "[SponsorBlock]: %(category_names)l"

       --no-sponsorblock
	      Disable both --sponsorblock-mark and --sponsorblock-remove

       --sponsorblock-api URL
	      SponsorBlock API location, defaults to https://sponsor.ajay.app

   Extractor Options:
       --extractor-retries RETRIES
	      Number  of retries for known extractor errors (default is	3), or
	      "infinite"

       --allow-dynamic-mpd
	      Process dynamic DASH manifests (default) (Alias: --no-ignore-dy-
	      namic-mpd)

       --ignore-dynamic-mpd
	      Do not process dynamic DASH manifests (Alias:  --no-allow-dynam-
	      ic-mpd)

       --hls-split-discontinuity
	      Split HLS	playlists to different formats at discontinuities such
	      as ad breaks

       --no-hls-split-discontinuity
	      Do not split HLS playlists into different	formats	at discontinu-
	      ities such as ad breaks (default)

       --extractor-args	IE_KEY:ARGS
	      Pass ARGS	arguments to the IE_KEY	extractor.  See	"EXTRACTOR AR-
	      GUMENTS" for details.  You can use this option multiple times to
	      give arguments for different extractors

   Preset Aliases:
       Predefined  aliases  for	convenience and	ease of	use.  Note that	future
       versions	of yt-dlp may add or adjust presets, but the  existing	preset
       names will not be changed or removed

       -t mp3 -f 'ba[acodec^=mp3]/ba/b'	-x --audio-format mp3

       -t aac -f 'ba[acodec^=aac]/ba[acodec^=mp4a.40.]/ba/b' -x	--audio-format
	      aac

       -t mp4 --merge-output-format	 mp4	  --remux-video	    mp4	    -S
	      vcodec:h264,lang,quality,res,fps,hdr:12,a	codec:aac

       -t mkv --merge-output-format mkv	--remux-video mkv

       -t sleep
	      --sleep-subtitles	5 --sleep-requests  0.75  --sleep-interval  10
	      --max-sleep-interval 20

CONFIGURATION
       You  can	 configure yt-dlp by placing any supported command line	option
       in a configuration file.	 The configuration is loaded from the  follow-
       ing locations:

       1. Main Configuration:

	    The file given to --config-locations

       2. Portable Configuration: (Recommended for portable installations)

	    If	using a	binary,	yt-dlp.conf in the same	directory as the bina-
	     ry

	    If	 running from source-code, yt-dlp.conf in the parent directory
	     of	yt_dlp

       3. Home Configuration:

	    yt-dlp.conf in the	home path given	to -P

	    If	-P is not given, the current directory is searched

       4. User Configuration:

	    ${XDG_CONFIG_HOME}/yt-dlp.conf

	    ${XDG_CONFIG_HOME}/yt-dlp/config (recommended on Linux/macOS)

	    ${XDG_CONFIG_HOME}/yt-dlp/config.txt

	    ${APPDATA}/yt-dlp.conf

	    ${APPDATA}/yt-dlp/config (recommended on Windows)

	    ${APPDATA}/yt-dlp/config.txt

	    ~/yt-dlp.conf

	    ~/yt-dlp.conf.txt

	    ~/.yt-dlp/config

	    ~/.yt-dlp/config.txt See also: Notes about	environment variables

       5. System Configuration:

	    /etc/yt-dlp.conf

	    /etc/yt-dlp/config

	    /etc/yt-dlp/config.txt

       E.g.  with the following	configuration file, yt-dlp will	always extract
       the audio, copy the mtime, use  a  proxy	 and  save  all	 videos	 under
       YouTube directory in your home directory:

	      #	Lines starting with # are comments

	      #	Always extract audio
	      -x

	      #	Copy the mtime
	      --mtime

	      #	Use this proxy
	      --proxy 127.0.0.1:3128

	      #	Save all videos	under YouTube directory	in your	home directory
	      -o ~/YouTube/%(title)s.%(ext)s

       Note:  Options  in  a  configuration file are just the same options aka
       switches	used in	regular	command	line calls;  thus  there  must	be  no
       whitespace  after - or --, e.g.	-o or --proxy but not -	o or --	proxy.
       They must also be quoted	when necessary,	as if it were a	UNIX shell.

       You can use --ignore-config if you want to  disable  all	 configuration
       files  for a particular yt-dlp run.  If --ignore-config is found	inside
       any configuration file, no further configuration	will be	 loaded.   For
       example,	 having	the option in the portable configuration file prevents
       loading of home,	user, and system configurations.   Additionally,  (for
       backward	 compatibility)	 if --ignore-config is found inside the	system
       configuration file, the user configuration is not loaded.

   Configuration file encoding
       The configuration files	are  decoded  according	 to  the  UTF  BOM  if
       present,	and in the encoding from system	locale otherwise.

       If you want your	file to	be decoded differently,	add # coding: ENCODING
       to  the	beginning of the file (e.g.  # coding: shift-jis).  There must
       be no characters	before that, even spaces or BOM.

   Authentication with netrc
       You may also want to configure automatic	credentials  storage  for  ex-
       tractors	 that  support authentication (by providing login and password
       with --username and --password) in order	not  to	 pass  credentials  as
       command	line  arguments	on every yt-dlp	execution and prevent tracking
       plain text passwords in the shell command  history.   You  can  achieve
       this  using  a .netrc file (https://stackoverflow.com/tags/.netrc/info)
       on a per-extractor basis.  For that, you	will need to create  a	.netrc
       file in --netrc-location	and restrict permissions to read/write by only
       you:

	      touch ${HOME}/.netrc
	      chmod a-rwx,u+rw ${HOME}/.netrc

       After  that,  you can add credentials for an extractor in the following
       format, where extractor is the name of the extractor in lowercase:

	      machine <extractor> login	<username> password <password>

       E.g.

	      machine youtube login myaccount@gmail.com	password my_youtube_password
	      machine twitch login my_twitch_account_name password my_twitch_password

       To activate authentication with the .netrc file you should pass --netrc
       to yt-dlp or place it in	the configuration file.

       The default location of the .netrc file is ~ (see below).

       As an alternative to using the .netrc file, which has the  disadvantage
       of  keeping  your  passwords  in	a plain	text file, you can configure a
       custom shell command to provide the credentials for an extractor.  This
       is done by providing the	--netrc-cmd parameter,	it  shall  output  the
       credentials  in	the netrc format and return 0 on success, other	values
       will be treated as an error.  {}	in the command will be replaced	by the
       name of the extractor to	make it	possible to select the credentials for
       the right extractor.

       E.g.  To	use an encrypted .netrc	file stored as .authinfo.gpg

	      yt-dlp --netrc-cmd 'gpg --decrypt	~/.authinfo.gpg' 'https://www.youtube.com/watch?v=BaW_jenozKc'

   Notes about environment variables
        Environment variables are normally specified as ${VARIABLE}/$VARIABLE
	 on UNIX and %VARIABLE%	on Windows; but	is always shown	as ${VARIABLE}
	 in this documentation

        yt-dlp	also allows using UNIX-style variables on  Windows  for	 path-
	 like options; e.g.  --output, --config-locations

        If    unset,	 ${XDG_CONFIG_HOME}    defaults	  to   ~/.config   and
	 ${XDG_CACHE_HOME} to ~/.cache

        On Windows, ~ points to ${HOME} if  present;  or,  ${USERPROFILE}  or
	 ${HOMEDRIVE}${HOMEPATH} otherwise

        On  Windows,  ${USERPROFILE} generally	points to C:\Users\<user name>
	 and ${APPDATA}	to ${USERPROFILE}\AppData\Roaming

OUTPUT TEMPLATE
       The -o option is	used to	indicate a template for	the output file	 names
       while -P	option is used to specify the path each	type of	file should be
       saved to.

       The  simplest  usage  of	 -o  is	not to set any template	arguments when
       downloading  a  single  file,  like  in	 yt-dlp	  -o   funny_video.flv
       "https://some/video"  (hard-coding file extension like this is not rec-
       ommended	and could break	some post-processing).

       It may however also contain special sequences  that  will  be  replaced
       when  downloading  each	video.	The special sequences may be formatted
       according     to	    Python	string	    formatting	    operations
       (https://docs.python.org/3/library/stdtypes.html#printf-style-string-
       formatting),  e.g.  %(NAME)s or %(NAME)05d.  To clarify,	that is	a per-
       cent symbol followed by a name in parentheses, followed	by  formatting
       operations.

       The  field  names themselves (the part inside the parenthesis) can also
       have some special formatting:

       1. Object traversal: The	dictionaries and lists available  in  metadata
	  can  be  traversed  by  using	 a  dot	. separator; e.g.  %(tags.0)s,
	  %(subtitles.en.-1.ext)s.  You	can do Python slicing  with  colon  :;
	  E.g.	 %(id.3:7)s,  %(id.6:2:-1)s,  %(formats.:.format_id)s.	 Curly
	  braces {} can	be used	to build dictionaries with only	specific keys;
	  e.g.	%(formats.:.{format_id,height})#j.  An empty field  name  %()s
	  refers to the	entire infodict; e.g.  %(.{id,title})s.	 Note that all
	  the  fields  that  become available using this method	are not	listed
	  below.  Use -j to see	such fields

       2. Arithmetic: Simple arithmetic	can be done on numeric fields using +,
	  - and	*.  E.g.  %(playlist_index+10)03d,  %(n_entries+1-playlist_in-
	  dex)d

       3. Date/time Formatting:	Date/time fields can be	formatted according to
	  strftime     formatting     (https://docs.python.org/3/library/date-
	  time.html#strftime-and-strptime-format-codes)	by specifying it sepa-
	  rated	from the field name using a >.	 E.g.	%(duration>%H-%M-%S)s,
	  %(upload_date>%Y-%m-%d)s, %(epoch-3600>%H-%M-%S)s

       4. Alternatives:	 Alternate fields can be specified separated with a ,.
	  E.g.	%(release_date>%Y,upload_date>%Y|Unknown)s

       5. Replacement: A replacement value can be specified using a &  separa-
	  tor	   according	  to	  the	  str.format	 mini-language
	  (https://docs.python.org/3/library/string.html#format-specification-
	  mini-language).  If the field	is not empty, this  replacement	 value
	  will	be used	instead	of the actual field content.  This is done af-
	  ter alternate	fields are considered; thus the	replacement is used if
	  any of the alternative fields	is not	empty.	 E.g.	%(chapters&has
	  chapters|no chapters)s, %(title&TITLE={:>20}|NO TITLE)s

       6. Default: A literal default value can be specified for	when the field
	  is empty using a | separator.	 This overrides	--output-na-placehold-
	  er.  E.g.  %(uploader|Unknown)s

       7. More	Conversions: In	addition to the	normal format types diouxXeEf-
	  FgGcrs, yt-dlp additionally supports converting to B =  Bytes,  j  =
	  json (flag # for pretty-printing, + for Unicode), h =	HTML escaping,
	  l  = a comma-separated list (flag # for \n newline-separated), q = a
	  string quoted	for the	terminal (flag # to split a list into  differ-
	  ent  arguments), D = add Decimal suffixes (e.g.  10M)	(flag #	to use
	  1024 as factor), and S = Sanitize as filename	(flag #	for  restrict-
	  ed)

       8. Unicode normalization: The format type U can be used for NFC Unicode
	  normalization		 (https://docs.python.org/3/library/unicodeda-
	  ta.html#unicodedata.normalize).  The alternate form flag (#) changes
	  the normalization to NFD and the conversion flag + can be  used  for
	  NFKC/NFKD  compatibility  equivalence	 normalization.	  E.g.	 %(ti-
	  tle)+.100U is	NFKC

       To summarize, the general syntax	for a field is:

	      %(name[.keys][addition][>strf][,alternate][&replacement][|default])[flags][width][.precision][length]type

       Additionally, you can set different output templates  for  the  various
       metadata	 files separately from the general output template by specify-
       ing the type of file followed by	the template separated by a  colon  :.
       The  different  file  types supported are subtitle, thumbnail, descrip-
       tion, annotation	(deprecated),  infojson,  link,	 pl_thumbnail,	pl_de-
       scription,   pl_infojson,   chapter,   pl_video.	   E.g.	   -o	"%(ti-
       tle)s.%(ext)s" -o "thumbnail:%(title)s\%(title)s.%(ext)s" will put  the
       thumbnails  in a	folder with the	same name as the video.	 If any	of the
       templates is empty, that	type  of  file	will  not  be  written.	  E.g.
       --write-thumbnail  -o  "thumbnail:"  will  write	 thumbnails  only  for
       playlists and not for video.

       Note: Due to post-processing (i.e.  merging etc.),  the	actual	output
       filename	might differ.  Use --print after_move:filepath to get the name
       after all post-processing is complete.

       The available fields are:

        id (string): Video identifier

        title (string): Video title

        fulltitle  (string):  Video title ignoring live timestamp and generic
	 title

        ext (string): Video filename extension

        alt_title (string): A secondary title of the video

        description (string): The description of the video

        display_id (string): An alternative identifier	for the	video

        uploader (string): Full name of the video uploader

        uploader_id (string): Nickname	or id of the video uploader

        uploader_url (string):	URL to the video uploader's profile

        license (string): License name	the video is licensed under

        creators (list): The creators of the video

        creator (string): The creators	of the video; comma-separated

        timestamp (numeric): UNIX timestamp of	the moment  the	 video	became
	 available

        upload_date (string): Video upload date in UTC	(YYYYMMDD)

        release_timestamp  (numeric):	UNIX timestamp of the moment the video
	 was released

        release_date (string):	The date (YYYYMMDD) when  the  video  was  re-
	 leased	in UTC

        release_year  (numeric):  Year	(YYYY) when the	video or album was re-
	 leased

        modified_timestamp (numeric): UNIX timestamp of the moment the	 video
	 was last modified

        modified_date	(string):  The date (YYYYMMDD) when the	video was last
	 modified in UTC

        channel (string): Full	name of	the channel the	video is uploaded on

        channel_id (string): Id of the	channel

        channel_url (string): URL of the channel

        channel_follower_count	(numeric): Number of followers of the channel

        channel_is_verified (boolean):	Whether	the channel is verified	on the
	 platform

        location (string): Physical location where the	video was filmed

        duration (numeric): Length of the video in seconds

        duration_string (string): Length of the video (HH:mm:ss)

        view_count (numeric): How many	users have watched the	video  on  the
	 platform

        concurrent_view_count	(numeric): How many users are currently	watch-
	 ing the video on the platform.

        like_count (numeric): Number of positive ratings of the video

        dislike_count (numeric): Number of negative ratings of	the video

        repost_count (numeric): Number	of reposts of the video

        average_rating	(numeric): Average rating given	by  users,  the	 scale
	 used depends on the webpage

        comment_count	(numeric):  Number  of comments	on the video (For some
	 extractors, comments are only downloaded at  the  end,	 and  so  this
	 field cannot be used)

        save_count  (numeric):	 Number	 of  times the video has been saved or
	 bookmarked

        age_limit (numeric): Age restriction for the video (years)

        live_status (string): One of  "not_live",  "is_live",	"is_upcoming",
	 "was_live", "post_live" (was live, but	VOD is not yet processed)

        is_live  (boolean):  Whether  this video is a live stream or a	fixed-
	 length	video

        was_live (boolean): Whether this video	was originally a live stream

        playable_in_embed (string): Whether this video	is allowed to play  in
	 embedded players on other sites

        availability  (string):  Whether the video is "private", "premium_on-
	 ly", "subscriber_only", "needs_auth", "unlisted" or "public"

        media_type (string): The type of media	as  classified	by  the	 site,
	 e.g.  "episode", "clip", "trailer"

        start_time  (numeric):	 Time in seconds where the reproduction	should
	 start,	as specified in	the URL

        end_time (numeric): Time in seconds  where  the  reproduction	should
	 end, as specified in the URL

        extractor (string): Name of the extractor

        extractor_key (string): Key name of the extractor

        epoch	(numeric):  Unix  epoch	of when	the information	extraction was
	 completed

        autonumber (numeric): Number that will	be increased with  each	 down-
	 load,	starting at --autonumber-start,	padded with leading zeros to 5
	 digits

        video_autonumber (numeric): Number that will be increased  with  each
	 video

        n_entries (numeric): Total number of extracted	items in the playlist

        playlist_id  (string):	 Identifier  of	the playlist that contains the
	 video

        playlist_title	(string): Name of the playlist that contains the video

        playlist (string): playlist_title if available	or else	playlist_id

        playlist_count	(numeric): Total number	of items in the	playlist.  May
	 not be	known if entire	playlist is not	extracted

        playlist_index	(numeric): Index of the	video in the  playlist	padded
	 with leading zeros according the final	index

        playlist_autonumber  (numeric): Position of the video in the playlist
	 download queue	padded with  leading  zeros  according	to  the	 total
	 length	of the playlist

        playlist_uploader (string): Full name of the playlist uploader

        playlist_uploader_id  (string):  Nickname  or	id of the playlist up-
	 loader

        playlist_channel (string): Display name of the	channel	that  uploaded
	 the playlist

        playlist_channel_id (string): Identifier of the channel that uploaded
	 the playlist

        playlist_webpage_url (string):	URL of the playlist webpage

        webpage_url  (string):	 A URL to the video webpage which, if given to
	 yt-dlp, should	yield the same result again

        webpage_url_basename (string):	The basename of	the webpage URL

        webpage_url_domain (string): The domain of the	webpage	URL

        original_url (string):	The URL	given by the user (or the same as web-
	 page_url for playlist entries)

        categories (list): List of categories the video belongs to

        tags (list): List of tags assigned to the video

        cast (list): List of cast members

       All the fields in Filtering Formats can also be used

       Available for the video that belongs to some logical  chapter  or  sec-
       tion:

        chapter (string): Name	or title of the	chapter	the video belongs to

        chapter_number	(numeric): Number of the chapter the video belongs to

        chapter_id (string): Id of the	chapter	the video belongs to

       Available for the video that is an episode of some series or program:

        series	(string): Title	of the series or program the video episode be-
	 longs to

        series_id (string): Id	of the series or program the video episode be-
	 longs to

        season	(string): Title	of the season the video	episode	belongs	to

        season_number	(numeric):  Number of the season the video episode be-
	 longs to

        season_id (string): Id	of the season the video	episode	belongs	to

        episode (string): Title of the	video episode

        episode_number	(numeric): Number of the video episode within a	season

        episode_id (string): Id of the	video episode

       Available for the media that is a track or a part of a music album:

        track (string): Title of the track

        track_number (numeric): Number	of the track within an album or	a disc

        track_id (string): Id of the track

        artists (list): Artist(s) of the track

        artist	(string): Artist(s) of the track; comma-separated

        genres	(list):	Genre(s) of the	track

        genre (string): Genre(s) of the track;	comma-separated

        composers (list): Composer(s) of the piece

        composer (string): Composer(s)	of the piece; comma-separated

        album (string): Title of the album the	track belongs to

        album_type (string): Type of the album

        album_artists (list): All artists appeared on the album

        album_artist (string):	All artists appeared on	the album; comma-sepa-
	 rated

        disc_number (numeric):	Number of the disc or  other  physical	medium
	 the track belongs to

       Available  only	when using --download-sections and for chapter:	prefix
       when using --split-chapters for videos with internal chapters:

        section_title (string): Title of the chapter

        section_number	(numeric): Number of the chapter within	the file

        section_start (numeric): Start	time of	the chapter in seconds

        section_end (numeric):	End time of the	chapter	in seconds

       Available only when used	in --print:

        urls (string):	The URLs of all	requested formats, one in each line

        filename (string): Name of the	video  file.   Note  that  the	actual
	 filename may differ

        formats_table	(table):  The video format table as printed by --list-
	 formats

        thumbnails_table (table): The thumbnail format	table  as  printed  by
	 --list-thumbnails

        subtitles_table  (table):  The	 subtitle  format  table as printed by
	 --list-subs

        automatic_captions_table (table): The automatic subtitle format table
	 as printed by --list-subs

       Available only after the	video is downloaded (post_process/after_move):

        filepath: Actual path of downloaded video file

       Available only in --sponsorblock-chapter-title:

        start_time (numeric): Start time of the chapter in seconds

        end_time (numeric): End time of the chapter in	seconds

        categories (list): The	 SponsorBlock  categories  (https://wiki.spon-
	 sor.ajay.app/w/Types#Category)	the chapter belongs to

        category (string): The	smallest SponsorBlock category the chapter be-
	 longs to

        category_names	(list):	Friendly names of the categories

        name (string):	Friendly name of the smallest category

        type  (string):  The  SponsorBlock  action  type  (https://wiki.spon-
	 sor.ajay.app/w/Types#Action_Type) of the chapter

       Each aforementioned sequence when referenced in an output template will
       be replaced by the actual value corresponding  to  the  sequence	 name.
       E.g.   for  -o %(title)s-%(id)s.%(ext)s and an mp4 video	with title yt-
       dlp test	video and id BaW_jenozKc, this will result in  a  yt-dlp  test
       video-BaW_jenozKc.mp4 file created in the current directory.

       Note:  Some  of	the  sequences are not guaranteed to be	present, since
       they depend on the metadata obtained by a particular  extractor.	  Such
       sequences  will be replaced with	placeholder value provided with	--out-
       put-na-placeholder (NA by default).

       Tip: Look at the	-j output to identify which fields are	available  for
       the particular URL

       For   numeric   sequences,  you	can  use  numeric  related  formatting
       (https://docs.python.org/3/library/stdtypes.html#printf-style-string-
       formatting); e.g.  %(view_count)05d will	result in a string  with  view
       count padded with zeros up to 5 characters, like	in 00042.

       Output templates	can also contain arbitrary hierarchical	path, e.g.  -o
       "%(playlist)s/%(playlist_index)s	- %(title)s.%(ext)s" which will	result
       in  downloading	each  video  in	a directory corresponding to this path
       template.  Any missing directory	will be	automatically created for you.

       To use percent literals in an output template use  %%.	To  output  to
       stdout use -o -.

       The current default template is %(title)s [%(id)s].%(ext)s.

       In  some	 cases,	you don't want special characters such as , spaces, or
       &, such as when transferring the	downloaded filename to a Windows  sys-
       tem  or	the  filename through an 8bit-unsafe channel.  In these	cases,
       add the --restrict-filenames flag to get	a shorter title.

   Output template examples
	      $	yt-dlp --print filename	-o "test video.%(ext)s"	BaW_jenozKc
	      test video.webm	 # Literal name	with correct extension

	      $	yt-dlp --print filename	-o "%(title)s.%(ext)s" BaW_jenozKc
	      youtube-dl test video ''_.webm	# All kinds of weird characters

	      $	yt-dlp --print filename	-o "%(title)s.%(ext)s" BaW_jenozKc --restrict-filenames
	      youtube-dl_test_video_.webm    # Restricted file name

	      #	Download YouTube playlist videos in separate directory indexed by video	order in a playlist
	      $	yt-dlp -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s"	"https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

	      #	Download YouTube playlist videos in separate directories according to their uploaded year
	      $	yt-dlp -o "%(upload_date>%Y)s/%(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

	      #	Prefix playlist	index with " - " separator, but	only if	it is available
	      $	yt-dlp -o "%(playlist_index&{} - |)s%(title)s.%(ext)s" BaW_jenozKc "https://www.youtube.com/user/TheLinuxFoundation/playlists"

	      #	Download all playlists of YouTube channel/user keeping each playlist in	separate directory:
	      $	yt-dlp -o "%(uploader)s/%(playlist)s/%(playlist_index)s	- %(title)s.%(ext)s" "https://www.youtube.com/user/TheLinuxFoundation/playlists"

	      #	Download Udemy course keeping each chapter in separate directory under MyVideos	directory in your home
	      $	yt-dlp -u user -p password -P "~/MyVideos" -o "%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s"	"https://www.udemy.com/java-tutorial"

	      #	Download entire	series season keeping each series and each season in separate directory	under C:/MyVideos
	      $	yt-dlp -P "C:/MyVideos"	-o "%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s"	"https://videomore.ru/kino_v_detalayah/5_sezon/367617"

	      #	Download video as "C:\MyVideos\uploader\title.ext", subtitles as "C:\MyVideos\subs\uploader\title.ext"
	      #	and put	all temporary files in "C:\MyVideos\tmp"
	      $	yt-dlp -P "C:/MyVideos"	-P "temp:tmp" -P "subtitle:subs" -o "%(uploader)s/%(title)s.%(ext)s" BaW_jenozKc --write-subs

	      #	Download video as "C:\MyVideos\uploader\title.ext" and subtitles as "C:\MyVideos\uploader\subs\title.ext"
	      $	yt-dlp -P "C:/MyVideos"	-o "%(uploader)s/%(title)s.%(ext)s" -o "subtitle:%(uploader)s/subs/%(title)s.%(ext)s" BaW_jenozKc --write-subs

	      #	Stream the video being downloaded to stdout
	      $	yt-dlp -o - BaW_jenozKc

FORMAT SELECTION
       By default, yt-dlp tries	to download the	best available quality if  you
       don't  pass  any	 options.   This  is  generally	equivalent to using -f
       bestvideo*+bestaudio/best.  However, if multiple	 audiostreams  is  en-
       abled   (--audio-multistreams),	 the  default  format  changes	to  -f
       bestvideo+bestaudio/best.  Similarly, if	ffmpeg is unavailable,	or  if
       you  use	 yt-dlp	 to  stream  to	 stdout	(-o -),	the default becomes -f
       best/bestvideo+bestaudio.

       Deprecation warning: Latest versions of yt-dlp can stream multiple for-
       mats to the stdout simultaneously using ffmpeg.	 So,  in  future  ver-
       sions,  the default for this will be set	to -f bv*+ba/b similar to nor-
       mal downloads.  If you want to preserve the -f b/bv+ba setting,	it  is
       recommended to explicitly specify it in the configuration options.

       The  general syntax for format selection	is -f FORMAT (or --format FOR-
       MAT) where FORMAT is a selector expression, i.e.	  an  expression  that
       describes format	or formats you would like to download.

       The simplest case is requesting a specific format; e.g.	with -f	22 you
       can  download the format	with format code equal to 22.  You can get the
       list of available format	codes for particular video  using  --list-for-
       mats or -F.  Note that these format codes are extractor specific.

       You  can	 also use a file extension (currently 3gp, aac,	flv, m4a, mp3,
       mp4, ogg, wav, webm are supported) to download the best quality	format
       of  a  particular file extension	served as a single file, e.g.  -f webm
       will download the best quality format with the webm extension served as
       a single	file.

       You can use -f -	to interactively provide the format selector for  each
       video

       You can also use	special	names to select	particular edge	case formats:

        all: Select all formats separately

        mergeall:  Select  and	 merge all formats (Must be used with --audio-
	 multistreams, --video-multistreams or both)

        b*, best*: Select the best quality  format  that  contains  either  a
	 video or an audio or both (i.e.; vcodec!=none or acodec!=none)

        b,  best: Select the best quality format that contains	both video and
	 audio.	 Equivalent to best*[vcodec!=none][acodec!=none]

        bv, bestvideo:	Select the best	quality	video-only format.  Equivalent
	 to best*[acodec=none]

        bv*, bestvideo*: Select the best quality format that contains	video.
	 It may	also contain audio.  Equivalent	to best*[vcodec!=none]

        ba, bestaudio:	Select the best	quality	audio-only format.  Equivalent
	 to best*[vcodec=none]

        ba*,  bestaudio*: Select the best quality format that contains	audio.
	 It may	also contain video.  Equivalent	to best*[acodec!=none] (Do not
	 use!		(https://github.com/yt-dlp/yt-dlp/issues/979#issuecom-
	 ment-919629354))

        w*,  worst*:  Select  the worst quality format	that contains either a
	 video or an audio

        w, worst: Select the worst quality format that	 contains  both	 video
	 and audio.  Equivalent	to worst*[vcodec!=none][acodec!=none]

        wv,  worstvideo: Select the worst quality video-only format.  Equiva-
	 lent to worst*[acodec=none]

        wv*, worstvideo*: Select  the	worst  quality	format	that  contains
	 video.	    It	  may	 also	 contain    audio.     Equivalent   to
	 worst*[vcodec!=none]

        wa, worstaudio: Select	the worst quality audio-only format.   Equiva-
	 lent to worst*[vcodec=none]

        wa*,  worstaudio*:  Select the	worst quality format that contains au-
	 dio.  It may also contain video.  Equivalent to worst*[acodec!=none]

       For example, to download	the worst quality video-only  format  you  can
       use  -f	worstvideo.   It is, however, recommended not to use worst and
       related options.	 When your format selector is worst, the format	 which
       is worst	in all respects	is selected.  Most of the time,	what you actu-
       ally  want  is  the video with the smallest filesize instead.  So it is
       generally  better  to   use   -S	  +size	  or   more   rigorously,   -S
       +size,+br,+res,+fps  instead of -f worst.  See Sorting Formats for more
       details.

       You can select the n'th best format of a	type by	using  best<type>.<n>.
       For example, best.2 will	select the 2nd best combined format.  Similar-
       ly, bv*.3 will select the 3rd best format that contains a video stream.

       If  you	want to	download multiple videos, and they don't have the same
       formats available, you can specify the order of preference using	slash-
       es.  Note that formats on the left hand side are	 preferred;  e.g.   -f
       22/17/18	 will  download	format 22 if it's available, otherwise it will
       download	format 17 if it's available, otherwise it will download	format
       18 if it's available, otherwise it will complain	that no	suitable  for-
       mats are	available for download.

       If  you	want to	download several formats of the	same video use a comma
       as a separator, e.g.  -f	22,17,18 will download all  these  three  for-
       mats, of	course if they are available.  Or a more sophisticated example
       combined	       with	  the	    precedence	     feature:	    -f
       136/137/mp4/bestvideo,140/m4a/bestaudio.

       You can merge the video and audio of multiple  formats  into  a	single
       file using -f <format1>+<format2>+... (requires ffmpeg installed); e.g.
       -f  bestvideo+bestaudio	will  download the best	video-only format, the
       best audio-only format and mux them together with ffmpeg.

       Deprecation warning: Since the below described behavior is complex  and
       counter-intuitive,  this	 will  be removed and multistreams will	be en-
       abled by	default	in the future.	A new operator will be	instead	 added
       to limit	formats	to single audio/video

       Unless  --video-multistreams  is	 used, all formats with	a video	stream
       except the first	one are	 ignored.   Similarly,	unless	--audio-multi-
       streams	is used, all formats with an audio stream except the first one
       are ignored.  E.g.   -f	bestvideo+best+bestaudio  --video-multistreams
       --audio-multistreams  will download and merge all 3 given formats.  The
       resulting file will have	2 video	streams	and 2 audio streams.   But  -f
       bestvideo+best+bestaudio	  --no-video-multistreams  will	 download  and
       merge only bestvideo and	bestaudio.  best is ignored since another for-
       mat containing a	video stream (bestvideo) has  already  been  selected.
       The  order  of  the  formats is therefore important.  -f	best+bestaudio
       --no-audio-multistreams will download only best while -f	bestaudio+best
       --no-audio-multistreams will ignore best	and download only bestaudio.

   Filtering Formats
       You can also filter the video formats by	putting	a condition in	brack-
       ets,  as	in -f "best[height=720]" (or -f	"[filesize>10M]" since filters
       without a selector are interpreted as best).

       The following numeric meta fields can be	used with comparisons  <,  <=,
       >, >=, =	(equals), != (not equals):

        filesize: The number of bytes,	if known in advance

        filesize_approx: An estimate for the number of	bytes

        width:	Width of the video, if known

        height: Height	of the video, if known

        aspect_ratio: Aspect ratio of the video, if known

        tbr: Average bitrate of audio and video in kbps

        abr: Average audio bitrate in kbps

        vbr: Average video bitrate in kbps

        asr: Audio sampling rate in Hertz

        fps: Frame rate

        audio_channels: The number of audio channels

        stretched_ratio: width:height of the video's pixels, if not square

       Also  filtering	work  for comparisons =	(equals), ^= (starts with), $=
       (ends with), *= (contains), ~= (matches	regex)	and  following	string
       meta fields:

        url: Video URL

        ext: File extension

        acodec: Name of the audio codec in use

        vcodec: Name of the video codec in use

        container: Name of the	container format

        protocol:  The	 protocol  that	 will be used for the actual download,
	 lower-case  (http,  https,  rtsp,  rtmp,  rtmpe,   mms,   f4m,	  ism,
	 http_dash_segments, m3u8, or m3u8_native)

        language: Language code

        dynamic_range:	The dynamic range of the video

        format_id: A short description	of the format

        format: A human-readable description of the format

        format_note: Additional info about the	format

        resolution: Textual description of width and height

       Any  string comparison may be prefixed with negation ! in order to pro-
       duce an opposite	comparison, e.g.  !*= (does not	 contain).   The  com-
       parand  of a string comparison needs to be quoted with either double or
       single quotes if	it contains spaces or special  characters  other  than
       ._-.

       Note:  None  of	the  aforementioned  meta  fields are guaranteed to be
       present since this solely depends on the	metadata obtained by the  par-
       ticular extractor, i.e.	the metadata offered by	the website.  Any oth-
       er  field  made available by the	extractor can also be used for filter-
       ing.

       Formats for which the value is not known	are excluded unless you	put  a
       question	 mark (?) after	the operator.  You can combine format filters,
       so -f "bv[height<=?720][tbr>500]" selects up to 720p videos (or	videos
       where  the  height  is  not known) with a bitrate of at least 500 kbps.
       You can also use	the filters with all to	download all formats that sat-
       isfy the	filter,	e.g.  -f  "all[vcodec=none]"  selects  all  audio-only
       formats.

       Format  selectors  can  also  be	 grouped  using	 parentheses; e.g.  -f
       "(mp4,webm)[height<480]"	will download the best pre-merged mp4 and webm
       formats with a height lower than	480.

   Sorting Formats
       You can change the criteria for being considered	the best by  using  -S
       (--format-sort).	   The	 general  format  for  this  is	 --format-sort
       field1,field2....

       The available fields are:

        hasvid: Gives priority	to formats that	have a video stream

        hasaud: Gives priority	to formats that	have an	audio stream

        ie_pref: The format preference

        lang: The language preference as determined by	 the  extractor	 (e.g.
	 original language preferred over audio	description)

        quality: The quality of the format

        source: The preference	of the source

        proto:	 Protocol  used	for download (https/ftps > http/ftp > m3u8_na-
	 tive/m3u8 > http_dash_segments> websocket_frag	> mms/rtsp > f4f/f4m)

        vcodec: Video Codec (av01 > vp9.2 > vp9 > h265	> h264 > vp8 > h263  >
	 theora	> other)

        acodec:  Audio	 Codec	(flac/alac  > wav/aiff > opus >	vorbis > aac >
	 mp4a >	mp3 > ac4 > eac3 > ac3 > dts > other)

        codec:	Equivalent to vcodec,acodec

        vext: Video Extension (mp4 > mov > webm > flv > other).  If --prefer-
	 free-formats is used, webm is preferred.

        aext: Audio Extension (m4a > aac > mp3	> ogg >	opus > webm >  other).
	 If  --prefer-free-formats  is used, the order changes to ogg >	opus >
	 webm >	mp3 > m4a > aac

        ext: Equivalent to vext,aext

        filesize: Exact filesize, if known in advance

        fs_approx: Approximate	filesize

        size: Exact filesize if available, otherwise approximate filesize

        height: Height	of video

        width:	Width of video

        res: Video resolution,	calculated as the smallest dimension.

        fps: Framerate	of video

        hdr: The dynamic range	of the video (DV > HDR12 > HDR10+  >  HDR10  >
	 HLG > SDR)

        channels: The number of audio channels

        tbr: Total average bitrate in kbps

        vbr: Average video bitrate in kbps

        abr: Average audio bitrate in kbps

        br: Average bitrate in	kbps, tbr/vbr/abr

        asr: Audio sample rate	in Hz

       Deprecation warning: Many of these fields have (currently undocumented)
       aliases,	that may be removed in a future	version.  It is	recommended to
       use only	the documented field names.

       All fields, unless specified otherwise, are sorted in descending	order.
       To  reverse this, prefix	the field with a +.  E.g.  +res	prefers	format
       with the	smallest resolution.  Additionally, you	can suffix a preferred
       value for the fields, separated by a :.	E.g.  res:720  prefers	larger
       videos,	but no larger than 720p	and the	smallest video if there	are no
       videos less than	720p.  For codec and ext, you  can  provide  two  pre-
       ferred  values,	the  first  for	 video and the second for audio.  E.g.
       +codec:avc:m4a (equivalent to +vcodec:avc,+acodec:m4a) sets  the	 video
       codec  preference  to  h264  > h265 > vp9 > vp9.2 > av01	> vp8 >	h263 >
       theora and audio	codec preference to mp4a > aac > vorbis	> opus > mp3 >
       ac3 > dts.  You can also	make the sorting prefer	the nearest values  to
       the  provided  by  using	~ as the delimiter.  E.g.  filesize~1G prefers
       the format with filesize	closest	to 1 GiB.

       The fields hasvid and ie_pref are  always  given	 highest  priority  in
       sorting,	 irrespective of the user-defined order.  This behavior	can be
       changed by using	--format-sort-force.  Apart from  these,  the  default
       order	   used	     is:      lang,quality,res,fps,hdr:12,vcodec,chan-
       nels,acodec,size,br,asr,proto,ext,hasaud,source,id.  The	extractors may
       override	this default order, but	they cannot override the user-provided
       order.

       Note that the default for hdr is	hdr:12;	i.e.  Dolby Vision is not pre-
       ferred.	This choice was	made since DV formats are not yet  fully  com-
       patible with most devices.  This	may be changed in the future.

       If your format selector is worst, the last item is selected after sort-
       ing.   This  means  it  will select the format that is worst in all re-
       spects.	Most of	the time, what you actually want is the	video with the
       smallest	filesize instead.  So it is generally better to	use -f best -S
       +size,+br,+res,+fps.

       If you use the -S/--format-sort option multiple times, each  subsequent
       sorting	argument  will	be prepended to	the previous one, and only the
       highest priority	entry of any duplicated	field will be preserved.  E.g.
       -S proto	-S res is equivalent to	-S res,proto, and  -S  res:720,fps  -S
       vcodec,res:1080	is  equivalent to -S vcodec,res:1080,fps.  You can use
       --format-sort-reset to disregard	any previously passed -S/--format-sort
       arguments and reset to the default order.

       Tip: You	can use	the -v -F to see how  the  formats  have  been	sorted
       (worst to best).

   Format Selection examples
	      #	Download and merge the best video-only format and the best audio-only format,
	      #	or download the	best combined format if	video-only format is not available
	      $	yt-dlp -f "bv+ba/b"

	      #	Download best format that contains video,
	      #	and if it doesn't already have an audio	stream,	merge it with best audio-only format
	      $	yt-dlp -f "bv*+ba/b"

	      #	Same as	above
	      $	yt-dlp

	      #	Download the best video-only format and	the best audio-only format without merging them
	      #	For this case, an output template should be used since
	      #	by default, bestvideo and bestaudio will have the same file name.
	      $	yt-dlp -f "bv,ba" -o "%(title)s.f%(format_id)s.%(ext)s"

	      #	Download and merge the best format that	has a video stream,
	      #	and all	audio-only formats into	one file
	      $	yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams

	      #	Download and merge the best format that	has a video stream,
	      #	and the	best 2 audio-only formats into one file
	      $	yt-dlp -f "bv*+ba+ba.2"	--audio-multistreams

	      #	The following examples show the	old method (without -S)	of format selection
	      #	and how	to use -S to achieve a similar but (generally) better result

	      #	Download the worst video available (old	method)
	      $	yt-dlp -f "wv*+wa/w"

	      #	Download the best video	available but with the smallest	resolution
	      $	yt-dlp -S "+res"

	      #	Download the smallest video available
	      $	yt-dlp -S "+size,+br"

	      #	Download the best mp4 video available, or the best video if no mp4 available
	      $	yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"

	      #	Download the best video	with the best extension
	      #	(For video, mp4	> mov >	webm > flv. For	audio, m4a > aac > mp3 ...)
	      $	yt-dlp -S "ext"

	      #	Download the best video	available but no better	than 480p,
	      #	or the worst video if there is no video	under 480p
	      $	yt-dlp -f "bv*[height<=480]+ba/b[height<=480] /	wv*+ba/w"

	      #	Download the best video	available with the largest height but no better	than 480p,
	      #	or the best video with the smallest resolution if there	is no video under 480p
	      $	yt-dlp -S "height:480"

	      #	Download the best video	available with the largest resolution but no better than 480p,
	      #	or the best video with the smallest resolution if there	is no video under 480p
	      #	Resolution is determined by using the smallest dimension.
	      #	So this	works correctly	for vertical videos as well
	      $	yt-dlp -S "res:480"

	      #	Download the best video	(that also has audio) but no bigger than 50 MB,
	      #	or the worst video (that also has audio) if there is no	video under 50 MB
	      $	yt-dlp -f "b[filesize<50M] / w"

	      #	Download the largest video (that also has audio) but no	bigger than 50 MB,
	      #	or the smallest	video (that also has audio) if there is	no video under 50 MB
	      $	yt-dlp -f "b" -S "filesize:50M"

	      #	Download the best video	(that also has audio) that is closest in size to 50 MB
	      $	yt-dlp -f "b" -S "filesize~50M"

	      #	Download best video available via direct link over HTTP/HTTPS protocol,
	      #	or the best video available via	any protocol if	there is no such video
	      $	yt-dlp -f "(bv*+ba/b)[protocol^=http][protocol!*=dash] / (bv*+ba/b)"

	      #	Download best video available via the best protocol
	      #	(https/ftps > http/ftp > m3u8_native > m3u8 > http_dash_segments ...)
	      $	yt-dlp -S "proto"

	      #	Download the best video	with either h264 or h265 codec,
	      #	or the best video if there is no such video
	      $	yt-dlp -f "(bv*[vcodec~='^((he|a)vc|h26[45])']+ba) / (bv*+ba/b)"

	      #	Download the best video	with best codec	no better than h264,
	      #	or the best video with worst codec if there is no such video
	      $	yt-dlp -S "codec:h264"

	      #	Download the best video	with worst codec no worse than h264,
	      #	or the best video with best codec if there is no such video
	      $	yt-dlp -S "+codec:h264"

	      #	More complex examples

	      #	Download the best video	no better than 720p preferring framerate greater than 30,
	      #	or the worst video (still preferring framerate greater than 30)	if there is no such video
	      $	yt-dlp -f "((bv*[fps>30]/bv*)[height<=720]/(wv*[fps>30]/wv*)) +	ba / (b[fps>30]/b)[height<=720]/(w[fps>30]/w)"

	      #	Download the video with	the largest resolution no better than 720p,
	      #	or the video with the smallest resolution available if there is	no such	video,
	      #	preferring larger framerate for	formats	with the same resolution
	      $	yt-dlp -S "res:720,fps"

	      #	Download the video with	smallest resolution no worse than 480p,
	      #	or the video with the largest resolution available if there is no such video,
	      #	preferring better codec	and then larger	total bitrate for the same resolution
	      $	yt-dlp -S "+res:480,codec,br"

MODIFYING METADATA
       The  metadata  obtained	by  the	 extractors  can  be modified by using
       --parse-metadata	and --replace-in-metadata

       --replace-in-metadata FIELDS REGEX REPLACE is used to replace  text  in
       any     metadata	    field     using    Python	 regular    expression
       (https://docs.python.org/3/library/re.html#regular-expression-syntax).
       Backreferences	      (https://docs.python.org/3/library/re.html?high-
       light=backreferences#re.sub)  can be used in the	replace	string for ad-
       vanced use.

       The general syntax of --parse-metadata FROM:TO is to give the name of a
       field or	an output template to extract data from, and the format	to in-
       terpret it as, separated	by a colon :.  Either a	Python regular expres-
       sion (https://docs.python.org/3/library/re.html#regular-expression-syn-
       tax) with named capture groups, a single	field name, or a similar  syn-
       tax to the output template (only	%(field)s formatting is	supported) can
       be  used	 for  TO.   The	option can be used multiple times to parse and
       modify various fields.

       Note that these options preserve	their  relative	 order,	 allowing  re-
       placements to be	made in	parsed fields and vice versa.  Also, any field
       thus  created  can  be used in the output template and will also	affect
       the media file's	metadata added when using --embed-metadata.

       This option also	has a few special uses:

        You can download an additional	URL based on the metadata of the  cur-
	 rently	 downloaded  video.  To	do this, set the field additional_urls
	 to the	URL that you want to download.	 E.g.	--parse-metadata  "de-
	 scription:(?P<additional_urls>https?://www\.vimeo\.com/\d+)"	  will
	 download the first vimeo video	found in the description

        You can use this to change the	metadata that is embedded in the media
	 file.	To do this, set	the value of the corresponding	field  with  a
	 meta_	prefix.	  For  example,	 any value you set to meta_description
	 field will be added to	the description	field in the file  -  you  can
	 use  this to set a different "description" and	"synopsis".  To	modify
	 the metadata of individual streams, use  the  meta<n>_	 prefix	 (e.g.
	 meta1_language).  Any value set to the	meta_ field will overwrite all
	 default values.

       Note:  Metadata	modification happens before format selection, post-ex-
       traction	and other post-processing  operations.	 Some  fields  may  be
       added or	changed	during these steps, overriding your changes.

       For  reference, these are the fields yt-dlp adds	by default to the file
       metadata:

       Metadata	fields		   From
       --------------------------------------------------------------------------
       title			   track or title
       date			   upload_date
       description, synopsis	   description
       purl, comment		   webpage_url
       track			   track_number
       artist			   artist, artists, creator, creators,	uploader
				   or uploader_id
       composer			   composer or composers
       genre			   genre, genres, categories or	tags
       album			   album or series
       album_artist		   album_artist	or album_artists
       disc			   disc_number
       show			   series
       season_number		   season_number
       episode_id		   episode or episode_id
       episode_sort		   episode_number
       language	of each	stream	   the format's	language

       Note: The file format may not support some of these fields

   Modifying metadata examples
	      #	Interpret the title as "Artist - Title"
	      $	yt-dlp --parse-metadata	"title:%(artist)s - %(title)s"

	      #	Regex example
	      $	yt-dlp --parse-metadata	"description:Artist - (?P<artist>.+)"

	      #	Copy the episode field to the title field (with	FROM and TO as single fields)
	      $	yt-dlp --parse-metadata	"episode:title"

	      #	Set title as "Series name S01E05"
	      $	yt-dlp --parse-metadata	"%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s"

	      #	Prioritize uploader as the "artist" field in video metadata
	      $	yt-dlp --parse-metadata	"%(uploader|)s:%(meta_artist)s"	--embed-metadata

	      #	Set "comment" field in video metadata using description	instead	of webpage_url,
	      #	handling multiple lines	correctly
	      $	yt-dlp --parse-metadata	"description:(?s)(?P<meta_comment>.+)" --embed-metadata

	      #	Do not set any "synopsis" in the video metadata
	      $	yt-dlp --parse-metadata	":(?P<meta_synopsis>)"

	      #	Remove "formats" field from the	infojson by setting it to an empty string
	      $	yt-dlp --parse-metadata	"video::(?P<formats>)" --write-info-json

	      #	Replace	all spaces and "_" in title and	uploader with a	`-`
	      $	yt-dlp --replace-in-metadata "title,uploader" "[ _]" "-"

EXTRACTOR ARGUMENTS
       Some  extractors	 accept	additional arguments which can be passed using
       --extractor-args	KEY:ARGS.  ARGS	is a ; (semicolon) separated string of
       ARG=VAL1,VAL2.	    E.g.       --extractor-args	      "youtube:player-
       client=tv,mweb;formats=incomplete" --extractor-args "twitter:api=syndi-
       cation"

       Note:  In CLI, ARG can use - instead of _; e.g.	youtube:player-client"
       becomes youtube:player_client"

       The following extractors	use this feature:

   youtube
        lang: Prefer translated metadata (title,  description	etc)  of  this
	 language  code	 (case-sensitive).  By default,	the video primary lan-
	 guage metadata	is preferred, with a fallback to en  translated.   See
	 youtube/_base.py			(https://github.com/yt-dlp/yt-
	 dlp/blob/415b4c9f955b1a0391204bd24a7132590e7b3bdb/yt_dlp/extrac-
	 tor/youtube/_base.py#L402-L409) for the  list	of  supported  content
	 language codes

        skip:	One or more of hls, dash or translated_subs to skip extraction
	 of the	m3u8 manifests,	dash manifests and  auto-translated  subtitles
	 (https://github.com/yt-dlp/yt-dlp/issues/4090#issuecom-
	 ment-1158102032) respectively

        player_client:	 Clients  to  extract  video data from.	 The currently
	 available  clients  are  web,	web_safari,  web_embedded,  web_music,
	 web_creator,  mweb,  ios, android, android_vr,	tv, tv_downgraded, and
	 tv_simply.   By  default,  android_vr,web_safari  is  used.   If   no
	 JavaScript runtime/engine is available, then only android_vr is used.
	 If logged-in cookies are passed to yt-dlp, then tv_downgraded,web_sa-
	 fari  is used for free	accounts and tv_downgraded,web_creator is used
	 for  premium  accounts.   The	web_music  client  is  added  for  mu-
	 sic.youtube.com URLs when logged-in cookies are used.	The web_embed-
	 ded  client  is added for age-restricted videos but only successfully
	 works around the age-restriction sometimes (e.g.  if the video	is em-
	 beddable), and	may be added as	a fallback if android_vr is unable  to
	 access	 a  video.  The	web_creator client is added for	age-restricted
	 videos	if account age-verification is required.  Some	clients,  such
	 as web_creator	and web_music, require a po_token for their formats to
	 be  downloadable.   Some clients, such	as web_creator,	will only work
	 with authentication.  Not  all	 clients  support  authentication  via
	 cookies.  You can use default for the default clients,	or you can use
	 all  for all clients (not recommended).  You can prefix a client with
	 - to exclude it, e.g.	youtube:player_client=default,-web_safari

        player_skip: Skip some	network	requests that are generally needed for
	 robust	extraction.  One or more of  configs  (skip  client  configs),
	 webpage  (skip	 initial  webpage),  js	(skip js player), initial_data
	 (skip initial data/next ep request).  While these  options  can  help
	 reduce	 the  number  of  requests needed or avoid some	rate-limiting,
	 they could cause issues such as missing  formats  or  metadata.   See
	 #860	  (https://github.com/yt-dlp/yt-dlp/pull/860)	 and	#12826
	 (https://github.com/yt-dlp/yt-dlp/issues/12826) for more details

        webpage_skip: Skip extraction of embedded webpage data.  One or  both
	 of player_response, initial_data.  These options are for testing pur-
	 poses and don't skip any network requests.  Neither is	skipped	by de-
	 fault;	 however,  if  a  player_js_version value other	than actual is
	 used, then webpage_skip=player_response is implied

        webpage_client: Client	to use for the video webpage request.  One  of
	 web or	web_safari (default)

        player_params:	 YouTube player	parameters to use for player requests.
	 Will overwrite	any default ones set by	yt-dlp.

        player_js_variant: The	player javascript variant to use for n/sig de-
	 ciphering.  The  known	 variants  are:	 main,	tcc,  tce,  es5,  es6,
	 es6_tcc, es6_tce, tv, tv_es6, phone, house.  The default is main, and
	 the others are	for debugging purposes.	 You can use actual to go with
	 what is prescribed by the site

        player_js_version: The	player javascript version to use for n/sig de-
	 ciphering,   in   the	 format	  of   signature_timestamp@hash	 (e.g.
	 20348@0004de42).  The default is to use what  is  prescribed  by  the
	 site,	and  can  be selected with actual.  Using any other value will
	 imply webpage_skip=player_response

        comment_sort: top or new (default) - choose comment sorting mode  (on
	 YouTube's side)

        max_comments: Limit the amount	of comments to gather.	Comma-separat-
	 ed   list   of	 integers  representing	 max-comments,max-parents,max-
	 replies,max-replies-per-thread,max-depth.	    Default	    is
	 all,all,all,all,all

	  A  max-depth	value of 1 will	discard	all replies, regardless	of the
	   max-replies or max-replies-per-thread values	given

	  E.g.	 all,all,1000,10,2 will	get a maximum of 1000  replies	total,
	   with	 up to 10 replies per thread, and only 2 levels	of depth (i.e.
	   top-level comments plus  their  immediate  replies).	  1000,all,100
	   will	 get a maximum of 1000 comments, with a	maximum	of 100 replies
	   total

        formats: Change the types of formats to return.  dashy	(convert  HTTP
	 to  DASH),  duplicate (identical content but different	URLs or	proto-
	 col; includes dashy), incomplete (cannot be downloaded	 completely  -
	 live dash, live adaptive https, and post-live m3u8), missing_pot (in-
	 clude formats that require a PO Token but are missing one)

        innertube_host:  Innertube API	host to	use for	all API	requests; e.g.
	 studio.youtube.com, youtubei.googleapis.com.  Note that  cookies  ex-
	 ported	from one subdomain will	not work on others

        innertube_key:	Innertube API key to use for all API requests.	By de-
	 fault,	no API key is used

        raise_incomplete_data:	 Incomplete  Data Received raises an error in-
	 stead of reporting a warning

        data_sync_id: Overrides the account Data Sync ID  used	 in  Innertube
	 API  requests.	  This	may be needed if you are using an account with
	 youtube:player_skip=webpage,configs or	youtubetab:skip=webpage

        visitor_data: Overrides the Visitor Data used in  Innertube  API  re-
	 quests.   This	 should	 be  used with player_skip=webpage,configs and
	 without cookies.  Note: this may have adverse effects if used improp-
	 erly.	If a session from a browser is wanted, you should pass cookies
	 instead (which	contain	the Visitor ID)

        po_token: Proof of Origin (PO)	Token(s) to use.  Comma-separated list
	 of  PO	  Tokens   in	the   format   CLIENT.CONTEXT+PO_TOKEN,	  e.g.
	 youtube:po_token=web.gvs+XXX,web.player=XXX,web_safari.gvs+YYY.  Con-
	 text  can be any of gvs (Google Video Server URLs), player (Innertube
	 player	request) or subs (Subtitles)

        pot_trace: Enable debug logging for PO	Token fetching.	  Either  true
	 or false (default)

        fetch_pot: Policy to use for fetching a PO Token from providers.  One
	 of  always  (always try fetch a PO Token regardless if	the client re-
	 quires	one for	the given context), never (never fetch a PO Token), or
	 auto (default;	only fetch a PO	Token if the client requires  one  for
	 the given context)

        jsc_trace:  Enable  debug  logging for	JS Challenge fetching.	Either
	 true or false (default)

        use_ad_playback_context: Skip preroll ads to eliminate	the  mandatory
	 wait  period  before  download.  Do NOT use this when passing premium
	 account cookies to yt-dlp, as it will result in  a  loss  of  premium
	 formats.   Only effective with	the mweb and web_music player clients.
	 Either	true or	false (default)

   youtube-ejs
        jitless: Run supported	Javascript engines in JIT-less mode.  Support-
	 ed runtimes are deno, node and	bun.  Provides better security at  the
	 cost  of performance/speed.  Do note that node	and bun	are still con-
	 sidered insecure.  Either true	or false (default)

   youtubepot-webpo
        bind_to_visitor_id: Whether to	use the	Visitor	ID instead of  Visitor
	 Data for caching WebPO	tokens.	 Either	true (default) or false

   youtubetab (YouTube playlists, channels, feeds, etc.)
        skip:	One  or	 more  of webpage (skip	initial	webpage	download), au-
	 thcheck (allow	the download  of  playlists  requiring	authentication
	 when  no  initial webpage is downloaded.  This	may cause unwanted be-
	 havior, see  #1122  (https://github.com/yt-dlp/yt-dlp/pull/1122)  for
	 more details)

        approximate_date:  Extract  approximate  upload_date and timestamp in
	 flat-playlist.	 This may cause	date-based filters to be slightly off

   generic
        fragment_query: Passthrough any query in mpd/m3u8  manifest  URLs  to
	 their	fragments  if  no  value  is provided, or else apply the query
	 string	given as fragment_query=VALUE.	Note that if the stream	has an
	 HLS AES-128 key, then the query parameters will be passed to the  key
	 URI  as well, unless the key_query extractor-arg is passed, or	unless
	 an external key URI is	provided via the hls_key extractor-arg.	  Does
	 not apply to ffmpeg

        variant_query:	 Passthrough  the master m3u8 URL query	to its variant
	 playlist URLs if no value is provided,	or else	apply the query	string
	 given as variant_query=VALUE

        key_query: Passthrough	the master m3u8	URL query to its  HLS  AES-128
	 decryption  key  URI if no value is provided, or else apply the query
	 string	given as key_query=VALUE.  Note	that this will have no	effect
	 if  the  key URI is provided via the hls_key extractor-arg.  Does not
	 apply to ffmpeg

        hls_key: An HLS AES-128 key URI or key	(as hex), and  optionally  the
	 IV   (as   hex),   in	 the  form  of	(URI|KEY)[,IV];	 e.g.	gener-
	 ic:hls_key=ABCDEF1234567980,0xFEDCBA0987654321.  Passing any of these
	 values	will force usage of the	native HLS downloader and override the
	 corresponding values found in the m3u8	playlist

        is_live: Bypass live HLS detection and	manually set live_status  -  a
	 value	of false will set not_live, any	other value (or	no value) will
	 set is_live

        impersonate: Target(s)	to try and impersonate with the	 initial  web-
	 page	request;   e.g.	  generic:impersonate=safari,chrome-110.   Use
	 generic:impersonate to	impersonate  any  available  target,  and  use
	 generic:impersonate=false to disable impersonation (default)

   vikichannel
        video_types:  Types  of videos	to download - one or more of episodes,
	 movies, clips,	trailers

   youtubewebarchive
        check_all: Try	to check more at the cost of more  requests.   One  or
	 more of thumbnails, captures

   gamejolt
        comment_sort:	hot (default), you (cookies needed), top, new -	choose
	 comment sorting mode (on GameJolt's side)

   hotstar
        res: resolution to ignore - one or more of sd,	hd, fhd

        vcodec: vcodec	to ignore - one	or more	of h264, h265, dvh265

        dr: dynamic range to ignore - one or more of sdr, hdr10, dv

   instagram
        app_id: The value of the X-IG-App-ID header used  for	API  requests.
	 Default is the	web app	ID, 936619743392459

   niconicochannelplus
        max_comments: Maximum number of comments to extract - default is 120

   tiktok
        api_hostname:	Hostname to use	for mobile API calls, e.g.  api22-nor-
	 mal-c-alisg.tiktokv.com

        app_name: Default app name to use with	mobile API calls, e.g.	trill

        app_version: Default app version to  use  with	 mobile	 API  calls  -
	 should	be set along with manifest_app_version,	e.g.  34.1.2

        manifest_app_version:	Default	numeric	app version to use with	mobile
	 API calls, e.g.  2023401020

        aid: Default app ID to	use with mobile	API calls, e.g.	 1180

        app_info: Enable mobile API extraction	with  one  or  more  app  info
	 strings   in	the  format  of	 <iid>/[app_name]/[app_version]/[mani-
	 fest_app_version]/[aid], where	iid is the unique app install ID.  iid
	 is the	only required value; all other values and their	 /  separators
	 can  be  omitted,  e.g.   tiktok:app_info=1234567890123456789 or tik-
	 tok:app_info=123,456/trill///1180,789//34.0.1/340001

        device_id: Enable mobile API extraction with a	genuine	device	ID  to
	 be used with mobile API calls.	 Default is a random 19-digit string

   rokfinchannel
        tab:  Which  tab  to  download	 -  one	of new,	top, videos, podcasts,
	 streams, stacks

   twitter
        api: Select one of graphql (default), legacy or  syndication  as  the
	 API for tweet extraction.  Has	no effect if logged in

   stacommu, wrestleuniverse
        device_id: UUID value assigned	by the website and used	to enforce de-
	 vice limits for paid livestream content.  Can be found	in browser lo-
	 cal storage

   twitch
        client_id:  Client  ID	 value	to be sent with	GraphQL	requests, e.g.
	 twitch:client_id=kimne78kx3ncx6brgo4mv6wki5h1ko

   nhkradirulive (NHK  LIVE)
        area: Which regional variation	to extract.  Valid areas are: sapporo,
	 sendai, tokyo,	nagoya,	osaka,	hiroshima,  matsuyama,	fukuoka.   De-
	 faults	to tokyo

   nflplusreplay
        type:	 Type(s)  of  game  replays  to	 extract.   Valid  types  are:
	 full_game, full_game_spanish, condensed_game and all_22.  You can use
	 all to	extract	all available replay types, which is the default

   jiocinema
        refresh_token:	The refreshToken UUID from browser local  storage  can
	 be  passed  to	 extend	the life of your login session when logging in
	 with token as username	and the	accessToken from browser local storage
	 as password

   jiosaavn
        bitrate: Audio	bitrates to request.  One or more of 16, 32, 64,  128,
	 320.  Default is 128,320

   afreecatvlive
        cdn:  One  or	more CDN IDs to	use with the API call for stream URLs,
	 e.g.  gcp_cdn,	gs_cdn_pc_app, gs_cdn_mobile_web, gs_cdn_pc_web

   soundcloud
        formats: Formats to request from the API.  Requested values should be
	 in the	format of {protocol}_{codec}, e.g.  hls_opus,http_aac.	The  *
	 character  functions as a wildcard, e.g.  *_mp3, and can be passed by
	 itself	to request all formats.	 Known protocols include http, hls and
	 hls-aes; known	codecs include aac, opus and mp3.   Original  download
	 formats       are	 always	      extracted.       Default	    is
	 http_aac,hls_aac,http_opus,hls_opus,http_mp3,hls_mp3

   orfon (orf:on)
        prefer_segments_playlist: Prefer a playlist of	program	 segments  in-
	 stead	of a single complete video when	available.  If individual seg-
	 ments are desired, use	--concat-playlist never	--extractor-args  "or-
	 fon:prefer_segments_playlist"

   bilibili
        prefer_multi_flv:  Prefer  extracting	flv formats over mp4 for older
	 videos	that still provide legacy formats

   sonylivseries
        sort_order: Episode sort order	for series extraction  -  one  of  asc
	 (ascending,  oldest  first)  or desc (descending, newest first).  De-
	 fault is asc

   tver
        backend: Backend API to use for extraction - one of streaks (default)
	 or brightcove (deprecated)

   vimeo
        client: Client	to extract video data from.  The  currently  available
	 clients  are  android,	 ios,  macos  and web.	Only one client	can be
	 used.	The macos client is used by default, but  the  web  client  is
	 used  when logged-in.	The web	client only works with account cookies
	 or login credentials.	The android and	ios  clients  only  work  with
	 previously cached OAuth tokens

        original_format_policy:  Policy  for  when to try extracting original
	 formats.  One of always, never, or auto.   The	 default  auto	policy
	 tries to avoid	exceeding the web client's API rate-limit by only mak-
	 ing an	extra request when Vimeo publicizes the	video's	downloadabili-
	 ty

       Note:  These  options may be changed/removed in the future without con-
       cern for	backward compatibility

INSTALLATION
       You    can    install	yt-dlp	   using     the     binaries,	   pip
       (https://pypi.org/project/yt-dlp)  or  one  using a third-party package
       manager.	 See the wiki (https://github.com/yt-dlp/yt-dlp/wiki/Installa-
       tion) for detailed instructions

       Note: The manpages, shell completion  (autocomplete)  files  etc.   are
       available  inside  the  source  tarball	(https://github.com/yt-dlp/yt-
       dlp/releases/latest/download/yt-dlp.tar.gz)

   UPDATE
       You can use yt-dlp -U to	update if you are using	the release binaries

       If you installed	 with  pip  (https://github.com/yt-dlp/yt-dlp/wiki/In-
       stallation#with-pip),  simply  re-run the same command that was used to
       install the program

       For   other   third-party    package    managers,    see	   the	  wiki
       (https://github.com/yt-dlp/yt-dlp/wiki/Installation#third-party-pack-
       age-managers) or	refer to their documentation

       There are currently three release channels for binaries:	stable,	night-
       ly and master.

        stable	 is  the  default  channel,  and many of its changes have been
	 tested	by users of the	nightly	and master channels.

        The nightly channel has releases scheduled to build every day	around
	 midnight  UTC,	 for  a	 snapshot  of  the  project's  new patches and
	 changes.  This	is the recommended channel for regular	users  of  yt-
	 dlp.	The nightly releases are available from	yt-dlp/yt-dlp-nightly-
	 builds	(https://github.com/yt-dlp/yt-dlp-nightly-builds/releases)  or
	 as  development releases of the yt-dlp	PyPI package (which can	be in-
	 stalled with pip's --pre flag).

        The master channel features releases that are built after  each  push
	 to  the  master branch, and these will	have the very latest fixes and
	 additions, but	may also be  more  prone  to  regressions.   They  are
	 available  from  yt-dlp/yt-dlp-master-builds  (https://github.com/yt-
	 dlp/yt-dlp-master-builds/releases).

       When using --update/-U, a release binary	will only update to  its  cur-
       rent channel.  --update-to CHANNEL can be used to switch	to a different
       channel	when  a	newer version is available.  --update-to [CHANNEL@]TAG
       can also	be used	to upgrade or downgrade	to specific tags from a	 chan-
       nel.

       You may also use	--update-to <repository> (<owner>/<repository>)	to up-
       date  to	 a  channel  on	a completely different repository.  Be careful
       with what repository you	are updating to	though,	there is no  verifica-
       tion done for binaries from different repositories.

       Example usage:

        yt-dlp	 --update-to master switch to the master channel and update to
	 its latest release

        yt-dlp	--update-to stable@2023.07.06 upgrade/downgrade	to release  to
	 stable	channel	tag 2023.07.06

        yt-dlp	 --update-to 2023.10.07	upgrade/downgrade to tag 2023.10.07 if
	 it exists on the current channel

        yt-dlp	--update-to example/yt-dlp@2023.09.24 upgrade/downgrade	to the
	 release from the example/yt-dlp repository, tag 2023.09.24

       Important: Any user experiencing	 an  issue  with  the  stable  release
       should install or update	to the nightly release before submitting a bug
       report:

	      #	To update to nightly from stable executable/binary:
	      yt-dlp --update-to nightly

	      #	To install nightly with	pip:
	      python -m	pip install -U --pre "yt-dlp[default]"

       When  running a yt-dlp version that is older than 90 days, you will see
       a warning message suggesting to update to the latest version.  You  can
       suppress	this warning by	adding --no-update to your command or configu-
       ration file.

   DEPENDENCIES
       Python  versions	3.10+ (CPython)	and 3.11+ (PyPy) are supported.	 Other
       versions	and implementations may	or may not work	correctly.

       While all the other dependencies	are optional, ffmpeg, ffprobe, yt-dlp-
       ejs and a supported JavaScript runtime/engine are highly	recommended

   Strongly recommended
        ffmpeg	and ffprobe (https://www.ffmpeg.org) -	Required  for  merging
	 separate  video and audio files, as well as for various post-process-
	 ing tasks.  License depends on	the build  (https://www.ffmpeg.org/le-
	 gal.html)

	 There	are  bugs in ffmpeg that cause various issues when used	along-
	 side yt-dlp.  Since ffmpeg is such an important dependency,  we  pro-
	 vide  custom  builds (https://github.com/yt-dlp/FFmpeg-Builds#ffmpeg-
	 static-auto-builds) with patches for some  of	these  issues  at  yt-
	 dlp/FFmpeg-Builds (https://github.com/yt-dlp/FFmpeg-Builds).  See the
	 readme	 (https://github.com/yt-dlp/FFmpeg-Builds#patches-applied) for
	 details on the	specific issues	solved by these	builds

	 Important: What you need is ffmpeg binary, NOT	the Python package  of
	 the same name (https://pypi.org/project/ffmpeg)

        yt-dlp-ejs   (https://github.com/yt-dlp/ejs)	-  Required  for  full
	 YouTube support.  Licensed  under  Unlicense  (https://github.com/yt-
	 dlp/ejs/blob/main/LICENSE), bundles MIT (https://github.com/davidbon-
	 net/astring/blob/main/LICENSE)			and		   ISC
	 (https://github.com/meriyah/meriyah/blob/main/LICENSE.md) components.

	 A JavaScript runtime/engine like deno (https://deno.land) (recommend-
	 ed), node.js (https://nodejs.org), bun	(https://bun.sh),  or  QuickJS
	 (https://bellard.org/quickjs/)	 is  also  required to run yt-dlp-ejs.
	 See the wiki (https://github.com/yt-dlp/yt-dlp/wiki/EJS).

   Networking
        certifi   (https://github.com/certifi/python-certifi)*	  -   Provides
	 Mozilla's    root   certificate   bundle.    Licensed	 under	 MPLv2
	 (https://github.com/certifi/python-certifi/blob/master/LICENSE)

        brotli	    (https://github.com/google/brotli)*	    or	    brotlicffi
	 (https://github.com/python-hyper/brotlicffi)	      -		Brotli
	 (https://en.wikipedia.org/wiki/Brotli)	 content   encoding   support.
	 Both licensed under MIT 1 (https://github.com/google/brotli/blob/mas-
	 ter/LICENSE)  2 (https://github.com/python-hyper/brotlicffi/blob/mas-
	 ter/LICENSE)

        websockets (https://github.com/aaugustin/websockets)* - For download-
	 ing	 over	  websocket.	  Licensed     under	  BSD-3-Clause
	 (https://github.com/aaugustin/websockets/blob/main/LICENSE)

        requests  (https://github.com/psf/requests)*  -  HTTP	library.   For
	 HTTPS proxy  and  persistent  connections  support.   Licensed	 under
	 Apache-2.0 (https://github.com/psf/requests/blob/main/LICENSE)

   Impersonation
       The following provide support for impersonating browser requests.  This
       may be required for some	sites that employ TLS fingerprinting.

        curl_cffi  (https://github.com/lexiforest/curl_cffi)  (recommended) -
	 Python	 binding  for  curl-impersonate	  (https://github.com/lexifor-
	 est/curl-impersonate).	  Provides  impersonation  targets for Chrome,
	 Edge and Safari.   Licensed  under  MIT  (https://github.com/lexifor-
	 est/curl_cffi/blob/main/LICENSE)

	  Can	be  installed with the curl-cffi extra,	e.g.  pip install "yt-
	   dlp[default,curl-cffi]"

	  Currently included in most builds except yt-dlp (Unix zipimport bi-
	   nary), yt-dlp_x86 (Windows 32-bit) and yt-dlp_musllinux_aarch64

   Metadata
        mutagen (https://github.com/quodlibet/mutagen)* - For	--embed-thumb-
	 nail	  in	 certain     formats.	   Licensed    under	GPLv2+
	 (https://github.com/quodlibet/mutagen/blob/master/COPYING)

        AtomicParsley (https://github.com/wez/atomicparsley) -	 For  --embed-
	 thumbnail  in mp4/m4a files when mutagen/ffmpeg cannot.  Licensed un-
	 der GPLv2+ (https://github.com/wez/atomicparsley/blob/master/COPYING)

        xattr		  (https://github.com/xattr/xattr),	       pyxattr
	 (https://github.com/iustin/pyxattr)	or   setfattr	(http://savan-
	 nah.nongnu.org/projects/attr) - For writing xattr metadata (--xattrs)
	 on Mac	and BSD.  Licensed  under  MIT	(https://github.com/xattr/xat-
	 tr/blob/master/LICENSE.txt),  LGPL2.1 (https://github.com/iustin/pyx-
	 attr/blob/master/COPYING)     and	GPLv2+	    (http://git.savan-
	 nah.nongnu.org/cgit/attr.git/tree/doc/COPYING)	respectively

   Misc
        pycryptodomex	(https://github.com/Legrandin/pycryptodome)* - For de-
	 crypting AES-128 HLS streams and various other	data.  Licensed	 under
	 BSD-2-Clause	  (https://github.com/Legrandin/pycryptodome/blob/mas-
	 ter/LICENSE.rst)

        phantomjs (https://github.com/ariya/phantomjs)	- Used in some extrac-
	 tors where JavaScript needs to	be run.	 No longer used	 for  YouTube.
	 To  be	 deprecated  in	 the near future.  Licensed under BSD-3-Clause
	 (https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD)

        secretstorage	 (https://github.com/mitya57/secretstorage)*   -   For
	 --cookies-from-browser	 to  access the	Gnome keyring while decrypting
	 cookies  of  Chromium-based  browsers	on  Linux.    Licensed	 under
	 BSD-3-Clause	   (https://github.com/mitya57/secretstorage/blob/mas-
	 ter/LICENSE)

        Any external downloader that you want to use with --downloader

   Deprecated
        rtmpdump  (http://rtmpdump.mplayerhq.hu)  -  For   downloading	  rtmp
	 streams.   ffmpeg  can	be used	instead	with --downloader ffmpeg.  Li-
	 censed	under GPLv2+ (http://rtmpdump.mplayerhq.hu)

        mplayer      (http://mplayerhq.hu/design7/info.html)	   or	   mpv
	 (https://mpv.io)  -  For downloading rstp/mms streams.	 ffmpeg	can be
	 used  instead	with  --downloader  ffmpeg.   Licensed	under	GPLv2+
	 (https://github.com/mpv-player/mpv/blob/master/Copyright)

       To  use	or  redistribute the dependencies, you must agree to their re-
       spective	licensing terms.

       The standalone release binaries are built with the  Python  interpreter
       and the packages	marked with * included.

       If  you	do  not	have the necessary dependencies	for a task you are at-
       tempting, yt-dlp	will warn you.	All the	currently available  dependen-
       cies are	visible	at the top of the --verbose output

   COMPILE
   Standalone PyInstaller Builds
       To  build  the  standalone  executable,	you must have Python and pyin-
       staller (plus any of yt-dlp's optional dependencies  if	needed).   The
       executable  will	 be  built for the same	CPU architecture as the	Python
       used.

       You can run the following commands:

	      python devscripts/install_deps.py	--include-extra	pyinstaller
	      python devscripts/make_lazy_extractors.py
	      python -m	bundle.pyinstaller

       On some systems,	you may	need to	use py or python3 instead of python.

       python -m bundle.pyinstaller accepts any	arguments that can  be	passed
       to  pyinstaller,	 such as --onefile/-F or --onedir/-D, which is further
       documented here	(https://pyinstaller.org/en/stable/usage.html#what-to-
       generate).

       Note:	Pyinstaller    versions	   below    4.4	   do	 not   support
       (https://github.com/pyinstaller/pyinstaller#requirements-and-tested-
       platforms) Python installed from	the Windows store without using	a vir-
       tual environment.

       Important: Running pyinstaller directly instead of using	python -m bun-
       dle.pyinstaller is not officially supported.  This may or may not  work
       correctly.

   Platform-independent	Binary (UNIX)
       You  will need the build	tools python (3.10+), zip, make	(GNU), pandoc*
       and pytest*.

       After installing	these, simply run make.

       You can also run	make yt-dlp instead to compile only the	binary without
       updating	any of the additional files.  (The build tools marked  with  *
       are not needed for this)

   Related scripts
        devscripts/install_deps.py - Install dependencies for yt-dlp.

        devscripts/update-version.py -	Update the version number based	on the
	 current date.

        devscripts/set-variant.py - Set the build variant of the executable.

        devscripts/make_changelog.py  -  Create  a  markdown  changelog using
	 short commit messages and update CONTRIBUTORS file.

        devscripts/make_lazy_extractors.py - Create lazy extractors.  Running
	 this before building the binaries (any	variant)  will	improve	 their
	 startup  performance.	Set the	environment variable YTDLP_NO_LAZY_EX-
	 TRACTORS to something nonempty	to forcefully disable  lazy  extractor
	 loading.

       Note: See their --help for more info.

   Forking the project
       If  you fork the	project	on GitHub, you can run your fork's build work-
       flow to automatically build the selected	version(s) as artifacts.   Al-
       ternatively,  you  can  run  the	release	workflow or enable the nightly
       workflow	to create full (pre-)releases.

PLUGINS
       Note that all plugins are imported even if not invoked, and that	 there
       are  no	checks performed on plugin code.  Use plugins at your own risk
       and only	if you trust the code!

       Plugins can be of <type>s extractor or postprocessor.  -	Extractor plu-
       gins do not need	to be enabled from the CLI and are  automatically  in-
       voked  when the input URL is suitable for it.  -	Extractor plugins take
       priority	over built-in extractors.  - Postprocessor plugins can be  in-
       voked using --use-postprocessor NAME.

       Plugins are loaded from the namespace packages yt_dlp_plugins.extractor
       and yt_dlp_plugins.postprocessor.

       In other	words, the file	structure on the disk looks something like:

		  yt_dlp_plugins/
		      extractor/
			  myplugin.py
		      postprocessor/
			  myplugin.py

       yt-dlp  looks  for these	yt_dlp_plugins namespace folders in many loca-
       tions (see below) and loads in plugins from all of them.	 Set the envi-
       ronment variable	YTDLP_NO_PLUGINS  to  something	 nonempty  to  disable
       loading plugins entirely.

       See  the	 wiki  for  some  known	plugins	(https://github.com/yt-dlp/yt-
       dlp/wiki/Plugins)

   Installing Plugins
       Plugins can be installed	using various methods and locations.

       1. Configuration	directories: Plugin packages (containing a yt_dlp_plu-
	  gins namespace folder) can be	dropped	into  the  following  standard
	  configuration	locations:

	    User Plugins

	      ${XDG_CONFIG_HOME}/yt-dlp/plugins/<package   name>/yt_dlp_plug-
	       ins/ (recommended on Linux/macOS)

	      ${XDG_CONFIG_HOME}/yt-dlp-plugins/<package   name>/yt_dlp_plug-
	       ins/

	      ${APPDATA}/yt-dlp/plugins/<package  name>/yt_dlp_plugins/ (rec-
	       ommended	on Windows)

	      ${APPDATA}/yt-dlp-plugins/<package name>/yt_dlp_plugins/

	      ~/.yt-dlp/plugins/<package name>/yt_dlp_plugins/

	      ~/yt-dlp-plugins/<package name>/yt_dlp_plugins/

	    System Plugins

	      /etc/yt-dlp/plugins/<package name>/yt_dlp_plugins/

	      /etc/yt-dlp-plugins/<package name>/yt_dlp_plugins/

       2. Executable location: Plugin packages can similarly be	installed in a
	  yt-dlp-plugins directory under the executable	location  (recommended
	  for portable installations):

	    Binary:   where   <root-dir>/yt-dlp.exe,  <root-dir>/yt-dlp-plug-
	     ins/<package name>/yt_dlp_plugins/

	    Source: where  <root-dir>/yt_dlp/__main__.py,  <root-dir>/yt-dlp-
	     plugins/<package name>/yt_dlp_plugins/

       3. pip and other	locations in PYTHONPATH

	    Plugin  packages can be installed and managed using pip.  See yt-
	     dlp-sample-plugins	(https://github.com/yt-dlp/yt-dlp-sample-plug-
	     ins) for an example.

	      Note: plugin files between plugin packages installed  with  pip
	       must have unique	filenames.

	    Any  path	in  PYTHONPATH	is  searched in	for the	yt_dlp_plugins
	     namespace folder.

	      Note: This does not apply for Pyinstaller builds.

       .zip, .egg and .whl  archives  containing  a  yt_dlp_plugins  namespace
       folder in their root are	also supported as plugin packages.

        e.g.  ${XDG_CONFIG_HOME}/yt-dlp/plugins/mypluginpkg.zip where myplug-
	 inpkg.zip contains yt_dlp_plugins/<type>/myplugin.py

       Run yt-dlp with --verbose to check if the plugin	has been loaded.

   Developing Plugins
       See the yt-dlp-sample-plugins (https://github.com/yt-dlp/yt-dlp-sample-
       plugins)	 repo for a template plugin package and	the Plugin Development
       (https://github.com/yt-dlp/yt-dlp/wiki/Plugin-Development)  section  of
       the wiki	for a plugin development guide.

       All  public  classes with a name	ending in IE/PP	are imported from each
       file for	extractors and postprocessors respectively.  This respects un-
       derscore	prefix (e.g.  _MyBasePluginIE is private) and  __all__.	  Mod-
       ules can	similarly be excluded by prefixing the module name with	an un-
       derscore	(e.g.  _myplugin.py).

       To  replace an existing extractor with a	subclass of one, set the plug-
       in_name class keyword argument (e.g.  class MyPluginIE(ABuiltInIE, plu-
       gin_name='myplugin') will replace ABuiltInIE with  MyPluginIE).	 Since
       the  extractor replaces the parent, you should exclude the subclass ex-
       tractor from being imported separately by making	it private  using  one
       of the methods described	above.

       If you are a plugin author, add yt-dlp-plugins (https://github.com/top-
       ics/yt-dlp-plugins) as a	topic to your repository for discoverability.

       See    the    Developer	 Instructions	(https://github.com/yt-dlp/yt-
       dlp/blob/master/CONTRIBUTING.md#developer-instructions) on how to write
       and test	an extractor.

EMBEDDING YT-DLP
       yt-dlp makes the	best effort to be a  good  command-line	 program,  and
       thus should be callable from any	programming language.

       Your  program  should  avoid  parsing  the normal stdout	since they may
       change in future	versions.  Instead, they should	use  options  such  as
       -J,  --print,  --progress-template, --exec etc to create	console	output
       that you	can reliably reproduce and parse.

       From a Python program, you can embed yt-dlp in a	more powerful fashion,
       like this:

	      from yt_dlp import YoutubeDL

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
	      with YoutubeDL() as ydl:
		  ydl.download(URLS)

       Most likely, you'll want	to use various options.	 For a list of options
       available, have a look at yt_dlp/YoutubeDL.py or	help(yt_dlp.YoutubeDL)
       in a Python shell.  If you are already familiar with the	CLI,  you  can
       use	 devscripts/cli_to_api.py	(https://github.com/yt-dlp/yt-
       dlp/blob/master/devscripts/cli_to_api.py) to translate any CLI switches
       to YoutubeDL params.

       Tip: If you are porting your code from youtube-dl to yt-dlp, one	impor-
       tant point to look out for is that we do	not guarantee the return value
       of YoutubeDL.extract_info to be json serializable, or even be a dictio-
       nary.  It will be dictionary-like, but if you want to ensure  it	 is  a
       serializable  dictionary,  pass	it  through YoutubeDL.sanitize_info as
       shown in	the example below

   Embedding examples
   Extracting information
	      import json
	      import yt_dlp

	      URL = 'https://www.youtube.com/watch?v=BaW_jenozKc'

	      #	 See help(yt_dlp.YoutubeDL) for	a list of available options and	public functions
	      ydl_opts = {}
	      with yt_dlp.YoutubeDL(ydl_opts) as ydl:
		  info = ydl.extract_info(URL, download=False)

		  #  ydl.sanitize_info makes the info json-serializable
		  print(json.dumps(ydl.sanitize_info(info)))

   Download using an info-json
	      import yt_dlp

	      INFO_FILE	= 'path/to/video.info.json'

	      with yt_dlp.YoutubeDL() as ydl:
		  error_code = ydl.download_with_info_file(INFO_FILE)

	      print('Some videos failed	to download' if	error_code
		    else 'All videos successfully downloaded')

   Extract audio
	      import yt_dlp

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']

	      ydl_opts = {
		  'format': 'm4a/bestaudio/best',
		  #  See help(yt_dlp.postprocessor) for	a list of available Postprocessors and their arguments
		  'postprocessors': [{	# Extract audio	using ffmpeg
		      'key': 'FFmpegExtractAudio',
		      'preferredcodec':	'm4a',
		  }]
	      }

	      with yt_dlp.YoutubeDL(ydl_opts) as ydl:
		  error_code = ydl.download(URLS)

   Filter videos
	      import yt_dlp

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']

	      def longer_than_a_minute(info, *,	incomplete):
		  """Download only videos longer than a	minute (or with	unknown	duration)"""
		  duration = info.get('duration')
		  if duration and duration < 60:
		      return 'The video	is too short'

	      ydl_opts = {
		  'match_filter': longer_than_a_minute,
	      }

	      with yt_dlp.YoutubeDL(ydl_opts) as ydl:
		  error_code = ydl.download(URLS)

   Adding logger and progress hook
	      import yt_dlp

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']

	      class MyLogger:
		  def debug(self, msg):
		      #	For compatibility with youtube-dl, both	debug and info are passed into debug
		      #	You can	distinguish them by the	prefix '[debug]	'
		      if msg.startswith('[debug] '):
			  pass
		      else:
			  self.info(msg)

		  def info(self, msg):
		      pass

		  def warning(self, msg):
		      pass

		  def error(self, msg):
		      print(msg)

	      #	 See "progress_hooks" in help(yt_dlp.YoutubeDL)
	      def my_hook(d):
		  if d['status'] == 'finished':
		      print('Done downloading, now post-processing ...')

	      ydl_opts = {
		  'logger': MyLogger(),
		  'progress_hooks': [my_hook],
	      }

	      with yt_dlp.YoutubeDL(ydl_opts) as ydl:
		  ydl.download(URLS)

   Add a custom	PostProcessor
	      import yt_dlp

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']

	      #	 See help(yt_dlp.postprocessor.PostProcessor)
	      class MyCustomPP(yt_dlp.postprocessor.PostProcessor):
		  def run(self,	info):
		      self.to_screen('Doing stuff')
		      return [], info

	      with yt_dlp.YoutubeDL() as ydl:
		  #  "when" can	take any value in yt_dlp.utils.POSTPROCESS_WHEN
		  ydl.add_post_processor(MyCustomPP(), when='pre_process')
		  ydl.download(URLS)

   Use a custom	format selector
	      import yt_dlp

	      URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']

	      def format_selector(ctx):
		  """ Select the best video and	the best audio that won't result in an mkv.
		  NOTE:	This is	just an	example	and does not handle all	cases """

		  # formats are	already	sorted worst to	best
		  formats = ctx.get('formats')[::-1]

		  # acodec='none' means	there is no audio
		  best_video = next(f for f in formats
				    if f['vcodec'] != 'none' and f['acodec'] ==	'none')

		  # find compatible audio extension
		  audio_ext = {'mp4': 'm4a', 'webm': 'webm'}[best_video['ext']]
		  # vcodec='none' means	there is no video
		  best_audio = next(f for f in formats if (
		      f['acodec'] != 'none' and	f['vcodec'] == 'none' and f['ext'] == audio_ext))

		  # These are the minimum required fields for a	merged format
		  yield	{
		      'format_id': f'{best_video["format_id"]}+{best_audio["format_id"]}',
		      'ext': best_video['ext'],
		      'requested_formats': [best_video,	best_audio],
		      #	Must be	+ separated list of protocols
		      'protocol': f'{best_video["protocol"]}+{best_audio["protocol"]}'
		  }

	      ydl_opts = {
		  'format': format_selector,
	      }

	      with yt_dlp.YoutubeDL(ydl_opts) as ydl:
		  ydl.download(URLS)

CHANGES	FROM YOUTUBE-DL
   New features
        Forked	 from	yt-dlc@f9401f2	 (https://github.com/blackjack4494/yt-
	 dlc/commit/f9401f2a91987068139c5f757b12fc711d4c0cee)  and merged with
	 youtube-dl@a08f2b7	  (https://github.com/ytdl-org/youtube-dl/com-
	 mit/a08f2b7e4567cdc50c0614ee0a4ffdff49b8b6e6)		   (exceptions
	 (https://github.com/yt-dlp/yt-dlp/issues/21))

        SponsorBlock Integration: You can  mark/remove	 sponsor  sections  in
	 YouTube   videos   by	 utilizing   the  SponsorBlock	(https://spon-
	 sor.ajay.app) API

        Format	Sorting: The default format sorting options have been  changed
	 so that higher	resolution and better codecs will be now preferred in-
	 stead of simply using larger bitrate.	Furthermore, you can now spec-
	 ify  the sort order using -S.	This allows for	much easier format se-
	 lection than what is possible by simply using --format	(examples)

        Merged	with animelover1984/youtube-dl:	You get	most of	 the  features
	 and	     improvements	 from	     animelover1984/youtube-dl
	 (https://github.com/animelover1984/youtube-dl)	including --write-com-
	 ments,	 BiliBiliSearch,  BilibiliChannel,  Embedding	thumbnail   in
	 mp4/ogg/opus, playlist	infojson etc.  See #31 (https://github.com/yt-
	 dlp/yt-dlp/pull/31) for details.

        YouTube improvements:

	  Supports Clips, Stories (ytstories:<channel UCID>), Search (includ-
	   ing	filters)*,  YouTube  Music  Search,  Channel-specific  search,
	   Search prefix (ytsearch:)*, Mixes,  and  Feeds  (:ytfav,  :ytwatch-
	   later, :ytsubs, :ythistory, :ytrec, :ytnotif)

	  Fix	  for	n-sig	based	throttling   (https://github.com/ytdl-
	   org/youtube-dl/issues/29326)	*

	  Download livestreams	from the start using --live-from-start (exper-
	   imental)

	  Channel URLs	download all uploads of	the channel, including	shorts
	   and live

        Cookies from browser: Cookies can be automatically extracted from all
	 major	  web	 browsers    using    --cookies-from-browser	BROWS-
	 ER[+KEYRING][:PROFILE][::CONTAINER]

        Download time range: Videos can be downloaded partially based on  ei-
	 ther timestamps or chapters using --download-sections

        Split	video  by  chapters:  Videos  can be split into	multiple files
	 based on chapters using --split-chapters

        Multi-threaded	fragment downloads:  Download  multiple	 fragments  of
	 m3u8/mpd  videos in parallel.	Use --concurrent-fragments (-N)	option
	 to set	the number of threads used

        Aria2c	with HLS/DASH: You can use aria2c as the  external  downloader
	 for DASH(mpd) and HLS(m3u8) formats

        New  and  fixed extractors: Many new extractors have been added and a
	 lot of	existing ones have been	fixed.	See the	changelog or the  list
	 of supported sites

        New MSOs: Philo, Spectrum, SlingTV, Cablevision, RCN etc.

        Subtitle  extraction  from manifests: Subtitles can be	extracted from
	 streaming	media	    manifests.	      See	commit/be6202f
	 (https://github.com/yt-dlp/yt-dlp/com-
	 mit/be6202f12b97858b9d716e608394b51065d0419f) for details

        Multiple  paths  and  output templates: You can give different	output
	 templates and download	paths for different types of files.   You  can
	 also  set a temporary path where intermediary files are downloaded to
	 using --paths (-P)

        Portable Configuration: Configuration files are automatically	loaded
	 from the home and root	directories.  See CONFIGURATION	for details

        Output	template improvements: Output templates	can now	have date-time
	 formatting,  numeric  offsets,	object traversal etc.  See output tem-
	 plate for details.  Even more advanced	operations can	also  be  done
	 with the help of --parse-metadata and --replace-in-metadata

        Other	new options: Many new options have been	added such as --alias,
	 --print, --concat-playlist, --wait-for-video, --retry-sleep, --sleep-
	 requests,  --convert-thumbnails,  --force-download-archive,  --force-
	 overwrites, --break-match-filters etc

        Improvements:	Regex and other	operators in --format/--match-filters,
	 multiple --postprocessor-args and --downloader-args,  faster  archive
	 checking,  more  format  selection  options, merge multi-video/audio,
	 multiple --config-locations, --exec at	different stages, etc

        Plugins: Extractors and PostProcessors	can be loaded from an external
	 file.	See plugins for	details

        Self updater: The releases can	be updated using yt-dlp	-U, and	 down-
	 graded	using --update-to if required

        Automated  builds: Nightly/master builds can be used with --update-to
	 nightly and --update-to master

       See changelog or	commits	(https://github.com/yt-dlp/yt-dlp/commits) for
       the full	list of	changes

       Features	marked with a *	have been back-ported to youtube-dl

   Differences in default behavior
       Some of yt-dlp's	default	options	are different from that	of  youtube-dl
       and youtube-dlc:

        yt-dlp	 supports  only	Python 3.10+, and will remove support for more
	 versions  as  they   become   EOL   (https://devguide.python.org/ver-
	 sions/#python-release-cycle);	while youtube-dl still supports	Python
	 2.6+	  and	  3.2+	   (https://github.com/ytdl-org/youtube-dl/is-
	 sues/30568#issue-1118238743)

        The  options  --auto-number (-A), --title (-t)	and --literal (-l), no
	 longer	work.  See removed options for details

        avconv	is not supported as an alternative to ffmpeg

        yt-dlp	 stores	 config	 files	in  slightly  different	 locations  to
	 youtube-dl.  See CONFIGURATION	for a list of correct locations

        The  default output template is %(title)s [%(id)s].%(ext)s.  There is
	 no real reason	for this change.  This was changed before  yt-dlp  was
	 ever  made  public  and  now  there are no plans to change it back to
	 %(title)s-%(id)s.%(ext)s.   Instead,  you  may	 use  --compat-options
	 filename

        The  default  format sorting is different from	youtube-dl and prefers
	 higher	resolution and better codecs rather than higher	bitrates.  You
	 can use the --format-sort option to change this to any	order you pre-
	 fer, or use --compat-options format-sort to use youtube-dl's  sorting
	 order.	  Older	 versions  of  yt-dlp preferred	VP9 due	to its broader
	 compatibility;	you can	use --compat-options prefer-vp9-sort to	revert
	 to that format	sorting	preference.  These two compat  options	cannot
	 be used together

        The  default  format selector is bv*+ba/b.  This means	that if	a com-
	 bined video + audio format that is better than	 the  best  video-only
	 format	 is  found,  the  former will be preferred.  Use -f bv+ba/b or
	 --compat-options format-spec to revert	this

        Unlike	youtube-dlc,  yt-dlp  does  not	 allow	merging	 multiple  au-
	 dio/video streams into	one file by default (since this	conflicts with
	 the use of -f bv*+ba).	 If needed, this feature must be enabled using
	 --audio-multistreams  and  --video-multistreams.   You	 can  also use
	 --compat-options multistreams to enable both

        --no-abort-on-error is	enabled	by default.  Use  --abort-on-error  or
	 --compat-options abort-on-error to abort on errors instead

        When writing metadata files such as thumbnails, description or	infoj-
	 son,  the  same  information  (if  available)	is  also  written  for
	 playlists.  Use --no-write-playlist-metafiles or --compat-options no-
	 playlist-metafiles to not write these files

        --add-metadata	attaches the infojson to  mkv  files  in  addition  to
	 writing  the metadata when used with --write-info-json.  Use --no-em-
	 bed-info-json or --compat-options no-attach-info-json to revert this

        Some metadata are embedded into different fields  when	 using	--add-
	 metadata as compared to youtube-dl.  Most notably, comment field con-
	 tains the webpage_url and synopsis contains the description.  You can
	 use  --parse-metadata	to modify this to your liking or use --compat-
	 options embed-metadata	to revert this

        playlist_index	 behaves  differently  when  used  with	 options  like
	 --playlist-reverse	 and	  --playlist-items.	  See	  #302
	 (https://github.com/yt-dlp/yt-dlp/issues/302) for details.   You  can
	 use  --compat-options	playlist-index if you want to keep the earlier
	 behavior

        The output of -F is listed in a  new  format.	 Use  --compat-options
	 list-formats to revert	this

        Live  chats  (if  available) are considered as	subtitles.  Use	--sub-
	 langs all,-live_chat to download all subtitles	except live chat.  You
	 can also  use	--compat-options  no-live-chat	to  prevent  any  live
	 chat/danmaku from downloading

        YouTube  channel  URLs	download all uploads of	the channel.  To down-
	 load only the videos in a specific tab, pass the tab's	URL.   If  the
	 channel  does	not  show  the requested tab, an error will be raised.
	 Also, /live URLs raise	an error if there are no live  videos  instead
	 of silently downloading the entire channel.  You may use --compat-op-
	 tions no-youtube-channel-redirect to revert all these redirections

        Unavailable videos are	also listed for	YouTube	playlists.  Use	--com-
	 pat-options no-youtube-unavailable-videos to remove this

        The upload dates extracted from YouTube are in	UTC.

        If  ffmpeg  is	used as	the downloader,	the downloading	and merging of
	 formats happen	in a single step when possible.	 Use  --compat-options
	 no-direct-merge to revert this

        Thumbnail  embedding  in  mp4	is done	with mutagen if	possible.  Use
	 --compat-options embed-thumbnail-atomicparsley	to force  the  use  of
	 AtomicParsley instead

        Some  internal	metadata such as filenames are removed by default from
	 the infojson.	Use --no-clean-infojson	or --compat-options  no-clean-
	 infojson to revert this

        When  --embed-subs  and --write-subs are used together, the subtitles
	 are written to	disk and also embedded in the media file.  You can use
	 just --embed-subs to embed the	subs and automatically delete the sep-
	 arate file.  See #630 (comment) (https://github.com/yt-dlp/yt-dlp/is-
	 sues/630#issuecomment-893659460) for more info.  --compat-options no-
	 keep-subs can be used to revert this

        certifi will be used for SSL root certificates, if installed.	If you
	 want to use system certificates (e.g.	self-signed), use --compat-op-
	 tions no-certifi

        yt-dlp's sanitization of invalid characters in	filenames  is  differ-
	 ent/smarter  than  in youtube-dl.  You	can use	--compat-options file-
	 name-sanitization to revert to	youtube-dl's behavior

        [STRIKEOUT:yt-dlp tries to parse the external downloader outputs into
	 the standard progress	output	if  possible  (Currently  implemented:
	 aria2c	 (https://github.com/yt-dlp/yt-dlp/issues/5931)).  You can use
	 --compat-options no-external-downloader-progress  to  get  the	 down-
	 loader	output as-is]

        yt-dlp	 versions  between  2021.09.01 and 2023.01.02 applies --match-
	 filters to nested playlists.  This was	an  unintentional  side-effect
	 of	       8f18ac		(https://github.com/yt-dlp/yt-dlp/com-
	 mit/8f18aca8717bb0dd49054555af8d386e5eda3a88) and is fixed in	d7b460
	 (https://github.com/yt-dlp/yt-dlp/com-
	 mit/d7b460d0e5fc710950582baed2e3fc616ed98a80).	  Use --compat-options
	 playlist-match-filter to revert this

        yt-dlp	versions between 2021.11.10  and  2023.06.21  estimated	 file-
	 size_approx  values  for fragmented/manifest formats.	This was added
	 for  convenience  in  f2fe69	(https://github.com/yt-dlp/yt-dlp/com-
	 mit/f2fe69c7b0d208bdb1f6292b4ae92bc1e1a7444a),	 but  was  reverted in
	 0dff8e				(https://github.com/yt-dlp/yt-dlp/com-
	 mit/0dff8e4d1e6e9fb938f4256ea9af7d81f42fd54f)	due to the potentially
	 extreme inaccuracy of the  estimated  values.	 Use  --compat-options
	 manifest-filesize-approx to keep extracting the estimated values

        yt-dlp	uses modern http client	backends such as requests.  Use	--com-
	 pat-options prefer-legacy-http-handler	to prefer the legacy http han-
	 dler (urllib) to be used for standard http requests.

        The sub-modules swfinterp, casefold are removed.

        Passing  --simulate  (or calling extract_info with download=False) no
	 longer	  alters   the	 default   format   selection.	  See	 #9843
	 (https://github.com/yt-dlp/yt-dlp/issues/9843)	for details.

        yt-dlp	no longer applies the server modified time to downloaded files
	 by  default.  Use --mtime or --compat-options mtime-by-default	to re-
	 vert this.

       For convenience,	there are some compat option aliases available to use:

        --compat-options all: Use all compat options (Do NOT use this!)

        --compat-options youtube-dl:  Same  as	 --compat-options  all,-multi-
	 streams,-playlist-match-filter,-manifest-filesize-approx,-allow-un-
	 safe-ext,-prefer-vp9-sort

        --compat-options  youtube-dlc:	Same as	--compat-options all,-no-live-
	 chat,-no-youtube-channel-redirect,-playlist-match-filter,-manifest-
	 filesize-approx,-allow-unsafe-ext,-prefer-vp9-sort

        --compat-options 2021:	Same as	--compat-options 2022,no-certifi,file-
	 name-sanitization

        --compat-options 2022:	Same as	--compat-options  2023,playlist-match-
	 filter,no-external-downloader-progress,prefer-legacy-http-han-
	 dler,manifest-filesize-approx

        --compat-options 2023:	Same as	--compat-options 2024,prefer-vp9-sort

        --compat-options 2024:	Same as	--compat-options 2025,mtime-by-default

        --compat-options  2025:  Currently  does nothing.  Use	this to	enable
	 all future compat options

       Using one of the	yearly compat option aliases will pin yt-dlp's default
       behavior	to what	it was at the end of that calendar year.

       The following compat options restore vulnerable	behavior  from	before
       security	patches:

        --compat-options  allow-unsafe-ext:  Allow  files  with any extension
	 (including  unsafe  ones)  to	be   downloaded	  (GHSA-79w7-vh3h-8g4j
	 (https://github.com/yt-dlp/yt-dlp/security/advisories/GH-
	 SA-79w7-vh3h-8g4j))

		:warning:  Only	 use  if a valid file download is rejected be-
		cause its extension is detected	as uncommon

		This option can	enable remote code execution!  Consider	 open-
		ing	an     issue	 (https://github.com/yt-dlp/yt-dlp/is-
		sues/new/choose) instead!

   Deprecated options
       These are all the deprecated options and	 the  current  alternative  to
       achieve the same	effect

   Almost redundant options
       While  these  options  are  almost  the same as their new counterparts,
       there are some differences that prevents	them being redundant

	      -j, --dump-json		       --print "%()j"
	      -F, --list-formats	       --print formats_table
	      --list-thumbnails		       --print thumbnails_table	--print	playlist:thumbnails_table
	      --list-subs		       --print automatic_captions_table	--print	subtitles_table

   Redundant options
       While these options are redundant, they are still expected to  be  used
       due to their ease of use

	      --get-description		       --print description
	      --get-duration		       --print duration_string
	      --get-filename		       --print filename
	      --get-format		       --print format
	      --get-id			       --print id
	      --get-thumbnail		       --print thumbnail
	      -e, --get-title		       --print title
	      -g, --get-url		       --print urls
	      --match-title REGEX	       --match-filters "title ~= (?i)REGEX"
	      --reject-title REGEX	       --match-filters "title !~= (?i)REGEX"
	      --min-views COUNT		       --match-filters "view_count >=? COUNT"
	      --max-views COUNT		       --match-filters "view_count <=? COUNT"
	      --break-on-reject		       Use --break-match-filters
	      --user-agent UA		       --add-headers "User-Agent:UA"
	      --referer	URL		       --add-headers "Referer:URL"
	      --playlist-start NUMBER	       -I NUMBER:
	      --playlist-end NUMBER	       -I :NUMBER
	      --playlist-reverse	       -I ::-1
	      --no-playlist-reverse	       Default
	      --no-colors		       --color no_color

   Not recommended
       While  these  options  still  work,  their use is not recommended since
       there are other alternatives to achieve the same

	      --force-generic-extractor	       --ies generic,default
	      --exec-before-download CMD       --exec "before_dl:CMD"
	      --no-exec-before-download	       --no-exec
	      --all-formats		       -f all
	      --all-subs		       --sub-langs all --write-subs
	      --print-json		       -j --no-simulate
	      --autonumber-size	NUMBER	       Use string formatting, e.g. %(autonumber)03d
	      --autonumber-start NUMBER	       Use internal field formatting like %(autonumber+NUMBER)s
	      --id			       -o "%(id)s.%(ext)s"
	      --metadata-from-title FORMAT     --parse-metadata	"%(title)s:FORMAT"
	      --hls-prefer-native	       --downloader "m3u8:native"
	      --hls-prefer-ffmpeg	       --downloader "m3u8:ffmpeg"
	      --list-formats-old	       --compat-options	list-formats (Alias: --no-list-formats-as-table)
	      --list-formats-as-table	       --compat-options	-list-formats [Default]
	      --geo-bypass		       --xff "default"
	      --no-geo-bypass		       --xff "never"
	      --geo-bypass-country CODE	       --xff CODE
	      --geo-bypass-ip-block IP_BLOCK   --xff IP_BLOCK

   Developer options
       These options are not intended to be used by the	end-user

	      --test			       Download	only part of video for testing extractors
	      --load-pages		       Load pages dumped by --write-pages
	      --allow-unplayable-formats       List unplayable formats also
	      --no-allow-unplayable-formats    Default

   Old aliases
       These are aliases that are no longer documented for various reasons

	      --clean-infojson		       --clean-info-json
	      --force-write-download-archive   --force-write-archive
	      --no-clean-infojson	       --no-clean-info-json
	      --no-split-tracks		       --no-split-chapters
	      --no-write-srt		       --no-write-subs
	      --prefer-unsecure		       --prefer-insecure
	      --rate-limit RATE		       --limit-rate RATE
	      --split-tracks		       --split-chapters
	      --srt-lang LANGS		       --sub-langs LANGS
	      --trim-file-names	LENGTH	       --trim-filenames	LENGTH
	      --write-srt		       --write-subs
	      --yes-overwrites		       --force-overwrites

   Sponskrub Options
       Support for SponSkrub (https://github.com/faissaloo/SponSkrub) has been
       removed in favor	of the --sponsorblock options

	      --sponskrub		       --sponsorblock-mark all
	      --no-sponskrub		       --no-sponsorblock
	      --sponskrub-cut		       --sponsorblock-remove all
	      --no-sponskrub-cut	       --sponsorblock-remove -all
	      --sponskrub-force		       Not applicable
	      --no-sponskrub-force	       Not applicable
	      --sponskrub-location	       Not applicable
	      --sponskrub-args		       Not applicable

   No longer supported
       These options may no longer work	as intended

	      --prefer-avconv		       avconv is not officially	supported by yt-dlp (Alias: --no-prefer-ffmpeg)
	      --prefer-ffmpeg		       Default (Alias: --no-prefer-avconv)
	      -C, --call-home		       Not implemented
	      --no-call-home		       Default
	      --include-ads		       No longer supported
	      --no-include-ads		       Default
	      --write-annotations	       No supported site has annotations now
	      --no-write-annotations	       Default
	      --avconv-location		       Removed alias for --ffmpeg-location
	      --cn-verification-proxy URL      Removed alias for --geo-verification-proxy URL
	      --dump-headers		       Removed alias for --print-traffic
	      --dump-intermediate-pages	       Removed alias for --dump-pages
	      --youtube-skip-dash-manifest     Removed alias for --extractor-args "youtube:skip=dash" (Alias: --no-youtube-include-dash-manifest)
	      --youtube-skip-hls-manifest      Removed alias for --extractor-args "youtube:skip=hls" (Alias: --no-youtube-include-hls-manifest)
	      --youtube-include-dash-manifest  Default (Alias: --no-youtube-skip-dash-manifest)
	      --youtube-include-hls-manifest   Default (Alias: --no-youtube-skip-hls-manifest)
	      --youtube-print-sig-code	       Removed testing functionality
	      --dump-user-agent		       No longer supported
	      --xattr-set-filesize	       No longer supported
	      --compat-options seperate-video-versions	No longer needed
	      --compat-options no-youtube-prefer-utc-upload-date  No longer supported

   Removed
       These options were deprecated since 2014	and have now been entirely re-
       moved

	      -A, --auto-number		       -o "%(autonumber)s-%(id)s.%(ext)s"
	      -t, -l, --title, --literal       -o "%(title)s-%(id)s.%(ext)s"

CONTRIBUTING
       See CONTRIBUTING.md for instructions on Opening an Issue	and Contribut-
       ing code	to the project

WIKI
       See the Wiki (https://github.com/yt-dlp/yt-dlp/wiki) for	more  informa-
       tion

								     yt-dlp(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=yt-dlp&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help