Command-line workflow

How to Use yt-dlp for Videos You Own or Can Download

A permission-first yt-dlp workflow using official installation, format selection, output templates, archive files, and verification—without browser-cookie or access-bypass shortcuts.

What yt-dlp is—and what it is not

yt-dlp is an open-source command-line program that can inspect and download media from many supported websites. It is powerful because it exposes format selection, output naming, destination paths, subtitles, and repeatable batch behavior without requiring a graphical interface.

It does not grant permission, restore expired access, remove DRM, or make every player downloadable. Use it only for videos you created, public-domain material, or media whose owner has clearly allowed you to save a copy.

This article uses public or creator-controlled URLs. It intentionally does not cover copying browser cookies, exporting sessions, or bypassing a site's normal access controls.

Install from an official source

The project publishes binaries and Python-package instructions in its official installation guide. Choose the method appropriate for your operating system and verify the installed command:

yt-dlp --version

The official README also documents the self-update command for supported release binaries:

yt-dlp -U

Package-manager installations may need to be updated through that package manager instead. Avoid downloading repackaged binaries from an unknown “video downloader” site.

For high-quality video and audio that are published as separate streams, yt-dlp may use ffmpeg to merge them. The program will report when that dependency is missing. Install it from its official project or a trusted package manager rather than a random executable mirror.

Test the URL before building a workflow

Start with one short video you own or are explicitly allowed to download. Put the URL in quotes so shell characters are not interpreted:

yt-dlp "https://example.com/your-authorized-video"

By default, current yt-dlp versions try to select the best available video and audio combination. The exact result depends on the extractor, source formats, and whether merging tools are available.

Open the completed file immediately. Confirm that it contains picture and audio and that seeking to the middle and end works.

Inspect available formats

Use -F to list the versions a supported source exposes without downloading the video:

yt-dlp -F "https://example.com/your-authorized-video"

The format table can include resolution, container, codecs, audio presence, and estimated bitrate. Format IDs are extractor-specific, so do not assume that an ID from one website means the same thing on another.

For a general study archive, the default selection is a sensible first test. If you need to limit resolution, the official format selector supports constraints. For example:

yt-dlp -f "bv*[height<=1080]+ba/b[height<=1080]" "https://example.com/your-authorized-video"

That requests a video up to 1080p plus the best available audio, with a combined-file fallback. It does not upscale a lower-resolution source.

Read 720p vs 1080p for offline course videos before applying one ceiling to an entire library.

Control the destination and filename

The official README documents -P for the destination path and -o for the output template. A simple course archive could use:

yt-dlp -P "./course-archive" -o "%(title)s [%(id)s].%(ext)s" "https://example.com/your-authorized-video"

Keep %(ext)s in the template. Hard-coding .mp4 into the filename can mislabel an output or interfere with post-processing when the selected source uses another container.

For an authorized playlist you own, a numbered template preserves order:

yt-dlp -P "./course-archive" -o "%(playlist_index)03d - %(title)s [%(id)s].%(ext)s" "https://example.com/your-authorized-playlist"

Not every supported site exposes playlist indexes. Test the template against one small, noncritical collection before relying on it. The course file-naming system explains how to turn raw output into a durable lesson structure.

Prevent accidental repeat downloads

For a collection you are authorized to archive, yt-dlp can record completed media IDs:

yt-dlp --download-archive downloaded.txt "https://example.com/your-authorized-playlist"

On later runs, entries already recorded in downloaded.txt are skipped. Keep that file with the project manifest. It records tool completion, not human verification: you still need to open and check the media.

Save subtitles when the source provides them

List available subtitles first:

yt-dlp --list-subs "https://example.com/your-authorized-video"

Then request published subtitles where available:

yt-dlp --write-subs --sub-langs "en.*" "https://example.com/your-authorized-video"

Subtitle availability, language labels, and permission vary by source. Automatically generated captions can contain significant errors, especially for names, code, and technical terms. Treat them as a study aid rather than a verified transcript.

Understand the common failure categories

SymptomLikely categoryResponsible next step
“Unsupported URL”No extractor recognizes the pageCheck the current official support/issue documentation; do not paste it into unknown downloader sites
No formats listedThe page is not a supported media source or access is restrictedUse the creator-provided download or ask the owner
Video and audio remain separateffmpeg is missing or merge failedInstall or repair a trusted ffmpeg build, then retry your authorized source
Old command stops workingThe site or extractor changedUpdate yt-dlp and reproduce with one permitted test URL
Output name is strangeMetadata fields differ by sourceSimplify the output template and retain the media ID

Do not respond to an authorization error by searching for session-export or cookie-theft instructions. If the source owner has not supplied a download path, ask them for one.

When a browser extension is the better fit

yt-dlp is strongest when a supported URL works directly and you want reproducible command-line control. A browser extension can be easier when the legitimate workflow begins inside a lesson page and the player must be activated in the browser.

The comparison guide, yt-dlp vs a browser extension for Skool videos, explains the tradeoffs without assuming one tool works for every provider.

Final safe-use checklist

  • You own the video or have clear permission to download it.
  • The URL is public, creator-controlled, or supplied for download.
  • yt-dlp came from the official project or a trusted package manager.
  • One short file was tested before a larger collection.
  • Resolution and storage were chosen intentionally.
  • The output template retains a useful title and stable media ID.
  • Every completed file was opened and checked.
  • No browser cookies, session tokens, or signed URLs were shared.

For Skool lesson pages specifically, start with the local Skool Course Downloader guide because the provider and open lesson context can materially change the workflow.

Use the Skool-aware extension when course context matters more than command-line control. Shown with privacy-safe synthetic course data.
Prefer a browser workflow?Use the Skool-aware extension when course context matters more than command-line control.

The extension starts from the classroom and opens an ordered course side panel. yt-dlp remains a separate URL-first tool for sources it supports and you are authorized to save.

Current testing-build capture with synthetic data. Check compatibility and limitations.

Last substantively reviewed August 2, 2026. See our editorial and corrections policy.