292 lines
No EOL
30 KiB
Markdown
292 lines
No EOL
30 KiB
Markdown
---
|
||
obj: application
|
||
repo: https://github.com/yt-dlp/yt-dlp
|
||
---
|
||
|
||
# yt-dlp
|
||
[Repo](https://github.com/yt-dlp/yt-dlp)
|
||
yt-dlp is a website media downloader. It can be used with [MPV](MPV.md).
|
||
|
||
## Usage
|
||
### Network Options
|
||
| Option | Description |
|
||
| ----------- | ---------------------------------------- |
|
||
| --proxy URL | Use the specified [HTTP](../../internet/HTTP.md)/HTTPS/SOCKS proxy |
|
||
|
||
### Video Selection Options
|
||
| Option | Description |
|
||
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||
| --date DATE | Download only videos uploaded on this date.<br>The date can be "YYYYMMDD" or in the format \[now\|today\|yesterday]\[-N\[day\|week\|month\|year]].<br>E.g. --date today-2weeks |
|
||
| --datebefore DATE | Download only videos uploaded on or before this date |
|
||
| --dateafter DATE | Download only videos uploaded on or after this date |
|
||
| --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 |
|
||
| --download-archive FILE | Download only videos not listed in the archive file. Record the IDs of all downloaded videos in it |
|
||
| --max-downloads NUMBER | Abort after downloading NUMBER files |
|
||
|
||
### Download Options
|
||
| Option | Description |
|
||
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| -N, --concurrent-fragments N | Number of fragments of a dash/hlsnative video that should be downloaded concurrently |
|
||
| -r, --limit-rate RATE | Maximum download rate in bytes per second, e.g. 50K or 4.2M |
|
||
| -R, --retries RETRIES | Number of retries (default is 10) |
|
||
| --downloader \[PROTO:]NAME | Name or path of the external downloader to use (optionally) prefixed by the protocols ([http](../../internet/HTTP.md), ftp, m3u8, dash, rstp, rtmp, mms) to use it for.<br>Currently supports native, aria2c, avconv, axel, [curl](../cli/network/curl.md), [ffmpeg](ffmpeg.md), [httpie](../development/HTTPie.md), wget. You can use this option multiple times to set different downloaders for different protocols.<br>E.g. --downloader aria2c --downloader "dash,m3u8:native" will use aria2c for [http](../../internet/HTTP.md)/ftp downloads, and the native downloader for dash/m3u8 downloads |
|
||
|
||
### Filesystem Options
|
||
| Option | Description |
|
||
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| -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 |
|
||
| -o, --output [TYPES:]TEMPLATE | Output filename template; see "OUTPUT TEMPLATE" for details |
|
||
| --restrict-filenames | Restrict filenames to only [ASCII](../../files/ASCII.md) characters and avoid "&" and spaces in filenames |
|
||
| --write-description | Write video description to a .description file |
|
||
| --write-info-json | Write video metadata to a .info.json file |
|
||
| --write-comments | Retrieve video comments to be placed in the infojson. The comments are fetched even without this option if the extraction is known to be quick |
|
||
| --cookies FILE | Netscape formatted file to read cookies from and dump cookie jar in |
|
||
| --cookies-from-browser BROWSER\[+KEYRING]\[:PROFILE]\[::CONTAINER] | The name of the browser to load cookies from. Currently supported browsers are: [brave](../network/browsers/Brave.md), chrome, chromium, edge, [firefox](../network/browsers/Firefox.md), opera, safari, vivaldi. Optionally, the KEYRING used for decrypting Chromium cookies on [Linux](../../linux/Linux.md), the name/path of the PROFILE to load cookies from, and the CONTAINER name (if [Firefox](../network/browsers/Firefox.md)) ("none" for no container) can be given with their respective seperators. By default, all containers of the most recently accessed profile are used. Currently supported keyrings are: basictext, gnomekeyring, kwallet |
|
||
|
||
### Thumbnail Options
|
||
| Option | Description |
|
||
| ---------------------- | ----------------------------------------- |
|
||
| --write-thumbnail | Write thumbnail image to disk |
|
||
| --write-all-thumbnails | Write all thumbnail image formats to disk |
|
||
|
||
### Video Format Options
|
||
| Option | Description |
|
||
| ---------------------------- | --------------------------------------------------------------------------- |
|
||
| -f, --format FORMAT | Video format code, see "FORMAT SELECTION" for more details |
|
||
| -F, --list-formats | List available formats of each video. Simulate unless --no-simulate is used |
|
||
| --merge-output-format FORMAT | Containers that may be used when merging formats, separated by "/", e.g. "mp4/[mkv](../../files/media/Matroska.md)". Ignored if no merge is required. (currently supported: avi, flv, [mkv](../../files/media/Matroska.md), mov, mp4, webm) |
|
||
|
||
### Subtitle Options
|
||
| Option | Description |
|
||
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| --write-subs | Write subtitle file |
|
||
| --list-subs | List available subtitles of each video. Simulate unless --no-simulate is used |
|
||
| --sub-format FORMAT | Subtitle format; accepts formats preference, 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". 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 language tags |
|
||
|
||
### Post-Processing Options
|
||
| Option | Description |
|
||
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| -x, --extract-audio | Convert video files to audio-only files (requires [ffmpeg](ffmpeg.md) and ffprobe) |
|
||
| --audio-format FORMAT | Format to convert the audio to when -x is used. (currently supported: best (default), aac, alac, [flac](../../files/media/audio/FLAC.md), m4a, mp3, [opus](../../files/media/audio/Opus.md), vorbis, [wav](../../files/media/audio/WAV.md)) |
|
||
| --remux-video FORMAT | Remux the video into another container if necessary (currently supported: avi, flv, [mkv](../../files/media/Matroska.md), mov, mp4, webm, aac, aiff, alac, [flac](../../files/media/audio/FLAC.md), m4a, mka, mp3, ogg, [opus](../../files/media/audio/Opus.md), vorbis, [wav](../../files/media/audio/WAV.md)) |
|
||
| --embed-subs | Embed subtitles in the video (only for mp4, webm and [mkv](../../files/media/Matroska.md) videos) |
|
||
| --embed-thumbnail | Embed thumbnail in the video as cover art |
|
||
| --embed-metadata | Embed metadata to the video file. Also embeds chapters/infojson if present unless --no-embed-chapters/--no-embed-info-json are used |
|
||
| --embed-chapters | Add chapter markers to the video file |
|
||
| --embed-info-json | Embed the infojson as an attachment to [mkv](../../files/media/Matroska.md)/mka video files |
|
||
| --convert-subs FORMAT | Convert the subtitles to another format (currently supported: ass, lrc, srt, vtt) |
|
||
| --convert-thumbnails FORMAT | Convert the thumbnails to another format (currently supported: jpg, [png](../../files/media/image/PNG.md), webp) |
|
||
| --split-chapters | Split video into multiple files based on internal chapters. |
|
||
|
||
## 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.
|
||
|
||
**tl;dr:** [navigate me to examples](https://github.com/yt-dlp/yt-dlp#output-template-examples).
|
||
|
||
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_ recommended 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 percent 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:-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. **Addition**: Addition and subtraction of numeric fields can be done using `+` and `-` respectively. E.g. `%(playlist_index+10)03d`, `%(n_entries+1-playlist_index)d`
|
||
|
||
3. **Date/time Formatting**: Date/time fields can be formatted according to [strftime formatting](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) by specifying it separated 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 `&` separator. If the field is _not_ empty, this replacement value will be used instead of the actual field content. This is done after alternate fields are considered; thus the replacement is used if _any_ of the alternative fields is _not_ empty.
|
||
|
||
6. **Default**: A literal default value can be specified for when the field is empty using a `|` separator. This overrides `--output-na-placeholder`. E.g. `%(uploader|Unknown)s`
|
||
|
||
7. **More Conversions**: In addition to the normal format types `diouxXeEfFgGcrs`, yt-dlp additionally supports converting to `B` = **B**ytes, `j` = **j**son (flag `#` for pretty-printing, `+` for Unicode), `h` = HTML escaping, `l` = a comma separated **l**ist (flag `#` for `\n` newline-separated), `q` = a string **q**uoted for the terminal (flag `#` to split a list into different arguments), `D` = add **D**ecimal suffixes (e.g. 10M) (flag `#` to use 1024 as factor), and `S` = **S**anitize as filename (flag `#` for restricted)
|
||
|
||
8. **Unicode normalization**: The format type `U` can be used for NFC [Unicode normalization](https://docs.python.org/3/library/unicodedata.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. `%(title)+.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 specifying the type of file followed by the template separated by a colon `:`. The different file types supported are `subtitle`, `thumbnail`, `description`, `annotation` (deprecated), `infojson`, `link`, `pl_thumbnail`, `pl_description`, `pl_infojson`, `chapter`, `pl_video`. E.g. `-o "%(title)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
|
||
- `license` (string): License name the video is licensed under
|
||
- `creator` (string): The creator of the video
|
||
- `timestamp` (numeric): [UNIX timestamp](../../linux/UNIX%20Timestamp.md) of the moment the video became available
|
||
- `upload_date` (string): Video upload date in UTC (YYYYMMDD)
|
||
- `release_timestamp` (numeric): [UNIX timestamp](../../linux/UNIX%20Timestamp.md) of the moment the video was released
|
||
- `release_date` (string): The date (YYYYMMDD) when the video was released in UTC
|
||
- `modified_timestamp` (numeric): [UNIX timestamp](../../linux/UNIX%20Timestamp.md) of the moment the video was last modified
|
||
- `modified_date` (string): The date (YYYYMMDD) when the video was last modified in UTC
|
||
- `uploader_id` (string): Nickname or id of the video uploader
|
||
- `channel` (string): Full name of the channel the video is uploaded on
|
||
- `channel_id` (string): Id of the channel
|
||
- `channel_follower_count` (numeric): Number of followers of the channel
|
||
- `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 watching 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 give 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)
|
||
- `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_only", "subscriber_only", "needs_auth", "unlisted" or "public"
|
||
- `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 download, starting at `--autonumber-start`
|
||
- `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_id` or `playlist_title`
|
||
- `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 uploader
|
||
- `webpage_url` (string): A URL to the video webpage which if given to yt-dlp should allow to get 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 same as `webpage_url` for playlist entries)
|
||
|
||
All the fields in [Filtering Formats](https://github.com/yt-dlp/yt-dlp#filtering-formats) can also be used
|
||
|
||
Available for the video that belongs to some logical chapter or section:
|
||
|
||
- `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 programme:
|
||
|
||
- `series` (string): Title of the series or programme the video episode belongs to
|
||
- `season` (string): Title of the season the video episode belongs to
|
||
- `season_number` (numeric): Number of the season the video episode belongs 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
|
||
- `artist` (string): Artist(s) of the track
|
||
- `genre` (string): Genre(s) of the track
|
||
- `album` (string): Title of the album the track belongs to
|
||
- `album_type` (string): Type of the album
|
||
- `album_artist` (string): List of all artists appeared on the album
|
||
- `disc_number` (numeric): Number of the disc or other physical medium the track belongs to
|
||
- `release_year` (numeric): Year (YYYY) when the album was released
|
||
|
||
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](https://github.com/yt-dlp/yt-dlp#outtmpl-postprocess-note)
|
||
- `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 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.sponsor.ajay.app/w/Types#Category) the chapter belongs to
|
||
- `category` (string): The smallest SponsorBlock category the chapter belongs 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.sponsor.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 that 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 `--output-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 system or the filename through an 8bit-unsafe channel. In these cases, add the `--restrict-filenames` flag to get a shorter title.
|
||
|
||
#### Output template examples
|
||
```shell
|
||
$ 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%(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_jenoz --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
|
||
``` |