It helps you download long videos from YouTube, analyzes the video to provide a "long-to-short" editing proposal, and automatically adds bilingual Chinese and English subtitles.
# yt-dlp 使用指南
yt-dlp 是一个强大的 YouTube 视频下载工具,本文档介绍在 YouTube Clipper 中使用的核心功能。
## 安装
### macOS
```bash
brew install yt-dlp
```
### Linux
```bash
# Ubuntu/Debian
sudo apt-get install yt-dlp
# 或使用 pip
pip install yt-dlp
```
### 更新
```bash
# Homebrew
brew upgrade yt-dlp
# pip
pip install --upgrade yt-dlp
```
## 基本用法
### 下载视频
```bash
# 下载最佳质量
yt-dlp https://youtube.com/watch?v=VIDEO_ID
# 指定格式
yt-dlp -f "best[ext=mp4]" URL
# 限制分辨率(最高 1080p)
yt-dlp -f "bestvideo[height<=1080]+bestaudio" URL
```
### 下载字幕
```bash
# 下载英文字幕
yt-dlp --write-sub --sub-lang en URL
# 下载自动生成字幕(如果没有人工字幕)
yt-dlp --write-auto-sub --sub-lang en URL
# 下载所有可用字幕
yt-dlp --write-sub --all-subs URL
# 指定字幕格式(VTT, SRT, 等)
yt-dlp --write-sub --sub-format vtt URL
```
## YouTube Clipper 使用的配置
### 完整配置
```python
ydl_opts = {
# 视频格式:最高 1080p,优先 mp4
'format': 'bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[height<=1080][ext=mp4]/best',
# 输出模板
'outtmpl': '%(title)s [%(id)s].%(ext)s',
# 下载字幕
'writesubtitles': True,
'writeautomaticsub': True, # 自动字幕作为备选
'subtitleslangs': ['en'], # 英文字幕
'subtitlesformat': 'vtt', # VTT 格式
# 不下载缩略图
'writethumbnail': False,
}
```
### 格式字符串解释
```
bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[height<=1080][ext=mp4]/best
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ 最终备选
│ │ │ │ │ └─ 备选:最佳 1080p mp4
│ │ │ │ └─ 最佳音频(m4a)
│ │ │ └─ 合并
│ │ └─ 优先 mp4 格式
│ └─ 最高 1080p
└─ 最佳视频质量
```
### 为什么限制 1080p?
1. **文件大小**: 4K 视频可能 5-10GB
2. **处理速度**: FFmpeg 处理时间长
3. **实际需求**: 短视频平台主要是 1080p
4. **存储空间**: 节省磁盘
## 常用命令
### 1. 查看视频信息
```bash
# 不下载,仅显示信息
yt-dlp --print-json URL
# 查看可用格式
yt-dlp -F URL
```
### 2. 下载播放列表
```bash
# 下载整个播放列表
yt-dlp PLAYLIST_URL
# 仅下载特定视频(1-5)
yt-dlp --playlist-items 1-5 PLAYLIST_URL
# 不下载播放列表,仅当前视频
yt-dlp --no-playlist URL
```
### 3. 代理设置
```bash
# HTTP 代理
yt-dlp --proxy http://proxy:port URL
# SOCKS5 代理
yt-dlp --proxy socks5://proxy:port URL
```
### 4. 速率限制
```bash
# 限制下载速度为 50KB/s
yt-dlp --rate-limit 50K URL
# 限制为 4.2MB/s
yt-dlp --rate-limit 4.2M URL
```
### 5. 自定义文件名
```bash
# 使用模板
yt-dlp -o "%(title)s.%(ext)s" URL
# 包含上传日期
yt-dlp -o "%(upload_date)s - %(title)s.%(ext)s" URL
# 包含频道名称
yt-dlp -o "%(channel)s/%(title)s.%(ext)s" URL
```
## 字幕相关
### 字幕语言代码
常用语言代码:
- `en`: 英文
- `zh-Hans`: 简体中文
- `zh-Hant`: 繁体中文
- `ja`: 日语
- `ko`: 韩语
- `es`: 西班牙语
- `fr`: 法语
- `de`: 德语
### 查看可用字幕
```bash
# 列出所有可用字幕
yt-dlp --list-subs URL
```
### 字幕格式
```bash
# VTT 格式(推荐,兼容性好)
yt-dlp --write-sub --sub-format vtt URL
# SRT 格式
yt-dlp --write-sub --sub-format srt URL
# 多种格式
yt-dlp --write-sub --sub-format "vtt,srt" URL
```
## Python API 使用
### 基本示例
```python
import yt_dlp
ydl_opts = {
'format': 'best',
'outtmpl': '%(title)s.%(ext)s',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(['https://youtube.com/watch?v=VIDEO_ID'])
```
### 获取视频信息
```python
import yt_dlp
ydl_opts = {}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
print(f"Title: {info['title']}")
print(f"Duration: {info['duration']} seconds")
print(f"Uploader: {info['uploader']}")
```
### 进度回调
```python
def progress_hook(d):
if d['status'] == 'downloading':
percent = d['downloaded_bytes'] / d['total_bytes'] * 100
print(f"Progress: {percent:.1f}%")
elif d['status'] == 'finished':
print("Download complete!")
ydl_opts = {
'progress_hooks': [progress_hook],
}
```
## 常见问题
### Q: 下载失败,提示 "Video unavailable"
A: 可能的原因:
- 视频已删除或私有
- 地区限制(尝试使用代理)
- 需要登录(使用 `--cookies` 选项)
### Q: 字幕下载失败
A: 尝试:
1. 使用 `--write-auto-sub`(自动生成字幕)
2. 使用 `--list-subs` 查看可用字幕
3. 某些视频没有字幕
### Q: 下载速度慢
A: 解决方案:
- 使用代理
- 检查网络连接
- YouTube 可能限速(等待后重试)
### Q: 文件名包含非法字符
A: 使用输出模板清理:
```bash
yt-dlp -o "%(title).100s.%(ext)s" URL
# .100s 限制标题长度为 100 字符
```
### Q: 如何下载会员专属视频?
A: 使用浏览器 cookies:
```bash
# 导出浏览器 cookies
yt-dlp --cookies-from-browser chrome URL
# 或使用 cookies 文件
yt-dlp --cookies cookies.txt URL
```
## 高级用法
### 批量下载
```bash
# 从文件读取 URL 列表
yt-dlp -a urls.txt
# urls.txt 内容:
# https://youtube.com/watch?v=VIDEO1
# https://youtube.com/watch?v=VIDEO2
# https://youtube.com/watch?v=VIDEO3
```
### 后处理
```bash
# 下载后转换为 MP3
yt-dlp -x --audio-format mp3 URL
# 下载后嵌入字幕
yt-dlp --embed-subs URL
# 下载后嵌入缩略图
yt-dlp --embed-thumbnail URL
```
### 归档选项
```bash
# 跳过已下载的视频
yt-dlp --download-archive archive.txt PLAYLIST_URL
# archive.txt 会记录已下载的视频 ID
```
## 支持的网站
yt-dlp 不仅支持 YouTube,还支持:
- Vimeo
- Twitter
- TikTok
- Bilibili
- 等 1000+ 网站
查看完整列表:
```bash
yt-dlp --list-extractors
```
## 参考链接
- [yt-dlp GitHub](https://github.com/yt-dlp/yt-dlp)
- [yt-dlp 文档](https://github.com/yt-dlp/yt-dlp#readme)
- [格式选择说明](https://github.com/yt-dlp/yt-dlp#format-selection)