安装 使用 选项 配置 输出模板 格式选择 插件 嵌入
开源 · Unlicense 支持数千网站

命令行
音视频下载
终极工具

yt-dlp 是一个功能丰富的命令行音频/视频下载器,基于 youtube-dl 分支开发,支持数千个网站,具有格式排序、SponsorBlock 集成、多线程下载等强大特性。

终端

$ yt-dlp "https://www.youtube.com/watch?v=..."

# 下载最佳画质+最佳音质并自动合并

$ yt-dlp -f "bv+ba/b" URL

# 仅提取音频为 mp3

$ yt-dlp -x --audio-format mp3 URL

# 下载整个播放列表

$ yt-dlp -o "%(playlist)s/%(title)s.%(ext)s" URL

多线程下载

并行下载 HLS/DASH 片段,使用 -N 设置线程数,大幅提升下载速度。

格式排序

使用 -S 精确控制格式偏好——分辨率、编解码器、比特率、文件大小等。

SponsorBlock

自动标记或移除 YouTube 视频中的赞助商片段、片头片尾等内容。

插件系统

通过提取器和后处理器插件扩展功能,支持自定义开发和社区共享。

01 / 安装

快速开始

Windows

# 直接下载可执行文件

yt-dlp.exe

推荐下载 yt-dlp.exe(Win8+ x64 独立版)

macOS

$ brew install yt-dlp

或下载 yt-dlp_macos(通用二进制)

Linux / pip

$ pip install yt-dlp

或下载 yt-dlp(平台无关二进制)

更新

$ yt-dlp -U

# 切换到 nightly 渠道

$ yt-dlp --update-to nightly

提供三个发布渠道:stable(稳定版)、nightly(每日构建,推荐普通用户)和 master(最新代码)。

依赖项

  • Python 3.10+ — 运行环境
  • ffmpeg / ffprobe — 合并与后处理(强烈推荐)
  • yt-dlp-ejs + JS 运行时 — 完整 YouTube 支持
  • certifi, brotli, requests — 网络增强(可选)
  • curl_cffi — 浏览器模拟(TLS 指纹绕过)
02 / 使用

基本用法

yt-dlp [OPTIONS] [--] URL [URL...]

常用示例

下载最佳质量视频

$ yt-dlp URL

提取音频为 MP3

$ yt-dlp -x --audio-format mp3 URL

限制分辨率不超过 720p

$ yt-dlp -S "height:720" URL

查看可用格式列表

$ yt-dlp -F URL

进阶示例

下载播放列表,每个视频存入单独文件夹

$ yt-dlp -o "%(playlist)s/%(title)s.%(ext)s" URL

使用代理 + 8 线程并行下载片段

$ yt-dlp --proxy socks5://... -N 8 URL

从浏览器获取 Cookie

$ yt-dlp --cookies-from-browser chrome URL

下载时间范围片段(需要 ffmpeg)

$ yt-dlp --download-sections "*10:15-inf" URL
03 / 选项

命令行选项

点击展开各分类查看完整选项说明。

常规选项 General
-h, --help打印帮助文本并退出
--version打印程序版本并退出
-U, --update更新到最新版本
--update-to [CHANNEL]@[TAG]升级/降级到特定版本
-i, --ignore-errors忽略下载和后处理错误
--abort-on-error发生错误时中止下载
--flat-playlist不提取播放列表的视频详情
--live-from-start从开始下载直播流(实验性)
--wait-for-video MIN[-MAX]等待计划的直播变得可用
--mark-watched标记视频为已观看
--compat-options OPTSyoutube-dl 兼容性选项
网络选项 Network
--proxy URL使用 HTTP/HTTPS/SOCKS 代理
--socket-timeout SECONDS连接超时时间
--source-address IP绑定客户端 IP 地址
--impersonate CLIENT[:OS]模拟浏览器请求
-4, --force-ipv4强制使用 IPv4
-6, --force-ipv6强制使用 IPv6
--geo-verification-proxy URL地理限制验证代理
--xff VALUE伪造 X-Forwarded-For 标头
视频选择 Video Selection
-I, --playlist-items ITEM_SPEC选择播放列表中的特定项目
--min-filesize SIZE最小文件大小限制
--max-filesize SIZE最大文件大小限制
--date DATE仅下载指定日期上传的视频
--match-filters FILTER通用视频过滤器
--no-playlist仅下载视频,不下载播放列表
--download-archive FILE跳过已下载过的视频
--max-downloads NUMBER最大下载数量
--age-limit YEARS年龄限制过滤
下载选项 Download
-N, --concurrent-fragments N并发下载片段数(默认 1)
-r, --limit-rate RATE最大下载速率,如 50K 或 4.2M
-R, --retries RETRIES重试次数(默认 10)
--download-sections REGEX按时间范围或章节下载
--downloader NAME使用外部下载器(aria2c, curl 等)
--hls-use-mpegtsHLS 使用 mpegts 容器
--playlist-random随机顺序下载播放列表
文件系统选项 Filesystem
-o, --output TEMPLATE输出文件名模板
-P, --paths [TYPES:]PATH下载路径
--restrict-filenames限制为 ASCII 文件名
-w, --no-overwrites不覆盖已有文件
-c, --continue恢复部分下载
--write-info-json写入视频元数据 JSON
--cookies FILE使用 Cookie 文件
--cookies-from-browser BROWSER从浏览器自动提取 Cookie
-a, --batch-file FILE从文件批量读取 URL
视频格式选项 Format
-f, --format FORMAT视频格式代码
-S, --format-sort SORTORDER格式排序字段
-F, --list-formats列出可用格式
--merge-output-format FORMAT合并时使用的容器格式
--video-multistreams允许多视频流合并
--audio-multistreams允许多音频流合并
--prefer-free-formats优先选择免费容器
字幕选项 Subtitle
--write-subs写入字幕文件
--write-auto-subs写入自动生成的字幕
--list-subs列出可用字幕
--sub-format FORMAT字幕格式(srt / ass / vtt)
--sub-langs LANGS下载指定语言的字幕
后处理选项 Post-Processing
-x, --extract-audio转换为仅音频文件
--audio-format FORMAT音频格式(mp3, aac, flac 等)
--audio-quality QUALITY音频质量 0(最佳)到 10
--remux-video FORMAT重新封装视频容器
--embed-subs嵌入字幕
--embed-thumbnail嵌入缩略图作为封面
--embed-metadata嵌入元数据到文件
--split-chapters按章节拆分视频
--exec CMD下载后执行命令
--convert-subs FORMAT转换字幕格式
--sponsorblock-mark CATS标记 SponsorBlock 章节
--sponsorblock-remove CATS移除赞助商片段
身份验证选项 Auth
-u, --username USERNAME帐户用户名
-p, --password PASSWORD帐户密码
-2, --twofactor CODE双因素验证代码
-n, --netrc使用 .netrc 身份验证
--video-password PASSWORD视频密码
04 / 配置

配置文件

yt-dlp 可以通过配置文件预设常用选项。配置文件按以下优先级顺序加载:

1
主配置
通过 --config-locations 指定的文件
2
便携式配置
二进制文件所在目录中的 yt-dlp.conf
3
主目录配置
当前目录或 -P 指定路径中的 yt-dlp.conf
4
用户配置
Windows: %APPDATA%\yt-dlp\config
Linux: ~/.config/yt-dlp/config

配置文件示例

# 以 # 开头的行是注释


# 始终提取音频

-x


# 使用代理

--proxy

127.0.0.1:3128

# 保存到 YouTube 目录

-o

~/YouTube/%(title)s.%(ext)s

# 嵌入缩略图和元数据

--embed-thumbnail

--embed-metadata

⚠ 注意

配置文件中的选项与命令行完全相同。在 --- 后不能有空格。使用 --ignore-config 禁用所有配置文件。

05 / 输出模板

输出模板

使用 -o 选项自定义输出文件名。模板使用 %(字段名)s 语法引用视频元数据。当前默认模板是 %(title)s [%(id)s].%(ext)s

常用字段

%(id)s
视频标识符
%(title)s
视频标题
%(ext)s
文件扩展名
%(uploader)s
上传者名称
%(upload_date)s
上传日期 (UTC)
%(duration)s
时长(秒)
%(view_count)s
观看次数
%(playlist)s
播放列表名称
%(playlist_index)s
播放列表索引
%(channel)s
频道名称
%(resolution)s
分辨率
%(autonumber)s
自动编号

示例

按播放列表分目录

-o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s"

按上传年份分目录

-o "%(upload_date>%Y)s/%(title)s.%(ext)s"

频道/播放列表层级结构

-o "%(uploader)s/%(playlist)s/%(title)s.%(ext)s"

高级:日期格式化 + 算术 + 默认值

%(release_date>%Y,upload_date>%Y|Unknown)s

💡 提示

使用 yt-dlp -j URL 查看特定视频的所有可用字段。支持对象遍历(%(tags.0)s)、算术运算(%(playlist_index+10)03d)和日期格式化(%(upload_date>%Y-%m-%d)s)。

06 / 格式选择

格式选择

默认情况下,yt-dlp 下载最佳可用质量(-f bv*+ba/b)。使用 -f 精确选择格式,使用 -S 自定义排序规则。

格式选择符

b / best — 最佳音视频组合
bv / bestvideo — 最佳仅视频
ba / bestaudio — 最佳仅音频
bv* — 最佳含视频(可含音频)
w / worst — 最差质量
all — 所有格式

过滤器

[height<=720] — 不超过 720p
[ext=mp4] — 仅 mp4
[vcodec^=avc] — H.264 编解码器
[filesize<50M] — 小于 50MB
[tbr>500] — 比特率 > 500kbps
[protocol^=http] — HTTP 协议

排序字段 (-S)

res — 分辨率
fps — 帧率
vcodec — 视频编解码器
acodec — 音频编解码器
size — 文件大小
ext — 文件扩展名

格式选择示例

# 下载最佳 mp4,回退到最佳可用

-f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"

# 分辨率最大但不超过 720p

-S "height:720"

# 下载最小文件

-S "+size,+br"

# 文件大小最接近 50MB

-f b -S "filesize~50M"

07 / 插件

插件系统

yt-dlp 支持通过外部文件加载提取器插件后处理器插件。插件从 yt_dlp_plugins 命名空间包中加载。

⚠ 安全警告

所有插件都会被导入,不会对插件代码进行安全检查。请仅使用您信任的插件!

安装位置

# Windows 用户插件(推荐)

%APPDATA%\yt-dlp\plugins\<包名>\yt_dlp_plugins\

# Linux/macOS 用户插件(推荐)

~/.config/yt-dlp/plugins/<包名>/yt_dlp_plugins/

目录结构

yt_dlp_plugins/

├── extractor/

│ └── myplugin.py

└── postprocessor/

└── myplugin.py

使用方式

  • 提取器插件:自动识别匹配的 URL,无需手动启用
  • 后处理器插件:使用 --use-postprocessor NAME 调用
  • 也支持 pip 安装和 .zip/.egg/.whl 归档
  • 运行 yt-dlp --verbose 验证插件是否加载
08 / 嵌入

Python 嵌入

yt-dlp 可以作为 Python 库直接嵌入到你的应用程序中,提供比命令行更灵活的控制方式。

基本下载

from yt_dlp import YoutubeDL


URLS = ['https://...']

with YoutubeDL() as ydl:

ydl.download(URLS)

提取音频

ydl_opts = {

'format': 'm4a/bestaudio/best',

'postprocessors': [{

'key': 'FFmpegExtractAudio',

'preferredcodec': 'm4a',

}]

}

with YoutubeDL(ydl_opts) as ydl:

ydl.download(URLS)

提取信息(不下载)

import json, yt_dlp


with yt_dlp.YoutubeDL() as ydl:

info = ydl.extract_info(URL,

download=False)

print(json.dumps(

ydl.sanitize_info(info)))

过滤视频

def longer_than_a_minute(info, *,

incomplete):

duration = info.get('duration')

if duration and duration < 60:

return 'Video too short'


ydl_opts = {

'match_filter':

longer_than_a_minute,

}

09 / 差异

与 youtube-dl 的差异

✦ 新功能
  • SponsorBlock 集成
  • 格式排序系统(-S)
  • 从浏览器获取 Cookie
  • 多线程片段下载(-N)
  • 下载时间范围片段
  • 按章节拆分视频
  • 插件系统
  • 自动更新器
⚡ 默认行为变化
  • 仅支持 Python 3.10+
  • 默认模板:%(title)s [%(id)s].%(ext)s
  • 更智能的格式排序(优先分辨率+编解码器)
  • 默认不中止错误
  • 实时聊天视为字幕
  • 频道 URL 下载所有内容
  • 默认不应用服务器修改时间
🔧 YouTube 改进
  • 修复 n-sig 限速问题
  • 支持 Clips、Stories、Mixes
  • 搜索支持(含过滤器)
  • 频道特定搜索
  • 直播从开始下载
  • 频道 URL 含 Shorts 和直播
  • PO Token 支持