Download video and audio from YouTube and 1000+ sites using yt-dlp. No API keys needed. Use when: (1) Downloading a video from YouTube or other sites, (2) Extracting audio from a video URL, (3) Downloading subtitles/captions from a video, (4) Getting video metadata without downloading.
Install
npx skills add https://github.com/calesthio/openmontage --skill video-downloadSKILL.md
video-download
Download video and audio from URLs using yt-dlp directly. No wrapper scripts needed.
Prerequisites
- yt-dlp:
brew install yt-dlporpip install yt-dlp - ffmpeg:
brew install ffmpegorapt install ffmpeg(required for merging video+audio streams)
Update yt-dlp periodically to keep up with site changes: yt-dlp -U or pip install -U yt-dlp.
Commands
Download best quality
yt-dlp "URL" -o "%(title)s.%(ext)s" --merge-output-format mp4
Download specific resolution
# 720p
yt-dlp "URL" -f "bestvideo[height<=720]+bestaudio/best[height<=720]" --merge-output-format mp4
# 1080p
yt-dlp "URL" -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" --merge-output-format mp4
Audio only
yt-dlp "URL" -x --audio-format mp3 --audio-quality 0
Download subtitles
# Download video with English subtitles
yt-dlp "URL" --write-subs --sub-langs en --merge-output-format mp4
# Download video with multiple subtitle languages
yt-dlp "URL" --write-subs --sub-langs "en,es,fr" --merge-output-format mp4
# Download only subtitles (no video)
yt-dlp "URL" --write-subs --sub-langs en --skip-download
Get metadata (no download)
yt-dlp "URL" --dump-json --no-download
List available formats
yt-dlp "URL" -F
Specify output directory
yt-dlp "URL" -o "./downloads/%(title)s.%(ext)s" --merge-output-format mp4
Quality Presets
| Quality | Format flag |
|---|---|
| Best | -f "bestvideo+bestaudio/best" (default) |
| 1080p | -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" |
| 720p | -f "bestvideo[height<=720]+bestaudio/best[height<=720]" |
| 480p | -f "bestvideo[height<=480]+bestaudio/best[height<=480]" |
| Worst | -f "worstvideo+worstaudio/worst" |
Output Template Variables
Common variables for -o templates:
| Variable | Description |
|---|---|
%(title)s |
Video title |
%(ext)s |
File extension |
%(id)s |
Video ID |
%(uploader)s |
Channel/uploader name |
%(upload_date)s |
Upload date (YYYYMMDD) |
%(duration)s |
Duration in seconds |
%(resolution)s |
Video resolution |
Tips
- Always use
--merge-output-format mp4to avoid ending up with.webmor.mkvfiles. - Use
--no-downloadwith--dump-jsonfor metadata-only queries -- no files written to disk. - If a download fails with HTTP errors, update yt-dlp first (
yt-dlp -U). - Use
-f "bestvideo[height<=720]+bestaudio"to save bandwidth when full resolution is not needed. - yt-dlp automatically handles rate limiting and retries.
- The
--dump-jsonoutput includestitle,duration,uploader,view_count,description,formats,subtitles, and much more.
Troubleshooting
- "yt-dlp: command not found": Install it (
pip install yt-dlp) and ensure your PATH includes pip's bin directory. - "ffmpeg: command not found": Install ffmpeg. Without it, downloads fail when video and audio are separate streams (common on YouTube for HD).
- Downloads fail or return errors: Run
yt-dlp -Uto update. Sites change frequently and yt-dlp ships fixes regularly.
Related skills
agent-browservercel-labs967KBrowser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use fojust-scrapescrapegraphai245KSearch, scrape, crawl, extract structured data, and monitor web pages via the ScrapeGraph AI CLI. Use when the user asks to search the web, scrape a webpage, grab content from a URL, extract JSON from a site, crawl documentation or site sections, monitor a page for changes, inspect request history, check ScrapeGraph credits, or validate API setup.browser-actbrowser-act108Kagent-browser101-skills104KBrowser automation for AI agents via inference.sh. Navigate web pages, interact with elements using @e refs, take screenshots, record video. Capabilities: web scraping, form filling, clicking, typing, drag-drop, file upload, JavaScript execution. Use for: web automation, data extraction, testing, agent browsing, research. Triggers: browser, web automation, scrape, navigate, click, fill form, screenshot, browse web, playwright, headless browser, web agent, surf internet, record video
