Skip to content
Back to skills

Yt Dlp

ASecurity

强大的视频下载工具,支持 YouTube 和 1000+ 网站,自动选择最佳格式、字幕下载、播放列表处理

  • 207 stars
  • 0 votes
  • 0 copies
  • 8 views
  • Added February 7, 2026
toolspythongobashgit

Works with

  • cli

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 9 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add NeverSight/skills_feed --skill yt-dlp --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Yt Dlp?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Yt Dlp
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/neversight-yt-dlp/badge)](https://www.skillsdirectory.com/skills/neversight-yt-dlp)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: yt-dlp
description: 强大的视频下载工具,支持 YouTube 和 1000+ 网站,自动选择最佳格式、字幕下载、播放列表处理
license: MIT
category: media-processing
tags: [video-download, youtube, bilibili, subtitle, media]
---

# yt-dlp 视频下载 Skill

基于 yt-dlp 的专业视频下载工具,支持 YouTube、Bilibili、Twitter、Instagram 等 1000+ 网站。

## 适用场景

- 下载 YouTube 视频(含 4K/8K、HDR)
- 下载 Bilibili 视频(自动登录)
- 下载社交媒体视频(Twitter、Instagram、TikTok)
- 批量下载播放列表/频道视频
- 提取音频(制作播客、音乐收藏)
- 下载视频字幕(用于翻译、学习)

## 核心特性

- **格式智能选择**: 自动选择最佳质量(视频+音频或仅视频)
- **字幕处理**: 自动下载可用字幕(支持多语言)
- **播放列表支持**: 批量下载,支持断点续传
- **元数据保留**: 保存标题、上传时间、描述等信息
- **模板化命名**: 自定义文件名格式(避免乱码)
- **代理支持**: 支持 HTTP/SOCKS 代理
- **速度限制**: 可控制下载速度,避免被限流

## 使用方式

### 基础用法

```bash
# 直接下载视频(最佳质量)
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"
```

### 高级选项

```bash
# 选择特定质量
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"
```

### 常用输出模板

```bash
# 保留原视频标题
-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 的必需依赖,必须在执行下载前检测并确保已安装。

**检测步骤**:

1. **检测 FFmpeg 是否已安装**:
   ```bash
   # macOS/Linux
   ffmpeg -version

   # Windows
   ffmpeg -version
   ```

2. **如果已安装**: 显示版本信息,继续执行下一步
   ```
   ✅ FFmpeg 已安装: ffmpeg version N-xxxxx
   ```

3. **如果未安装**: 立即停止,提示用户安装

   **根据操作系统提供安装指令**:

   - **macOS**:
     ```bash
     # 使用 Homebrew
     brew install ffmpeg

     # 或使用 MacPorts
     sudo port install ffmpeg
     ```

   - **Linux (Ubuntu/Debian)**:
     ```bash
     sudo apt update
     sudo apt install ffmpeg
     ```

   - **Linux (Arch/Manjaro)**:
     ```bash
     sudo pacman -S ffmpeg
     ```

   - **Linux (Fedora)**:
     ```bash
     sudo dnf install ffmpeg
     ```

   - **Windows**:
     ```bash
     # 使用 Scoop
     scoop install ffmpeg

     # 使用 Chocolatey
     choco install ffmpeg

     # 或从官网下载: https://ffmpeg.org/download.html
     ```

   - **验证安装**:
     ```bash
     ffmpeg -version
     ```

4. **安装后验证**: 重新执行检测命令,确认成功后才继续

**AI 应遵守的规则**:
- ❌ 如果 FFmpeg 未安装,**绝不**执行 yt-dlp 下载命令
- ✅ 必须明确告知用户为什么需要 FFmpeg(视频/音频合并、格式转换)
- ✅ 提供与用户操作系统匹配的安装命令
- ✅ 等待用户确认安装完成后才继续

### 1. 识别需求

询问用户(如果未明确说明):
- 是否需要音频还是视频?
- 需要什么质量(1080p/4K/最佳)?
- 是否需要字幕?
- 是否需要元数据(缩略图、描述、info.json)?

### 2. 构建命令

根据需求自动生成 `yt-dlp` 命令:
- 自动检测网站类型
- 选择最佳格式选项
- 添加必要的参数
- 输出文件名模板

### 3. 执行下载

在用户的下载目录执行命令:
- Windows: `%USERPROFILE%/Downloads`
- macOS: `~/Downloads`
- Linux: `~/Downloads`

### 4. 验证结果

检查下载文件:
- 文件完整性
- 格式正确性
- 字幕存在性

## 常用场景命令

### YouTube 高清视频

```bash
# 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 视频

```bash
# 需要 cookie(登录后导出)
yt-dlp --cookies cookies.txt \
  -o "%(title)s.%(ext)s" "URL"

# 下载弹幕(需要专用脚本)
yt-dlp --write-info-json "URL"
```

### 播客/音频提取

```bash
# 最佳质量 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"
```

### 字幕下载

```bash
# 下载所有可用字幕
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"
```

## 格式选择语法

```bash
# 格式选择代码
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 | ✅ 支持 | - |
| Instagram | ✅ 支持 | - |
| TikTok | ✅ 支持 | - |
| Vimeo | ✅ 支持 | - |
| Twitch | ✅ 支持 | - |
| Coursera | ✅ 支持 | 需要登录 |
| Netflix | ⚠️ 有限支持 | 需要特定工具 |

## 配置文件

### 全局配置

创建 `~/.config/yt-dlp/config` (Linux/macOS) 或 `%APPDATA%\yt-dlp\config.txt` (Windows):

```ini
# 默认输出目录
-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`:

```ini
# 项目特定配置
-o ./videos/%(title)s.%(ext)s
--cookies cookies.txt
--download-archive downloaded.txt
```

## 最佳实践

### 1. 网络稳定性

```bash
# 使用 aria2 作为下载器(支持断点续传)
yt-dlp --external-downloader aria2 \
  --external-downloader-args "-x 8 -k 1M" "URL"

# 重试机制
yt-dlp --retries 10 --fragment-retries 10 "URL"
```

### 2. 避免被封

```bash
# 限制速度
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. 元数据保留

```bash
# 保存所有元数据
yt-dlp --write-info-json --write-description \
  --write-thumbnail --embed-subs "URL"

# 下载为 mkv(支持所有元数据)
yt-dlp --merge-output-format mkv "URL"
```

### 4. 批量处理

```bash
# 从文件读取 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: 使用以下任一方法:
```bash
# 方法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:
1. 使用浏览器插件导出 cookie(如 "Get cookies.txt")
2. 使用 `--cookies cookies.txt` 参数
3. 注意:cookie 会过期,需要定期更新

### Q: Bilibili 下载失败?

A: 常见解决方案:
```bash
# 使用 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:
```bash
# 从当前开始下载
yt-dlp "URL"

# 从直播开始时下载(需要录制)
yt-dlp --live-from-start "URL"

# 等待直播开始
yt-dlp --wait-for-video "URL"
```

## 技术细节

### 依赖项

- **FFmpeg**: 必需(用于视频/音频合并、格式转换)
- **Python 3.8+**: 运行环境
- **RAR** (可选): 用于某些网站的下载

### 安装

```bash
# 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 输出格式

生成的命令应包含:
1. 命令说明(做什么)
2. 完整命令(可复制粘贴)
3. 参数解释(为什么这样选择)
4. 预期结果(会得到什么文件)
5. 注意事项(可能的错误)

示例:
```markdown
## 下载 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"
```

### 播放列表过滤

```bash
# 仅下载前 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"
```

### 信息提取

```bash
# 仅查看可用格式(不下载)
yt-dlp --list-formats "URL"

# 查看 JSON 信息
yt-dlp --dump-json "URL"

# 查看播放列表信息
yt-dlp --flat-playlist --print "%(title)s" "PLAYLIST_URL"
```

## 参考资源

- [官方文档](https://github.com/yt-dlp/yt-dlp)
- [格式选择语法](https://github.com/yt-dlp/yt-dlp#format-selection)
- [支持网站列表](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md)
- [Wiki](https://github.com/yt-dlp/yt-dlp/wiki)

## 许可证

MIT License - 自由使用、修改和分发

## 贡献

欢迎提交 Issue 和 Pull Request 改进此 Skill!

---

**注意**: 请遵守目标网站的服务条款和版权法律。仅下载您有权访问的内容。

Files in this skill

  • SKILL.md12 KB
  • description_cn.txt125 B
  • description_de.txt123 B
  • description_en.txt125 B
  • description_es.txt125 B
  • description_fr.txt124 B
  • description_ja.txt210 B
  • description_ko.txt125 B
  • description_tw.txt125 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…