$npx -y skills add xiaomoBoy/claude-writing-skills --skill yt-dlp-directUse when the user wants to download or inspect online audio/video directly with the installed yt-dlp CLI. Best for single videos, playlists, audio extraction, subtitle download, format inspection, output templates, cookies-from-browser flows, and practical troubleshooting of `y
| 1 | # yt-dlp Direct |
| 2 | |
| 3 | 这个 skill 只负责一件事: |
| 4 | |
| 5 | - 直接用本机已安装的 `yt-dlp` CLI 处理在线视频或音频下载任务 |
| 6 | |
| 7 | 不负责: |
| 8 | |
| 9 | - 讲版权合规政策 |
| 10 | - 绕开平台 DRM |
| 11 | - 用浏览器手动录屏替代下载 |
| 12 | - 重新安装 `yt-dlp` |
| 13 | |
| 14 | 一句话原则:如果用户要下载、提音频、拿字幕、看格式、抓播放列表,优先直接用 `yt-dlp`,不要先写一堆脚本。 |
| 15 | |
| 16 | ## When To Use |
| 17 | |
| 18 | 适用场景: |
| 19 | |
| 20 | - 用户说“用 `yt-dlp` 下载这个视频” |
| 21 | - 用户说“帮我提成 mp3 / m4a” |
| 22 | - 用户说“把字幕也一起下了” |
| 23 | - 用户说“先看看有哪些格式” |
| 24 | - 用户说“下载整个 playlist / channel / 搜索结果” |
| 25 | - 用户说“这个站点能不能用 `yt-dlp`” |
| 26 | |
| 27 | 不适用场景: |
| 28 | |
| 29 | - 用户只是想知道 `yt-dlp` 是什么 |
| 30 | - 用户要破解 DRM 或受保护流 |
| 31 | - 用户要做复杂媒体剪辑,真正该用 `ffmpeg` |
| 32 | |
| 33 | ## Preconditions |
| 34 | |
| 35 | 开始前先确认: |
| 36 | |
| 37 | 1. `yt-dlp` 在 PATH 中 |
| 38 | 2. 当前目录或目标目录可写 |
| 39 | 3. 如果任务涉及合并视频音频、转码、嵌入缩略图,最好已有 `ffmpeg` |
| 40 | |
| 41 | 优先检查: |
| 42 | |
| 43 | ```bash |
| 44 | which yt-dlp |
| 45 | yt-dlp --version |
| 46 | ``` |
| 47 | |
| 48 | 如需判断 `ffmpeg` 是否可用,可再看: |
| 49 | |
| 50 | ```bash |
| 51 | ffmpeg -version |
| 52 | ffprobe -version |
| 53 | ``` |
| 54 | |
| 55 | ## Working Rules |
| 56 | |
| 57 | - 默认先做只读探测,再真正下载 |
| 58 | - 不清楚格式时,先 `-F` |
| 59 | - 用户没指定落盘规则时,优先给安全输出模板 |
| 60 | - 播放列表默认提醒数量和体积风险 |
| 61 | - 涉及登录态时,优先 `--cookies-from-browser` |
| 62 | - 需要更稳定的 YouTube 支持时,记得 JavaScript runtime / ejs 依赖 |
| 63 | - 不要擅自覆盖大量文件;必要时显式指定输出路径 |
| 64 | |
| 65 | ## Core Workflow |
| 66 | |
| 67 | ### 1. Inspect First |
| 68 | |
| 69 | 先判断链接能不能被 extractor 识别: |
| 70 | |
| 71 | ```bash |
| 72 | yt-dlp --simulate --print "%(title)s" "<url>" |
| 73 | ``` |
| 74 | |
| 75 | 如果只是想看元信息而不下载: |
| 76 | |
| 77 | ```bash |
| 78 | yt-dlp --dump-single-json "<url>" |
| 79 | ``` |
| 80 | |
| 81 | ### 2. Check Formats Before Download |
| 82 | |
| 83 | 当用户要指定清晰度、编码、音轨,先看格式: |
| 84 | |
| 85 | ```bash |
| 86 | yt-dlp -F "<url>" |
| 87 | ``` |
| 88 | |
| 89 | 如果用户没明确要求,通常优先: |
| 90 | |
| 91 | ```bash |
| 92 | yt-dlp -f "bv*+ba/b" "<url>" |
| 93 | ``` |
| 94 | |
| 95 | 这也是 yt-dlp 当前默认偏好的组合思路。 |
| 96 | |
| 97 | ### 3. Safe Single-Video Download |
| 98 | |
| 99 | 默认建议带输出模板: |
| 100 | |
| 101 | ```bash |
| 102 | yt-dlp -o "%(title)s [%(id)s].%(ext)s" "<url>" |
| 103 | ``` |
| 104 | |
| 105 | 如果需要固定目录: |
| 106 | |
| 107 | ```bash |
| 108 | yt-dlp -P "/target/dir" -o "%(title)s [%(id)s].%(ext)s" "<url>" |
| 109 | ``` |
| 110 | |
| 111 | ### 4. Extract Audio |
| 112 | |
| 113 | 用户要音频时,优先: |
| 114 | |
| 115 | ```bash |
| 116 | yt-dlp -x --audio-format mp3 "<url>" |
| 117 | ``` |
| 118 | |
| 119 | 更保守地保留高质量音频格式时: |
| 120 | |
| 121 | ```bash |
| 122 | yt-dlp -x --audio-format m4a "<url>" |
| 123 | ``` |
| 124 | |
| 125 | ### 5. Download Subtitles |
| 126 | |
| 127 | 只下字幕,不下视频: |
| 128 | |
| 129 | ```bash |
| 130 | yt-dlp --write-subs --write-auto-subs --skip-download "<url>" |
| 131 | ``` |
| 132 | |
| 133 | 如果用户只要特定语言: |
| 134 | |
| 135 | ```bash |
| 136 | yt-dlp --write-subs --sub-langs "en,zh-Hans,zh-Hant" --skip-download "<url>" |
| 137 | ``` |
| 138 | |
| 139 | ### 6. Playlists and Channels |
| 140 | |
| 141 | 用户给 playlist 时,先提醒量级。常用命令: |
| 142 | |
| 143 | ```bash |
| 144 | yt-dlp --flat-playlist "<playlist-url>" |
| 145 | yt-dlp -I 1:10 "<playlist-url>" |
| 146 | yt-dlp -o "%(playlist_index)s - %(title)s [%(id)s].%(ext)s" "<playlist-url>" |
| 147 | ``` |
| 148 | |
| 149 | 先用 `--flat-playlist` 看条目,再决定是否全下。 |
| 150 | |
| 151 | ### 7. Search Shortcuts |
| 152 | |
| 153 | 如果用户只有关键词,没有直接链接,可以用搜索前缀: |
| 154 | |
| 155 | ```bash |
| 156 | yt-dlp "ytsearch5:Claude Code skills" |
| 157 | ``` |
| 158 | |
| 159 | 只拿结果,不立即下载时: |
| 160 | |
| 161 | ```bash |
| 162 | yt-dlp --simulate --print "%(title)s | %(webpage_url)s" "ytsearch5:Claude Code skills" |
| 163 | ``` |
| 164 | |
| 165 | ## Authentication and Cookies |
| 166 | |
| 167 | 很多站点或私有内容需要登录态。优先顺序: |
| 168 | |
| 169 | 1. `--cookies-from-browser` |
| 170 | 2. `--cookies <file>` |
| 171 | 3. 用户名/密码或 netrc |
| 172 | |
| 173 | 高频用法: |
| 174 | |
| 175 | ```bash |
| 176 | yt-dlp --cookies-from-browser chrome "<url>" |
| 177 | yt-dlp --cookies-from-browser safari "<url>" |
| 178 | yt-dlp --cookies cookies.txt "<url>" |
| 179 | ``` |
| 180 | |
| 181 | 如果站点要求浏览器指纹或 TLS 模拟,可考虑: |
| 182 | |
| 183 | ```bash |
| 184 | yt-dlp --impersonate chrome "<url>" |
| 185 | ``` |
| 186 | |
| 187 | ## Output Templates |
| 188 | |
| 189 | 默认模板建议: |
| 190 | |
| 191 | ```bash |
| 192 | %(title)s [%(id)s].%(ext)s |
| 193 | ``` |
| 194 | |
| 195 | 播放列表常用: |
| 196 | |
| 197 | ```bash |
| 198 | %(playlist_index)s - %(title)s [%(id)s].%(ext)s |
| 199 | ``` |
| 200 | |
| 201 | 按上传者归档: |
| 202 | |
| 203 | ```bash |
| 204 | %(uploader)s/%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s |
| 205 | ``` |
| 206 | |
| 207 | ## Format and Postprocessing Notes |
| 208 | |
| 209 | - 合并音视频、高级转码、嵌入缩略图通常依赖 `ffmpeg` |
| 210 | - `-x` 是提取音频,不是原封不动复制音轨 |
| 211 | - 要控制容器或编码时,优先明确 `-f`、`-S`、`--remux-video`、`--recode-video` |
| 212 | |
| 213 | 常见例子: |
| 214 | |
| 215 | ```bash |
| 216 | yt-dlp -S "res:1080,ext:mp4:m4a" "<url>" |
| 217 | yt-dlp --remux-video mp4 "<url>" |
| 218 | yt-dlp --embed-thumbnail --add-metadata "<url>" |
| 219 | ``` |
| 220 | |
| 221 | ## Supported Sites |
| 222 | |
| 223 | `yt-dlp` 支持站点很多,但“列在清单里”不等于今天一定能用。 |
| 224 | |
| 225 | 判断顺序: |
| 226 | |
| 227 | 1. 先尝试 `--simulate` |
| 228 | 2. 再看报错是否为登录、区域、格式、站点变更 |
| 229 | 3. 真要确认 extractor 名称,再看支持站点清单 |
| 230 | |
| 231 | 需要时读取: |
| 232 | |
| 233 | - [references/high-frequency-patterns.md](references/high-frequency-patterns.md) |
| 234 | |
| 235 | ## Output Contract |
| 236 | |
| 237 | 执行后,回复里至少说明: |
| 238 | |
| 239 | 1. 跑了什么命令 |
| 240 | 2. 是探测成功、格式已列出,还是实际已下载 |
| 241 | 3. 文件落在哪里 |
| 242 | 4. 如果失败,卡在 extractor、认证、格式、网络,还是本地依赖 |
| 243 | |
| 244 | ## Safety and Boundaries |
| 245 | |
| 246 | - 不主动帮用户绕 DRM |
| 247 | - 不承诺所有受保护站点都能下 |
| 248 | - 大 playlist、频道抓取前提醒体积和数量 |
| 249 | - 覆盖现有文件前提醒 |
| 250 | - 带 cookies 的命令输出不要把敏感信息抄进回复 |
| 251 | |
| 252 | ## Troubleshooting |
| 253 | |
| 254 | ### YouTube or site changed |
| 255 | |
| 256 | 先看版本: |
| 257 | |
| 258 | ```bash |
| 259 | yt-dlp --version |
| 260 | ``` |
| 261 | |
| 262 | 如果太旧,提醒用户更新。 |
| 263 | |
| 264 | ### Format merge problems |
| 265 | |
| 266 | 优先检查: |
| 267 | |
| 268 | ```bash |
| 269 | ffmpeg -version |
| 270 | ``` |
| 271 | |
| 272 | ### Login-only content |
| 273 | |
| 274 | 优先试: |
| 275 | |
| 276 | ```bash |
| 277 | yt-dlp --cookies-from-browser <browser> "<url>" |
| 278 | ``` |
| 279 | |
| 280 | ### Extractor works but download fails |
| 281 | |
| 282 | 先加详细日志: |
| 283 | |
| 284 | ```bash |
| 285 | yt-dlp -v "<url>" |
| 286 | ``` |
| 287 | |
| 288 | ### Large playlist risk |
| 289 | |
| 290 | 先用: |
| 291 | |
| 292 | ```bash |
| 293 | yt-dlp --flat-playlist "<url>" |
| 294 | ``` |
| 295 | |
| 296 | ## References |
| 297 | |
| 298 | - 高频命令:见 [references/high-frequency-patterns.md](references/high-frequency-patterns.md) |
| 299 | - 站点支持:见 [references/supported-sites-notes.md](references/supported-sites-notes.md) |