yt-dlp
npx skills add https://github.com/bahayonghang/my-claude-code-settings --skill yt-dlp
Agent 安装分布
Skill 文档
yt-dlp è§é¢ä¸è½½ Skill
åºäº yt-dlp çä¸ä¸è§é¢ä¸è½½å·¥å ·ï¼æ¯æ YouTubeãBilibiliãTwitterãInstagram ç 1000+ ç½ç«ã
éç¨åºæ¯
- ä¸è½½ YouTube è§é¢ï¼å« 4K/8KãHDRï¼
- ä¸è½½ Bilibili è§é¢ï¼èªå¨ç»å½ï¼
- ä¸è½½ç¤¾äº¤åªä½è§é¢ï¼TwitterãInstagramãTikTokï¼
- æ¹éä¸è½½ææ¾å表/é¢éè§é¢
- æåé³é¢ï¼å¶ä½æå®¢ãé³ä¹æ¶èï¼
- ä¸è½½è§é¢åå¹ï¼ç¨äºç¿»è¯ãå¦ä¹ ï¼
æ ¸å¿ç¹æ§
- æ ¼å¼æºè½éæ©: èªå¨éæ©æä½³è´¨éï¼è§é¢+é³é¢æä» è§é¢ï¼
- åå¹å¤ç: èªå¨ä¸è½½å¯ç¨åå¹ï¼æ¯æå¤è¯è¨ï¼
- ææ¾åè¡¨æ¯æ: æ¹éä¸è½½ï¼æ¯ææç¹ç»ä¼
- å æ°æ®ä¿ç: ä¿åæ é¢ãä¸ä¼ æ¶é´ãæè¿°çä¿¡æ¯
- 模æ¿åå½å: èªå®ä¹æä»¶åæ ¼å¼ï¼é¿å ä¹±ç ï¼
- ä»£çæ¯æ: æ¯æ HTTP/SOCKS 代ç
- é度éå¶: 坿§å¶ä¸è½½é度ï¼é¿å è¢«éæµ
ä½¿ç¨æ¹å¼
åºç¡ç¨æ³
# ç´æ¥ä¸è½½è§é¢ï¼æä½³è´¨éï¼
yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID"
# ä¸è½½å°æå®ç®å½
yt-dlp -o "Downloads/%(title)s.%(ext)s" "URL"
# ä»
ä¸è½½é³é¢ï¼æä½³è´¨é MP3ï¼
yt-dlp -x --audio-format mp3 "URL"
# ä¸è½½åå¹
yt-dlp --write-subs --sub-langs all "URL"
é«çº§é项
# éæ©ç¹å®è´¨é
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" "URL"
# ä¸è½½ææ¾å表
yt-dlp -o "%(playlist_index)s-%(title)s.%(ext)s" "PLAYLIST_URL"
# æ¹éä¸è½½ï¼ä»æä»¶è¯»å URLï¼
yt-dlp -a urls.txt
# éå¶ä¸è½½é度ï¼é¿å
被å°ï¼
yt-dlp --limit-rate 1M "URL"
# 使ç¨ä»£ç
yt-dlp --proxy http://127.0.0.1:7890 "URL"
# ä¸è½½åä¸åå¹¶ï¼ä¿çå离çè§é¢/é³é¢ï¼
yt-dlp --keep-video "URL"
常ç¨è¾åºæ¨¡æ¿
# ä¿çåè§é¢æ é¢
-o "%(title)s.%(ext)s"
# å
å«ä¸ä¼ è
ä¿¡æ¯
-o "%(uploader)s/%(title)s.%(ext)s"
# å
å«ä¸ä¼ æ¥æ
-o "%(upload_date)s-%(title)s.%(ext)s"
# ææ¾å表åºå·
-o "%(playlist_index)s-%(title)s.%(ext)s"
# 宿´å
æ°æ®ï¼ç¨äºæ´çï¼
-o "%(uploader)s/%(upload_date)s-%(title)s-[%(id)s].%(ext)s"
AI è¾ å©å·¥ä½æµ
å½ç¨æ·æä¾è§é¢é¾æ¥æ¶ï¼AI åºæä»¥ä¸æµç¨å¤çï¼
0. åç½®æ£æ¥ï¼FFmpeg ä¾èµæ£æµ
éè¦: FFmpeg æ¯ yt-dlp çå¿ éä¾èµï¼å¿ 须卿§è¡ä¸è½½åæ£æµå¹¶ç¡®ä¿å·²å®è£ ã
æ£æµæ¥éª¤:
-
æ£æµ FFmpeg æ¯å¦å·²å®è£ :
# macOS/Linux ffmpeg -version # Windows ffmpeg -version -
妿已å®è£ : æ¾ç¤ºçæ¬ä¿¡æ¯ï¼ç»§ç»æ§è¡ä¸ä¸æ¥
â FFmpeg å·²å®è£ : ffmpeg version N-xxxxx -
妿æªå®è£ : ç«å³åæ¢ï¼æç¤ºç¨æ·å®è£
æ ¹æ®æä½ç³»ç»æä¾å®è£ æä»¤:
-
macOS:
# ä½¿ç¨ Homebrew brew install ffmpeg # æä½¿ç¨ MacPorts sudo port install ffmpeg -
Linux (Ubuntu/Debian):
sudo apt update sudo apt install ffmpeg -
Linux (Arch/Manjaro):
sudo pacman -S ffmpeg -
Linux (Fedora):
sudo dnf install ffmpeg -
Windows:
# ä½¿ç¨ Scoop scoop install ffmpeg # ä½¿ç¨ Chocolatey choco install ffmpeg # æä»å®ç½ä¸è½½: https://ffmpeg.org/download.html -
éªè¯å®è£ :
ffmpeg -version
-
-
å®è£ åéªè¯: éæ°æ§è¡æ£æµå½ä»¤ï¼ç¡®è®¤æååæç»§ç»
AI åºéµå®çè§å:
- â 妿 FFmpeg æªå®è£ ï¼ç»ä¸æ§è¡ yt-dlp ä¸è½½å½ä»¤
- â å¿ é¡»æç¡®åç¥ç¨æ·ä¸ºä»ä¹éè¦ FFmpegï¼è§é¢/é³é¢åå¹¶ãæ ¼å¼è½¬æ¢ï¼
- â æä¾ä¸ç¨æ·æä½ç³»ç»å¹é çå®è£ å½ä»¤
- â çå¾ ç¨æ·ç¡®è®¤å®è£ 宿åæç»§ç»
1. è¯å«éæ±
询é®ç¨æ·ï¼å¦ææªæç¡®è¯´æï¼ï¼
- æ¯å¦éè¦é³é¢è¿æ¯è§é¢ï¼
- éè¦ä»ä¹è´¨éï¼1080p/4K/æä½³ï¼ï¼
- æ¯å¦éè¦åå¹ï¼
- æ¯å¦éè¦å æ°æ®ï¼ç¼©ç¥å¾ãæè¿°ãinfo.jsonï¼ï¼
2. æå»ºå½ä»¤
æ ¹æ®éæ±èªå¨çæ yt-dlp å½ä»¤ï¼
- èªå¨æ£æµç½ç«ç±»å
- éæ©æä½³æ ¼å¼é项
- æ·»å å¿ è¦çåæ°
- è¾åºæä»¶å模æ¿
3. æ§è¡ä¸è½½
å¨ç¨æ·çä¸è½½ç®å½æ§è¡å½ä»¤ï¼
- Windows:
%USERPROFILE%/Downloads - macOS:
~/Downloads - Linux:
~/Downloads
4. éªè¯ç»æ
æ£æ¥ä¸è½½æä»¶ï¼
- æä»¶å®æ´æ§
- æ ¼å¼æ£ç¡®æ§
- åå¹å卿§
常ç¨åºæ¯å½ä»¤
YouTube 髿¸ è§é¢
# 1080p è§é¢ + é³é¢
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" \
-o "%(title)s.%(ext)s" "URL"
# 4K è§é¢
yt-dlp -f "bestvideo[height<=2160]+bestaudio/best[height<=2160]" \
-o "%(title)s.%(ext)s" "URL"
Bilibili è§é¢
# éè¦ cookieï¼ç»å½å导åºï¼
yt-dlp --cookies cookies.txt \
-o "%(title)s.%(ext)s" "URL"
# ä¸è½½å¼¹å¹ï¼éè¦ä¸ç¨èæ¬ï¼
yt-dlp --write-info-json "URL"
æå®¢/é³é¢æå
# æä½³è´¨é MP3
yt-dlp -x --audio-format mp3 \
--audio-quality 0 \
-o "%(title)s.%(ext)s" "URL"
# æ¹éä¸è½½æå®¢å表
yt-dlp -x --audio-format mp3 \
-o "%(playlist_index)s-%(title)s.%(ext)s" \
"PLAYLIST_URL"
åå¹ä¸è½½
# ä¸è½½ææå¯ç¨åå¹
yt-dlp --write-subs --sub-langs all \
--skip-download "URL"
# ä¸è½½å
åµåå¹è§é¢
yt-dlp --embed-subs --sub-langs en,zh "URL"
# ä»
åå¹ï¼ä¸ä¸è½½è§é¢ï¼
yt-dlp --write-subs --skip-download "URL"
æ ¼å¼éæ©è¯æ³
# æ ¼å¼éæ©ä»£ç
bestvideo+bestaudio # æä½³è§é¢+é³é¢ï¼åå«ä¸è½½ååå¹¶ï¼
best # æä½³åæä»¶ï¼å·²åå¹¶ï¼
worst # æå·®è´¨éï¼ç¨äºæµè¯ï¼
# è¿æ»¤å¨
bestvideo[height<=1080] # æé« 1080p
bestvideo[fps<=30] # æé« 30fps
bestvideo[filesize<500M] # å°äº 500MB
bestvideo[acodec=opus] # æå®é³é¢ç¼ç
# ç»å
bestvideo[height<=1080]+bestaudio/best[height<=1080]
# å¤éæ¹æ¡ï¼ä»åå°åå°è¯ï¼
bestvideo+bestaudio/best
常è§ç½ç«æ¯æ
| ç½ç« | æ¯ææ åµ | ç¹æ®è¯´æ |
|---|---|---|
| YouTube | â å®å ¨æ¯æ | éè¦ä»£çï¼æäºå°åºï¼ |
| Bilibili | â æ¯æ | éè¦ cookie |
| Twitter/X | â æ¯æ | – |
| â æ¯æ | – | |
| TikTok | â æ¯æ | – |
| Vimeo | â æ¯æ | – |
| Twitch | â æ¯æ | – |
| Coursera | â æ¯æ | éè¦ç»å½ |
| Netflix | â ï¸ æéæ¯æ | éè¦ç¹å®å·¥å · |
é ç½®æä»¶
å ¨å±é ç½®
å建 ~/.config/yt-dlp/config (Linux/macOS) æ %APPDATA%\yt-dlp\config.txt (Windows):
# é»è®¤è¾åºç®å½
-o ~/Downloads/%(title)s.%(ext)s
# é»è®¤æ ¼å¼
-f bestvideo+bestaudio/best
# ä¸è½½åå¹
--write-subs
--sub-langs en,zh
# éå¶å¹¶å
--concurrent-fragments 4
# é度éå¶
--limit-rate 2M
项ç®çº§é ç½®
å¨é¡¹ç®ç®å½å建 yt-dlp.conf:
# 项ç®ç¹å®é
ç½®
-o ./videos/%(title)s.%(ext)s
--cookies cookies.txt
--download-archive downloaded.txt
æä½³å®è·µ
1. ç½ç»ç¨³å®æ§
# ä½¿ç¨ aria2 ä½ä¸ºä¸è½½å¨ï¼æ¯ææç¹ç»ä¼ ï¼
yt-dlp --external-downloader aria2 \
--external-downloader-args "-x 8 -k 1M" "URL"
# éè¯æºå¶
yt-dlp --retries 10 --fragment-retries 10 "URL"
2. é¿å 被å°
# éå¶é度
yt-dlp --limit-rate 1M "URL"
# 使ç¨ä»£çæ±
yt-dlp --proxy socks5://127.0.0.1:1080 "URL"
# æ¨¡ææµè§å¨
yt-dlp --user-agent "Mozilla/5.0..." "URL"
3. å æ°æ®ä¿ç
# ä¿åææå
æ°æ®
yt-dlp --write-info-json --write-description \
--write-thumbnail --embed-subs "URL"
# ä¸è½½ä¸º mkvï¼æ¯æææå
æ°æ®ï¼
yt-dlp --merge-output-format mkv "URL"
4. æ¹éå¤ç
# ä»æä»¶è¯»å URL
yt-dlp -a urls.txt -o "%(title)s.%(ext)s"
# æ¹éä¸è½½ææ¾åè¡¨ï¼æç¹ç»ä¼ ï¼
yt-dlp --download-archive archive.txt \
-o "%(title)s.%(ext)s" "PLAYLIST_URL"
常è§é®é¢
Q: ä¸è½½éåº¦æ ¢ï¼
A: å°è¯ä»¥ä¸æ¹æ³ï¼
- 使ç¨
--limit-rateéå¶é度 - 使ç¨ä»£ç
--proxy - åæ¢æ ¼å¼éæ©ï¼é¿å éè¦åå¹¶ï¼
- 使ç¨
--concurrent-fragmentså¢å å¹¶å
Q: è§é¢åé³é¢å离ï¼
A: 使ç¨ä»¥ä¸ä»»ä¸æ¹æ³ï¼
# æ¹æ³1ï¼æå®åå¹¶æ ¼å¼
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 "URL"
# æ¹æ³2ï¼ä½¿ç¨ FFmpeg åå¹¶
yt-dlp -f bestvideo+bestaudio --keep-video "URL"
ffmpeg -i video.mp4 -i audio.m4v -c copy output.mp4
Q: å¦ä½ä¸è½½ä»è´¹/ä¼åå 容ï¼
A: éè¦ cookieï¼
- ä½¿ç¨æµè§å¨æä»¶å¯¼åº cookieï¼å¦ “Get cookies.txt”ï¼
- 使ç¨
--cookies cookies.txtåæ° - 注æï¼cookie ä¼è¿æï¼éè¦å®ææ´æ°
Q: Bilibili ä¸è½½å¤±è´¥ï¼
A: 常è§è§£å³æ¹æ¡ï¼
# ä½¿ç¨ cookie
yt-dlp --cookies cookies.txt "URL"
# ä½¿ç¨ CNCore æåå¨
yt-dlp --extractor-args "bilivideo:session_data=..." "URL"
# åèï¼https://github.com/yt-dlp/yt-dlp/wiki/Installation
Q: å¦ä½ä¸è½½ç´æï¼
A:
# ä»å½åå¼å§ä¸è½½
yt-dlp "URL"
# ä»ç´æå¼å§æ¶ä¸è½½ï¼éè¦å½å¶ï¼
yt-dlp --live-from-start "URL"
# çå¾
ç´æå¼å§
yt-dlp --wait-for-video "URL"
ææ¯ç»è
ä¾èµé¡¹
- FFmpeg: å¿ éï¼ç¨äºè§é¢/é³é¢åå¹¶ãæ ¼å¼è½¬æ¢ï¼
- Python 3.8+: è¿è¡ç¯å¢
- RAR (å¯é): ç¨äºæäºç½ç«çä¸è½½
å®è£
# pip å®è£
pip install yt-dlp
# å
管çå¨ï¼æ¨èï¼
# macOS
brew install yt-dlp
# Linux (Arch)
pacman -S yt-dlp
# Windows (Scoop)
scoop install yt-dlp
# æ´æ°
yt-dlp --update
AI è¾ å©æ£æ¥æ¸ å
å¨çæä¸è½½å½ä»¤åï¼ç¡®è®¤ï¼
- ç½ç«æ¯å¦åæ¯æ
- æ¯å¦éè¦ cookie/代ç
- ç¨æ·éè¦çè´¨é/æ ¼å¼
- è¾åºç®å½åæä»¶å
- æ¯å¦éè¦åå¹
- æ¯å¦éè¦å æ°æ®
AI è¾åºæ ¼å¼
çæçå½ä»¤åºå å«ï¼
- å½ä»¤è¯´æï¼åä»ä¹ï¼
- 宿´å½ä»¤ï¼å¯å¤å¶ç²è´´ï¼
- åæ°è§£éï¼ä¸ºä»ä¹è¿æ ·éæ©ï¼
- é¢æç»æï¼ä¼å¾å°ä»ä¹æä»¶ï¼
- 注æäºé¡¹ï¼å¯è½çé误ï¼
示ä¾ï¼
## ä¸è½½ YouTube è§é¢ï¼1080pï¼
**å½ä»¤è¯´æ**: ä¸è½½ 1080p è§é¢åæä½³é³é¢ï¼èªå¨å并为 MP4
**宿´å½ä»¤**:
```bash
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" \
-o "%(title)s.%(ext)s" \
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
åæ°è§£é:
-f "bestvideo[height<=1080]+bestaudio": éæ©æé« 1080p è§é¢åæä½³é³é¢-o "%(title)s.%(ext)s": æä»¶å使ç¨åè§é¢æ é¢- èªå¨å并为å个 MP4 æä»¶
é¢æç»æ: Downloads/Rick Astley - Never Gonna Give You Up.mp4
注æäºé¡¹:
- éè¦ FFmpeg å·²å®è£
- ä¸è½½é度åå³äºç½ç»å YouTube éå¶
- å¦é 4Kï¼å°
1080æ¹ä¸º2160
## è¿é¶æå·§
### èªå®ä¹æåå¨
```bash
# 使ç¨ç¹å®æåå¨
yt-dlp --extractor-args "youtube:player_client=android" "URL"
# è·³è¿å¹´é¾éªè¯
yt-dlp --extractor-args "youtube:player_client=ios" "URL"
ææ¾åè¡¨è¿æ»¤
# ä»
ä¸è½½å 10 个
yt-dlp --playlist-end 10 "PLAYLIST_URL"
# ä¸è½½ç¹å®èå´
yt-dlp --playlist-start 5 --playlist-end 15 "PLAYLIST_URL"
# ååææ¾å表
yt-dlp --playlist-reverse "PLAYLIST_URL"
# éæºé¡ºåº
yt-dlp --playlist-random "PLAYLIST_URL"
ä¿¡æ¯æå
# ä»
æ¥çå¯ç¨æ ¼å¼ï¼ä¸ä¸è½½ï¼
yt-dlp --list-formats "URL"
# æ¥ç JSON ä¿¡æ¯
yt-dlp --dump-json "URL"
# æ¥çææ¾å表信æ¯
yt-dlp --flat-playlist --print "%(title)s" "PLAYLIST_URL"
åèèµæº
许å¯è¯
MIT License – èªç±ä½¿ç¨ãä¿®æ¹ååå
è´¡ç®
æ¬¢è¿æäº¤ Issue å Pull Request æ¹è¿æ¤ Skillï¼
注æ: 请éµå®ç®æ ç½ç«çæå¡æ¡æ¬¾åçææ³å¾ãä» ä¸è½½æ¨ææè®¿é®çå 容ã