yt-dlp 下载音视频

yt-dlp

安装

1
2
3
4
5
6
7
8
# Linux系统下的安装
yay -Sy yt-dlp

# 更新
yt-dlp -U

# 使用pip安装
pip install yt-dlp

使用

1
2
3
yt-dlp [OPTIONS] [--] URL [URL...]

# 选项众多,下面只介绍基本的用法

支持的网站

1
2
3
4
5
6
7
8
9
10
11
# 支持的网站众多,本人常用到的有

youtube
bilibili去
kuwo
网易云音乐
QQ音乐
douyin
cctv
others see: https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md

一般下载

1
2
3
4
5
# 默认 720P webm
yt-dlp url

# 下载并转换成为mp4
yt-dlp –merge-output-format mp4 url

查看视频可以下载的所有分辨率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yt-dlp -F url
# 返回的信息包含:
ID 文件ID
EXT 格式
RESOLUTION 分辨率
FPS 视频的帧率
FILESIZE 文件大小
VCODEC 正在使用的视频编解码器的名称
ACODEC 正在使用的音频编解码器的名称,像mp4a.40.2(720p)就直接包含了音频
TBR 音频和视频的平均比特率(以 KBit/s 为单位)
VBR 平均视频比特率(以 KBit/s 为单位)
ABR 平均音频比特率(以 KBit/s 为单位)
ASR 以赫兹为单位的音频采样率
MORE INFO 更多信息

视频选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
--playlist-start NUMBER          播放列表视频开始(默认为1)
--playlist-end NUMBER 播放列表视频结束(默认是最后)
--playlist-items ITEM_SPEC 播放列表视频项目下载。指定
播放列表中视频的索引
用逗号隔开,如:"——playlist-items
1 2 5 8英寸,如果你想下载视频
在播放列表中索引1,2,5,8。你可以
指定范围:”——playlist-items
1-3,7,10-13",它会下载视频
在指数12 3 7 10 11 12和13处
--max-downloads NUMBER 下载NUMBER文件后中止
--min-filesize SIZE 切勿下载任何小于尺寸(如50k或446m)的影片。
--max-filesize SIZE 切勿下载超过大小的影片(例如50k或446m)
--date DATE 只下载在此日期上传的视频。日期可以是“YYYYMMDD”或以下格式"
(now l today) [+-][0-9] (day lweek | month l year) (s)?"
--datebefore DATE 只下载在此日期或之前上传的视频。接受的日期格式与——date相同
--dateafter DATE 只下载在此日期或之后上传的视频。接受的日期格式与——date相同
--match-filter FILTER 通用的视频滤镜。任何领域(见
“输出模板”)可以与
数字或使用运算符的字符串
定义于“过滤格式”。你可以
还可以简单地指定要匹配的字段
Field is present and !字段"来检查是否
该字段不存在。此外,
Python风格的正则表达式匹配
可以使用“~=”和多个
过滤器可以用“&”进行检查。使用“\”
转义"&"或引号(如果需要)。例如:
——match-filter”!is_live & like_count > ?One hundred.
& description~='(?i)\bcats \& dogs\b'"
只匹配那些不是直播的视频,有
一个点赞数超过100个(或类似数)
字段不可用),并具有
包含短语“猫”的描述
&狗”(忽略案例)
--no-match-filter 不要使用通用的视频过滤器(默认)
--no-playlist 如果URL指的是视频和播放列表,则只下载视频
--yes-playlist 如果URL是指视频和播放列表,请下载播放列表
--age-limit YEARS 只下载适合特定年龄的视频
--download-archive FILE 只下载档案文件中没有列出的视频。记录所有下载视频的id
--break-on-existing 当遇到存档中的文件时,停止下载过程
--break-on-reject 当遇到已过滤掉的文件时,停止下载过程
--skip-playlist-after-errors N 允许的失败数,直到跳过播放列表的其余部分
--no-download-archive 不要使用存档文件(默认)

下载选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-N, --concurrent-fragments N     应该并发下载的dash/ hlnative视频片段数(默认为1)
-r, --limit-rate RATE 最大下载速率(字节/秒)(例如50K或4.2M)
--throttled-rate RATE 最小下载速率(以字节/秒为单位),低于此速率时将进行节流并重新提取视频数据(例如100K)


-R, --retries RETRIES 重试次数(默认为10),或“无限”
--fragment-retries RETRIES 一个片段的重试次数(默认为10),或“无限”(DASH, hLsnative和~ AAAISM)
--skip-unavailable-fragments 跳过DASH hlnative和ISM的不可用片段(默认)
(Alias: --no-abort-on-unavailable-fragment)
--abort-on-unavailable-fragment 如果片段不可用,则中止下载
(Alias: --no-skip-unavailable-fragments)
--keep-fragments 下载完成后,将下载的片段保存在磁盘上
--no-keep-fragments 下载完成后删除下载的片段(默认)
--buffer-size SIZE 下载缓冲区的大小(例如1024或16K)(默认是1024)
--resize-buffer 缓冲区大小从初始值——buffer-size(默认值)自动调整
--no-resize-buffer 不自动调整缓冲区大小
--http-chunk-size SIZE 基于块的HTTP下载块的大小(例如10485760或10M)(默认禁用)。
可能对绕过网络服务器施加的带宽节流有用(实验)
--playlist-reverse 按倒序下载播放列表视频
--no-playlist-reverse 按默认顺序下载播放列表视频(默认)
--playlist-random 按随机顺序下载播放列表视频
--xattr-set-filesize 设置文件xattribute ytdl。文件大小与预期的文件大小
--hls-use-mpegts 对HLS视频使用mpegts容器;允许一些播放器在下载时播放视频,
并减少下载中断时文件损坏的机会。这在默认情况下为实时流启用
--no-hls-use-mpegts 不要在HLS视频中使用mpegts容器。当不下载实时流时,这是默认值
--downloader [PROTO:]NAME 要加载的外部下载程序的名称或路径
使用(可选地)以协议为前缀
(http, ftp, m3u8, dash, rstp, rtmp, mms)到
用它来。目前支持本地,
Aria2c avconv axel curl ffmpeg httpie
wget(推荐:aria2c)。您可以使用
此选项多次设置不同
不同协议的下载程序。为
示例:——downloader aria2c——downloader
"dash,m3u8:native"将使用aria2c
Http /ftp下载,和本机
下载的dash/m3u8下载
(别名:——external-downloader)
--downloader-args NAME:ARGS 把这些论点交给外部
下载器。指定下载器名称和
参数由冒号":"分隔。为
Ffmpeg,参数可以传递给
不同的位置使用相同的语法
——postprocessor-args。你可以用这个
选择多次给予不同
不同下载程序的参数
(别名:——external-downloader-args)


视频格式选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-f, --format FORMAT              视频格式代码,详见“格式选择”
-S, --format-sort SORTORDER 根据给定的字段对格式进行排序,详见“格式排序”
--S-force, --format-sort-force 强制用户指定的排序顺序优先于所有字段,详情请参阅“排序格式”
--no-format-sort-force 有些字段优先于用户指定的排序顺序(默认),请参阅“排序格式”了解更多细节
--video-multistreams 允许多个视频流合并成一个单一的文件
--no-video-multistreams 每个输出文件只下载一个视频流(默认)
--audio-multistreams 允许多个音频流合并成一个单一的文件
--no-audio-multistreams 每个输出文件只下载一个音频流(默认)
--prefer-free-formats 更喜欢带有免费容器的视频格式 而非同等质量的免费产品。使用
与“-S ext”严格偏好免费 集装箱不论质量如何
--no-prefer-free-formats 不要给空闲容器任何特殊的优先级(默认)
--check-formats 检查所选的格式是否确实可以下载
--no-check-formats 不检查所选的格式实际上是可下载的
-F, --list-formats 列出每个视频的可用格式。模拟除非使用-no- simulation
--merge-output-format FORMAT 如果需要合并(例如,bestvideo+bestaudio),输出到给定的容器格式。mkv mp4 ogg
webm flv。如果不需要合并,则忽略


字母选项

1
2
3
4
5
6
7
8
9
10
--write-subs                     编写字幕文件
--no-write-subs 不写字幕文件(默认)
--write-auto-subs 写自动生成的字幕文件(别名:——Write -automatic-subs)
--no-write-auto-subs 不写自动生成的字幕(默认)(别名:——no-write-automatic-subs)
--list-subs 列出每个视频可用的字幕。模拟除非使用-no- simulation
--sub-format FORMAT 字幕格式,接受格式优先,例如:“srt”或“ass/srt/best”
--sub-langs LANGS 语言字幕下载(可以是正则表达式)或用逗号分隔的“全部”。
(例如:——sub-langs en.*,ja 带有"-"的语言代码免除了它
从请求的语言。(如:——子 使用——list-subs 可用语言标记列表

格式选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 根据文件明细列表选择对应格式的文件id,比如:下载文件id=140的文件
yt-dlp -f 140 url
默认情况下,如果您不传递任何选项,yt-dlp 会尝试下载最佳可用质量。
这通常等同于使用-f bestvideo*+bestaudio/best.
但是,如果启用了多个音频流 ( --audio-multistreams),
则默认格式更改为-f bestvideo+bestaudio/best.
同样,如果 ffmpeg 不可用,或者如果您使用 yt-dlp 流式传输到stdout( -o -),
则默认值变为-f best/bestvideo+bestaudio.

all: 选择所有格式
mergeall:选择和合并所有格式(必须与使用--audio-multistreams,--video-multistreams或两者)
b*, best*: 无论是否包含视频或音频,选择最佳质量格式
w*, worst*: 选择质量最差的格式,不管它是否包含视频或音频
b, best: 选择包含视频和音频的最佳质量格式。相当于best*[vcodec!=none][acodec!=none]
w, worst: 选择包含视频和音频的最差质量格式。相当于worst*[vcodec!=none][acodec!=none]
bv, bestvideo: 选择最佳质量的纯视频格式。相当于best*[acodec=none]
wv, worstvideo: 选择质量最差的纯视频格式。相当于worst*[acodec=none]
bv*, bestvideo*: 选择包含视频的最佳质量格式。它还可能包含音频。相当于best*[vcodec!=none]
wv*, worstvideo*: 选择包含视频的最差质量格式。它还可能包含音频。相当于worst*[vcodec!=none]
ba, bestaudio: 选择质量最好的纯音频格式。相当于best*[vcodec=none]
wa, worstaudio: 选择质量最差的纯音频格式。相当于worst*[vcodec=none]
ba*, bestaudio*: 选择包含音频的最佳质量格式。它还可能包含视频。相当于best*[acodec!=none]
wa*, worstaudio*: 选择包含音频的最差质量格式。它还可能包含视频。相当于worst*[acodec!=none]

格式过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
可以通过在括号中放置条件来过滤视频格式,如 (或者因为没有选择器的过滤器被解释为 )。
-f "best[height=720]"-f "[filesize>10M]"best

以下数值元字段可用于比较 、 、 、 (等于)、(不等于):<<=>>==!=

filesize:字节数(如果事先知道)
filesize_approx:字节数的估计值
width:视频的宽度(如果已知)
height:视频的高度(如果已知)
aspect_ratio:视频的宽高比(如果已知)
tbr:音频和视频的平均比特率(以 KBit/s 为单位)
abr:平均音频比特率(以 KBit/s 为单位)
vbr:平均视频比特率(以 KBit/s 为单位)
asr:以赫兹为单位的音频采样率
fps:帧率
audio_channels:音频通道数
stretched_ratio:视频像素的像素,如果不是正方形width:height

后处理选项 -x

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
-x, --extract-audio              将视频文件转换为音频文件(需要ffmpeg和ffprobe)
--audio-format FORMAT 指定音频格式以转换音频
当使用-x时。目前支持
格式有:best(默认)或
最好| aac | flac mp3 | | m4a格式|作品| vorbis | wav
--audio-quality QUALITY 指定ffmpeg音频质量,插入一个
值介于0(较好)和9(较差)之间
VBR或特定的比特率,如128K (默认5)
--remux-video FORMAT 将视频重新放入另一个容器,如果 必要的
(目前支持:mp4|mkv|flv | webm | mov avi mp3 | | | mka | m4a格式| ogg |作品)。
如果 目标容器不支持 视频/音频编解码器,重放将失败。你
可以指定多个规则;如。 “aac>m4a/mov>mp4/mkv”将重放aac到 M4a, mov到mp4,其他任何东西到mkv。
--recode-video FORMAT 重新编码成另一种格式,如果 重新编码是必要的。的语法和 支持的格式与——remux-video相同
--postprocessor-args NAME:ARGS 将这些参数给后处理器。
指定后处理器/可执行程序名称
参数由冒号":"分隔
将参数赋给指定的
后处理程序/可执行。支持页:
合并,ModifyChapters SplitChapters,
ExtractAudio、VideoRemuxer VideoConvertor,
元数据、EmbedSubtitle EmbedThumbnail,
SubtitlesConvertor ThumbnailsConvertor,
FixupStretched、FixupM4a FixupM3u8,
FixupTimestamp FixupDuration。的
支持的可执行文件有:AtomicParsley,
FFmpeg FFprobe。你也可以指定
“PP+EXE:ARGS”给出了论证
仅在使用时指定可执行文件
由指定的后处理程序处理。
此外,对于ffmpeg/ffprobe, "_i"/"_o"
可以附加到前缀可选
后面跟着一个数字来传递参数
在指定的输入/输出文件之前。例如:
——ppa“合并+ ffmpeg_i1: - v安静”。你可以
多次使用这个选项
不同的论点
后处理程序。(别名:——ppa)
-k, --keep-video 后期处理后将中间视频文件保存在磁盘上
--no-keep-video 后期处理后删除中间视频文件(默认)
--post-overwrites 覆盖后期处理的文件(默认)
--no-post-overwrites 不覆盖后期处理的文件
--embed-subs 视频中嵌入字幕(仅mp4, webm和mkv视频)
--no-embed-subs 不要嵌入字幕(默认)
--embed-thumbnail 嵌入缩略图在视频作为封面艺术
--no-embed-thumbnail 不嵌入缩略图(默认)
--embed-metadata 在视频文件中嵌入元数据。还增加了
章节文件除非-no-add-章
别名:——add-metadata
--no-embed-metadata 不添加元数据到文件(默认)(别名:——no-add-metadata)
--embed-chapters 添加章节标记到视频文件(别名:——Add -章)
--no-embed-chapters 不添加章节标记(默认)(别名:——no-add-章)
--parse-metadata FROM:TO 解析其他领域的元数据,如标题/艺术家;详情请参见“修改元数据”
--replace-in-metadata FIELDS REGEX REPLACE 使用给定的正则表达式替换元数据字段中的文本。这个选项可以多次使用
--xattrs 将元数据写入视频文件的xattrs(使用dublin core和xdg标准)
--fixup POLICY 自动纠正系统的已知故障
文件。一个永远(什么都不做),警告(只有)
发出警告),detect_or_warn
违约;如果可以,修复文件,警告
否则),强制(尝试修复即使文件
已经存在
--ffmpeg-location PATH ffmpeg二进制文件的位置;二进制文件或其包含目录的路径
--exec CMD 在文件上执行命令
下载和后处理。相同
语法作为输出模板可以使用
将任何字段作为参数传递给
命令。附加字段“filepath”
它包含了
下载的文件也可用。如果没有
字段被传递,%(filepath)q被追加
直到命令的最后。这个选项可以
多次使用
--no-exec 删除任何先前定义的——exec
--exec-before-download CMD 执行命令之前,实际下载。语法与——exec相同
但是“filepath”不可用。这选项可以多次使用
--no-exec-before-download 删除任何以前定义的- execute -before-download
--convert-subs FORMAT 将字幕转换为另一种格式(目前支持:srt|vtt|ass|lrc)(别名:——Convert -副标题)
--convert-thumbnails FORMAT 将缩略图转换为另一种格式(目前支持:jpg|png)
--split-chapters 将视频分割成多个文件基于
内部章节。“章:”前缀
可以与"——paths""——output"一起使用
设置分割的输出文件名
文件。详见“OUTPUT TEMPLATE”
--no-split-chapters 不要基于章节分割视频(默认)
--remove-chapters REGEX 删除标题匹配的章节
给定的正则表达式。时间范围
用“*”作为前缀也可以在适当的地方使用
的章节,以删除指定的范围。
如:remove-chapters“* 10:15-15:00”
——remove-chapters“介绍”。这个选项可以多次使用
--no-remove-chapters 不要从文件中删除任何章节(默认)
--force-keyframes-at-cuts 强制关键帧围绕章节之前
删除/分裂。需要一个
重新编码会很慢,但是
最终的视频可能有更少的伪影
在削减
--no-force-keyframes-at-cuts 当切割/分割章节时,不要强制关键帧(默认)插件的(区分大小写)名称
--use-postprocessor NAME[:ARGS] 启用后处理器,以及 (可选)传递给它的参数,
由冒号":"分隔。参数是一个
分号";"分隔的NAME=VALUE列表。
"when"参数决定 后处理程序被调用。它可以是
“pre_process”(提取)后, "before_dl"(视频下载前),
"post_process"(视频下载后; 或"after_move"(在移动文件后
最终到达目的地)。这个选项可以 可多次使用以添加不同 后处理程序

格式排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
您可以best使用-S( --format-sort)更改被视为 的标准。这个的一般格式是--format-sort field1,field2....

可用的字段是:

hasvid:优先考虑具有视频流的格式
hasaud:优先考虑具有音频流的格式
ie_pref:提取器给出的格式首选项
lang:提取器给出的语言偏好
quality:提取器给出的格式质量
source: 提取器给出的来源偏好
proto: 用于下载的协议 ( https/ ftps> http/ ftp> m3u8_native/ m3u8> http_dash_segments> websocket_frag> 其他 > mms/ rtsp> > 未知 > f4f/ f4m)
vcodec:视频编解码器(av01> vp9.2> vp9> h265> h264> vp8> h263> theora>其它>未知)
acodec:音频编解码器(opus> vorbis> aac> mp4a> mp3> ac3> dts>其他>未知)
codec: 相当于 vcodec,acodec
vext: 视频扩展名 ( mp4> webm> flv> 其他 > 未知)。如果--prefer-free-formats使用,webm则首选。
aext:音频扩展(m4a> aac> mp3> ogg> opus> webm> 其他 > 未知)。如果--prefer-free-formats使用,则顺序更改为opus> ogg> webm> m4a> mp3> aac。
ext: 相当于 vext,aext
filesize: 确切的文件大小,如果事先知道的话。这将不适用于 mu38 和 DASH 格式。
fs_approx:根据清单计算的近似文件大小
size: 如果可用,则为精确文件大小,否则为近似文件大小
height: 视频高度
width: 视频宽度
res:视频分辨率,以最小尺寸计算。
fps: 视频帧率
hdr: 视频的动态范围 ( DV> HDR12> HDR10+> HDR10> HLG> SDR)
tbr:以 KBit/s 为单位的总平均比特率
vbr: 以 KBit/s 为单位的平均视频比特率
abr:以 KBit/s 为单位的平均音频比特率
br: 相当于使用 tbr,vbr,abr
asr:以Hz为单位的音频采样率
请注意,在 Windows 上,您可能需要使用双引号而不是单引号。

#下载并合并最好的纯视频格式和最好的纯音频格式,
#或者如果纯视频格式不可用,则下载最好的组合格式
$ yt-dlp -f ' bv+ba/b '

下载播放列表中的多个视频 -I

1
2
3
4
5
6
7
8
9
10
11
1. 逗号分隔的playlist_index
2. 要下载的项目。您可以指定一个 范围使用“[START]:[STOP][:STEP]”。向后兼容 也支持。使用负指数 从右数和负数 STEP 以相反的顺序下载。例如“-I

# 下载第1,3,5个视频
yt-dlp -I "1,3,5" url

# 指定范围,下载第1~15个视频中每相隔2个,则是1,3,5,7,9,11,13,15
yt-dlp "1:15:2" url

# 指定范围及顺序,下载第1~5集,从第5~1的顺序下载
yt-dlp "1:5:-1" url

文件信息列表排序 -S

1
2
# 按照vbr-平均视频比特率
yt-dlp -F -S "vbr" url