youtube-download
npx skills add https://github.com/lxmxhh/cc-skill-youtube-download --skill youtube-download
Agent 安装分布
Skill 文档
YouTube è§é¢ä¸è½½å·¥å ·
ä¸ä¸ªæºè½ç YouTube è§é¢ä¸è½½å·¥å ·ï¼æ¯æå¤ç§ä¸è½½çç¥ï¼èªå¨éè¯ç´å°æå
åè½ç¹ç¹
- ð¯ ä¼å ä¸è½½ MP4 æ ¼å¼ï¼å ¼å®¹æ§æå¥½ï¼
- ð å¤ç§ä¸è½½çç¥èªå¨åæ¢
- ðª æºè½ Cookie 管ç
- ð 宿¶ä¸è½½è¿åº¦æ¾ç¤º
- ð¬ æ¯æå¤ç§è§é¢è´¨ééæ©
- ð èªå¨ä¸è½½åå¹ï¼å¯éï¼
工使µç¨
å½ç¨æ·è§¦åè¿ä¸ª Skill æ¶ï¼æç §ä»¥ä¸æµç¨æ§è¡ï¼
é¶æ®µ 1: è·åä¸è½½ URL
- æ£æ¥ç¨æ·æ¯å¦æä¾äº YouTube URL
- å¦ææ²¡ææä¾ï¼è¯¢é®ç¨æ·è¦ä¸è½½çè§é¢é¾æ¥
- éªè¯ URL æ ¼å¼æ¯å¦æ£ç¡®
é¶æ®µ 2: 询é®ä¸è½½é项
ä½¿ç¨ AskUserQuestion å·¥å ·è¯¢é®ç¨æ·ï¼
-
è§é¢è´¨é:
- æé«è´¨éï¼æ¨èï¼
- 1080p
- 720p
- 480p
- ä» é³é¢
-
æ¯å¦ä¸è½½åå¹:
- æ¯ï¼ä¸è½½ææå¯ç¨åå¹ï¼
- å¦
-
è¾åºç®å½:
- 使ç¨é»è®¤ç®å½ï¼å½åå·¥ä½ç®å½ï¼
- æå®èªå®ä¹è·¯å¾
é¶æ®µ 3: ç¯å¢æ£æµ
æ£æ¥å¿ éçå·¥å ·æ¯å¦å·²å®è£ ï¼
# æ£æ¥ yt-dlp
yt-dlp --version
# æ£æ¥ Python ç¯å¢
python --version
python -c "import yt_dlp; print('yt-dlp module available')"
å¦æç¼ºå°å·¥å ·ï¼æç¤ºç¨æ·å®è£ ï¼
- Windows:
pip install yt-dlp - macOS/Linux:
brew install yt-dlpæpip install yt-dlp
é¶æ®µ 4: æºè½ä¸è½½ï¼æ ¸å¿åè½ï¼
使ç¨å¤ç§çç¥ä¾æ¬¡å°è¯ï¼ç´å°æåï¼
çç¥ 1: ç´æ¥ä¸è½½ï¼æ Cookieï¼
- æç®åçæ¹å¼
- éç¨äºå¤§å¤æ°å ¬å¼è§é¢
- 失败åèªå¨è¿å ¥çç¥ 2
yt-dlp \
--format "bestvideo[ext=mp4][height<=1080]+bestaudio[ext=m4a]/best[ext=mp4]/best" \
--merge-output-format mp4 \
--output "%(title)s.%(ext)s" \
"<youtube_url>"
çç¥ 2: ä½¿ç¨ Cookies æä»¶
- æ£æ¥ skill ç®å½ä¸ç cookies.txt
- 妿åå¨ä¸æªè¿æï¼ä½¿ç¨å®ä¸è½½
- 失败åèªå¨è¿å ¥çç¥ 3
yt-dlp \
--cookies "./cookies.txt" \
--format "bestvideo[ext=mp4][height<=1080]+bestaudio[ext=m4a]/best[ext=mp4]/best" \
--merge-output-format mp4 \
--output "%(title)s.%(ext)s" \
"<youtube_url>"
çç¥ 3: 仿µè§å¨æå Cookies
- å°è¯ä» ChromeãFirefoxãEdge çæµè§å¨æå cookies
- æä¼å çº§ä¾æ¬¡å°è¯ï¼Chrome -> Firefox -> Edge -> Safari
# å°è¯ Chrome
yt-dlp --cookies-from-browser chrome --format "..." "<youtube_url>"
# 失败åå°è¯ Firefox
yt-dlp --cookies-from-browser firefox --format "..." "<youtube_url>"
# 失败åå°è¯ Edge
yt-dlp --cookies-from-browser edge --format "..." "<youtube_url>"
çç¥ 4: 使ç¨ä»£çï¼å¦æåé¢é½å¤±è´¥ï¼
- 询é®ç¨æ·æ¯å¦è¦ä½¿ç¨ä»£ç
- æä¾ä»£çé ç½®é项
yt-dlp --proxy "http://proxy:port" --format "..." "<youtube_url>"
çç¥ 5: é级ä¸è½½ï¼æåææ®µï¼
- éä½è§é¢è´¨éè¦æ±
- å°è¯ä¸è½½ä»»ä½å¯ç¨æ ¼å¼
yt-dlp --format "best" "<youtube_url>"
é¶æ®µ 5: è¿åº¦æ¾ç¤º
å¨ä¸è½½è¿ç¨ä¸æ¾ç¤ºï¼
- ä¸è½½è¿åº¦ç¾åæ¯
- å·²ä¸è½½å¤§å° / æ»å¤§å°
- ä¸è½½é度
- é¢è®¡å©ä½æ¶é´
示ä¾è¾åºï¼
ð¬ æ£å¨ä¸è½½: è§é¢æ é¢
çç¥: ä½¿ç¨ Chrome æµè§å¨ Cookies
[ââââââââââââââââââââââââ] 67.8%
å·²ä¸è½½: 234 MB / 345 MB
é度: 5.2 MB/s
å©ä½æ¶é´: 00:21
é¶æ®µ 6: ä¸è½½åå¤ç
-
éªè¯æä»¶:
- æ£æ¥æä»¶æ¯å¦å®æ´
- éªè¯æä»¶å¤§å°
- ä½¿ç¨ ffprobe æ£æ¥è§é¢å æ°æ®
-
æ ¼å¼è½¬æ¢ï¼å¦æéè¦ï¼:
- 妿ä¸è½½ç䏿¯ mp4 æ ¼å¼ï¼èªå¨è½¬æ¢
- ä½¿ç¨ FFmpeg è¿è¡è½¬æ¢
- ä¿æåå§è´¨é
-
ä¸è½½åå¹ï¼å¦æç¨æ·éæ©ï¼:
- ä¸è½½ææå¯ç¨è¯è¨çåå¹
- ä¼å VTT æ ¼å¼ï¼å¤é SRT æ ¼å¼
-
çæå æ°æ®æä»¶:
- å建 JSON æä»¶å å«è§é¢ä¿¡æ¯
- å æ¬æ é¢ãæ¶é¿ãä¸ä¼ è ãæè¿°ç
é¶æ®µ 7: è¾åºç»æ
åç¨æ·å±ç¤ºï¼
- ä¸è½½æåçæä»¶è·¯å¾
- è§é¢ä¿¡æ¯ï¼æ é¢ãæ¶é¿ã大å°ï¼
- 使ç¨çä¸è½½çç¥
- å广件å表ï¼å¦ææï¼
示ä¾è¾åºï¼
â
ä¸è½½æåï¼
ð æä»¶ä¿¡æ¯:
æ é¢: 为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼
è·¯å¾: ./为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼.mp4
大å°: 535 MB
æ¶é¿: 26:02
å辨ç: 1920x1080
ð¯ ä¸è½½çç¥: ä½¿ç¨ Chrome æµè§å¨ Cookies
ð å广件:
- 为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼.zh-Hans.vtt (ç®ä½ä¸æ)
- 为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼.zh-Hant.vtt (ç¹ä½ä¸æ)
- 为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼.en.vtt (è±æ)
ð¡ å¿«éé¢è§:
open "./为ä»ä¹å¤§å¤æ°äººçåªå齿¯æ æçï¼.mp4"
å ³é®ææ¯ç¹
1. Cookie 管ççç¥
Cookie æä»¶ä½ç½®: ~/.claude/skills/youtube-download/cookies.txt
Cookie ä¼å 级:
- ç¨æ·æä¾ç cookies.txtï¼skill ç®å½ä¸ï¼
- 仿µè§å¨èªå¨æåï¼Chrome > Firefox > Edge > Safariï¼
- æ Cookie ç´æ¥ä¸è½½
Cookie è¿ææ£æµ:
- æè· “Sign in to confirm you’re not a bot” é误
- èªå¨åæ¢å°ä¸ä¸ä¸ªçç¥
2. æ ¼å¼ä¼å 级
MP4 ä¼å çç¥:
# 第ä¸ä¼å
ï¼MP4 è§é¢ + M4A é³é¢
bestvideo[ext=mp4][height<=1080]+bestaudio[ext=m4a]
# 第äºä¼å
ï¼æä½³ MP4
best[ext=mp4][height<=1080]
# 第ä¸ä¼å
ï¼ä»»ä½æä½³æ ¼å¼
best[height<=1080]
# æåï¼ä»»ä½æ ¼å¼
best
3. é误å¤ç
常è§é误åè§£å³æ¹æ¡:
| éè¯¯ä¿¡æ¯ | åå | è§£å³æ¹æ¡ |
|---|---|---|
| “Sign in to confirm you’re not a bot” | Cookie æ æ/缺失 | 忢尿µè§å¨ Cookie æå |
| “Video unavailable” | è§é¢è¢«å é¤æç§æ | æç¤ºç¨æ·æ£æ¥ URL |
| “This video is age restricted” | å¹´é¾éå¶ | å¿ é¡»ä½¿ç¨ææ Cookie |
| “HTTP Error 429: Too Many Requests” | 请æ±è¿å¤ | çå¾ æä½¿ç¨ä»£ç |
| “No video formats found” | å°åºéå¶ | 使ç¨ä»£ç |
4. è¿åº¦æ¾ç¤º
ä½¿ç¨ yt-dlp çè¿åº¦é©å宿¶æ´æ°ï¼
- ä¸è½½ç¾åæ¯
- ä¸è½½é度
- ETAï¼é¢è®¡å®ææ¶é´ï¼
- å·²ä¸è½½/æ»å¤§å°
5. å¹¶åä¸è½½
å¦æç¨æ·æä¾å¤ä¸ª URLï¼
- è¯¢é®æ¯å¦å¹¶åä¸è½½
- éå¶å¹¶åæ°ï¼å»ºè®® 3 个ï¼
- æ¾ç¤ºæ´ä½è¿åº¦
Python èæ¬è¯´æ
download_video.py
æ ¸å¿ä¸è½½èæ¬ï¼å®ç°æºè½éè¯æºå¶ï¼
def download_with_strategies(url, quality, output_dir):
"""
使ç¨å¤ç§çç¥ä¾æ¬¡å°è¯ä¸è½½
è¿åï¼æå使ç¨ççç¥åæä»¶è·¯å¾
"""
strategies = [
('direct', download_direct),
('cookies_file', download_with_cookies_file),
('browser_chrome', download_from_browser_chrome),
('browser_firefox', download_from_browser_firefox),
('browser_edge', download_from_browser_edge),
('fallback', download_fallback)
]
for strategy_name, strategy_func in strategies:
try:
result = strategy_func(url, quality, output_dir)
return strategy_name, result
except Exception as e:
print(f"â çç¥ {strategy_name} 失败: {e}")
continue
raise Exception("ææä¸è½½çç¥é½å¤±è´¥äº")
check_cookies.py
æ£æ¥å管ç Cookiesï¼
def check_cookies_validity(cookies_path):
"""æ£æ¥ cookies æä»¶æ¯å¦ææ"""
# å°è¯ä½¿ç¨ cookies è·åè§é¢ä¿¡æ¯
# å¦æå¤±è´¥ï¼è¿å False
def export_cookies_from_browser(browser_name):
"""仿µè§å¨å¯¼åº cookies"""
# ä½¿ç¨ yt-dlp çå
ç½®åè½
# ä¿åå° cookies.txt
convert_format.py
æ ¼å¼è½¬æ¢å·¥å ·ï¼
def convert_to_mp4(input_path, output_path):
"""
å°ä»»ä½è§é¢æ ¼å¼è½¬æ¢ä¸º MP4
ä½¿ç¨ FFmpeg
"""
ç¨æ·ä½éªä¼å
1. æºè½å»ºè®®
æ ¹æ®è§é¢ä¿¡æ¯ç»åºå»ºè®®ï¼
- 妿è§é¢å¾å¤§ï¼>1GBï¼ï¼å»ºè®®éä½è´¨é
- 妿æ¯é³ä¹è§é¢ï¼å»ºè®®”ä» é³é¢”é项
- å¦ææ¯æç¨è§é¢ï¼å»ºè®®ä¸è½½åå¹
2. æ¹éä¸è½½
æ¯æææ¾å表åå¤ä¸ª URLï¼
# ææ¾å表
yt-dlp --yes-playlist "<playlist_url>"
# å¤ä¸ª URL
# ä»æä»¶è¯»å URLs
3. æç¹ç»ä¼
妿ä¸è½½ä¸æï¼
- èªå¨æ£æµæªå®æçä¸è½½
- è¯¢é®æ¯å¦ç»§ç»
- 使ç¨
--continueåæ°
4. ä¸è½½åå²
è®°å½ä¸è½½åå²ï¼
- ä¿åå¨
~/.claude/skills/youtube-download/history.json - é¿å éå¤ä¸è½½
- æä¾å岿¥è¯¢åè½
é ç½®æä»¶
config.json
{
"default_quality": "1080p",
"default_output_dir": "~/Downloads/YouTube",
"auto_download_subtitles": false,
"preferred_subtitle_languages": ["zh-Hans", "zh-Hant", "en"],
"cookies_path": "./cookies.txt",
"max_concurrent_downloads": 3,
"enable_download_history": true,
"auto_convert_to_mp4": true
}
使ç¨ç¤ºä¾
ç¤ºä¾ 1: åºæ¬ä¸è½½
ç¨æ·: /youtube-download https://youtube.com/watch?v=xxxxx
婿:
- 询é®è´¨éé项ï¼éæ©ï¼æé«è´¨éï¼
- è¯¢é®æ¯å¦ä¸è½½åå¹ï¼éæ©ï¼æ¯ï¼
- å¼å§ä¸è½½ï¼çç¥1失败 -> çç¥2æåï¼
- æ¾ç¤ºç»æ
ç¤ºä¾ 2: æ¹éä¸è½½
ç¨æ·: /youtube-download ä¸è½½è¿ä¸ªææ¾å表 <playlist_url>
婿:
- æ£æµå°ææ¾å表
- æ¾ç¤ºææ¾å表信æ¯ï¼23个è§é¢ï¼
- è¯¢é®æ¯å¦å
¨é¨ä¸è½½
- å¹¶åä¸è½½ï¼3ä¸ªåæ¶ï¼
ç¤ºä¾ 3: é误æ¢å¤
ç¨æ·: /youtube-download <url>
婿:
- çç¥1失败ï¼éè¦ç»å½ï¼
- çç¥2失败ï¼cookiesè¿æï¼
- çç¥3æåï¼ä»Chromeæåæ°cookiesï¼
- èªå¨ä¿åæ°cookiesä¾ä¸æ¬¡ä½¿ç¨
å¼å§æ§è¡
å½ç¨æ·è§¦åæ¤ Skill æ¶ï¼
- ç«å³è·å URLï¼ä»åæ°æè¯¢é®ç¨æ·ï¼
- 询é®ä¸è½½é项ï¼è´¨éãåå¹ãè¾åºç®å½ï¼
- æ£æ¥ç¯å¢ï¼yt-dlpãPythonãFFmpegï¼
- å¼å§æºè½ä¸è½½ï¼èªå¨å°è¯å¤ç§çç¥ï¼
- æ¾ç¤ºå®æ¶è¿åº¦
- éªè¯ååå¤ç
- å±ç¤ºç»æ
æ ¸å¿ä»·å¼:
- ð¯ æºè½éè¯: èªå¨å°è¯å¤ç§æ¹å¼ï¼ä¸éè¦ç¨æ·å¹²é¢
- ðª Cookie 管ç: æºè½å¤ç YouTube ç身份éªè¯
- ð¦ å¼ç®±å³ç¨: 䏿¬¡é ç½®ï¼æ°¸ä¹ 使ç¨
- ð å®¹éæ§å¼º: éå°é®é¢èªå¨åæ¢çç¥
让æä»¬å¼å§å§ï¼