Skip to content
yt-dlp

yt-dlp Command Generator for Twitch

Build a yt-dlp command for Twitch VODs, clips and live streams, with the options that make long recordings survivable.

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

Your command

yt-dlp --merge-output-format mp4 -o '%(uploader)s - %(title)s.%(ext)s' -N 4 --live-from-start https://www.twitch.tv/videos/1234567890
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

VODs, clips and live

Twitch VODs are long, so parallel fragments make a real difference, and a section range is usually better than downloading eight hours to keep five minutes.

For live streams, record-from-the-start captures from the beginning where Twitch still has it. Prefer MKV: an interrupted MKV is normally still playable, where an MP4 cut off mid-write often is not.

Twitch serves VODs as HLS segments, and its CDN is generous — the practical limit is your connection, which is why parallel fragments genuinely help here where they hurt on Instagram. Subscribers-only VODs need cookies from an account subscribed to the channel; a session that cannot watch cannot download. Highlights are separate entries, not sub-playlists of the VOD — fetch them by their own URLs.

Clips are their own extractor with their own ceiling — a clip tops out at the source quality it was cut from, often 1080p60, and the clip URL will not give you the full VOD it came from. To keep a segment of a VOD, download the VOD and cut locally, or use the section range: --download-sections takes a timestamp window without fetching eight hours to keep five minutes, and it pairs naturally with the chapter metadata.

Ads used to be baked into Twitch VOD segments — yt-dlp's Twitch extractor now splices them out, but only in recent versions, so an old binary yields a recording with ad breaks. Update if a VOD has unexplained cuts. The unsubscribe wall is the other boundary: no option reaches a subscribers-only VOD without the session, and there is no way to fake one.

For chat: Twitch stores chat as a separate artifact, and yt-dlp saves it as JSON with --write-subs mapped to it — the file is not a subtitle format, and tools that render chat into video are a separate step. Everything else follows the shape you expect: the archive file for ongoing channel sync, MKV for live, MP4 for VODs, and the playlist index only when a multi-part item makes it meaningful.

Frequently asked questions

How do I download a Twitch VOD?
Pass the VOD URL. They are long, so raise parallel fragments to speed it up, and use a section range if you only want part of it.
Can I record a live Twitch stream?
Yes. Record-from-the-start captures from the beginning rather than the current moment, where the stream allows it. MKV survives an interrupted recording better than MP4.
Do clips work?
Yes, clip URLs work directly and need no special options.
What about subscriber-only VODs?
You need a subscribed session: --cookies-from-browser with the account that holds the subscription.