Skip to content
yt-dlp

YouTube Subtitle Downloader — yt-dlp Command Generator

Build a yt-dlp command that saves subtitles as .srt without downloading the video.

Optional. Leave it empty and the command ends with URL for you to fill in.

Your command

yt-dlp --write-subs --convert-subs srt --sub-langs en --write-auto-subs --no-playlist -s 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
Basics

Audio-only extracts the soundtrack and drops the video stream.

Video and quality

Caps the height. yt-dlp still picks the best stream at or below it.

The file type separate video and audio streams are merged into.

Advanced options (3)

Overrides the quality dropdown. For people who already know the format syntax.

Repackages the streams without re-encoding. Fast and lossless.

Re-encodes the video. Slow and lossy — only when remuxing will not do.

Audio

The file the audio is converted to.

VBR gives the best size-to-quality ratio; fixed bitrates are more predictable.

Subtitles

Embedding puts them inside the video; saving writes a separate .srt next to it.

Comma separated. Use all for every available language.

Playlists and channels

What to do when the URL belongs to both a video and a playlist.

Ranges and lists both work, for example 1-10,15 or -5::2 for every second item from the end.

Advanced options (1)

Records what has been downloaded so re-running skips it. The way to keep a channel in sync.

Sections and chapters
Advanced options (2)

A time range like *00:01:30-00:03:00, or a chapter name. The leading asterisk means it is a timestamp.

Metadata and artwork
Advanced options (3)
SponsorBlock

Cuts community-marked segments out of the file using SponsorBlock data.

Advanced options (1)

Keeps the segments but marks them, so you can skip them yourself.

Files and folders

Field names go in %(...)s. Slashes create folders.

Advanced options (4)

Where files are written. Combine with the template above for subfolders.

Maximum file name length in characters.

Filters
Advanced options (5)

YYYYMMDD, or a relative date like now-1month.

YYYYMMDD, or a relative date.

Skips anything smaller. Accepts 5M, 500K and similar.

Skips anything larger.

Number of files to download before stopping.

Network

For example 2M or 500K. Useful when you need the rest of your bandwidth.

Advanced options (5)

Speeds up fragmented streams. Four is a sensible starting point.

How many times to retry a failed piece. infinite is allowed.

HTTP, HTTPS or SOCKS proxy URL.

Makes requests look like a real browser. The usual fix for sudden 403 errors.

Login and cookies

Reads your logged-in session directly. Needed for private, age-restricted or members-only content.

Advanced options (1)

A Netscape-format cookies.txt exported from your browser.

Live streams
Advanced options (2)

Polls until a scheduled stream begins. MIN-MAX seconds between checks.

Workarounds
Advanced options (3)

Deprecated in favour of --add-headers. Kept because plenty of older guides still use it.

Deprecated in favour of --add-headers.

Site-specific switches, for example youtube:player_client=web.

Output and debugging
Advanced options (2)
Reset

Subtitles without the video

Simulate mode does everything except write the video file, so you keep the subtitles and skip the download. Converting to SRT needs ffmpeg.

If nothing appears, the video most likely has no human-written subtitles — auto-generated captions are a separate switch, and without it yt-dlp finds nothing and says nothing.

Simulate mode is the load-bearing switch on this page: without it, yt-dlp downloads the whole video and merely also saves the subtitles, which on a film-length file is a lot of transfer for a text track. With it, the run fetches the metadata, writes the subtitle files, and never touches the video. The cost is that simulate mode also skips the thumbnail and description writing you may be used to — those are video-run artifacts, not subtitle ones.

Language selection is where subtitle downloads get fiddly. --sub-langs en takes exactly the track tagged "en"; en-orig is YouTube's name for the auto-generated one, and en.* as a pattern catches both plus the regional variants. Multiple languages take a comma-separated list. If a video has both human and auto tracks for the same language, they are two separate entries, and downloading both is a legitimate outcome, not a bug.

Formats matter when the subtitle file is going into an editor: SRT is the safe interchange, VTT carries styling the web player shows, and YouTube's own JSON3/_SRV formats are meant for machines. The convert-to-srt switch handles the common case, needs ffmpeg, and loses the styling on purpose — editors want text, not markup. If the output looks empty, check the file exists before assuming conversion failed: a zero-byte SRT means the track itself was empty.

Auto-generated captions deserve a warning: they are machine transcription, with everything that implies — wrong homophones, no punctuation, mangled names. For a video in a language you read, they are a search index; for anything you will quote, the human track (when it exists) is the one worth keeping. Live streams get auto-captions live, saved only after the stream ends — the live-recording options on this site are for the picture, and the captions for a finished stream download with the normal subtitle options.

Frequently asked questions

How do I download subtitles without the video?
Choose the .srt option and turn on simulate, which skips writing the video file while still saving the subtitles.
Why did no subtitle file appear?
The video probably has no human subtitles. Turn on auto-generated subtitles to get the machine-made ones.
How do I pick subtitle languages?
Comma-separate them, for example en,vi. Use all for everything available, or a pattern like en.* for every English variant.
Can I get SRT instead of VTT?
Yes — the .srt option converts them, which needs ffmpeg.