Youtube 视频下载工具使用

前言

yt-dlp 是一个功能丰富的命令行音频 / 视频下载器,支持数千个站点,支持断点续传和网络代理等功能。

开源项目

yt-dlp 安装步骤

  • Pip 安装(依赖 Python)
1
2
# Linux / Mac
pip install -U yt-dlp
  • Linux 安装(二进制方式)
1
2
3
4
5
6
7
8
9
10
11
# Linux (可直接下载可执行文件)
# https://github.com/yt-dlp/yt-dlp/releases

# 下载文件
wget -O yt-dlp https://github.com/yt-dlp/yt-dlp/releases/download/2025.07.21/yt-dlp_linux

# 移动文件
sudo mv yt-dlp /usr/bin/

# 文件授权
sudo chmod +x /usr/bin/yt-dlp
  • Windows 安装(二进制方式)
1
2
# Windows (可直接下载 Exe 可执行文件)
# https://github.com/yt-dlp/yt-dlp/releases

yt-dlp 使用方法

下载视频

  • 下载命令
1
yt-dlp "https://www.youtube.com/watch?v=xxxx"
  • 下载命令(支持断点续传 + 代理)
1
yt-dlp -c --proxy "http://127.0.0.1:7890" "https://www.youtube.com/watch?v=xxxx"
  • 下载命令(支持断点续传 + 代理 + 多线程加速)
1
yt-dlp -c --proxy "http://127.0.0.1:7890" -N 4 "https://www.youtube.com/watch?v=xxxx"
  • 下载命令(支持断点续传 + 代理 + 多线程加速 + 安全文件名)
1
yt-dlp --restrict-filenames -c --proxy "http://127.0.0.1:7890" -N 4 "https://www.youtube.com/watch?v=xxxx"
  • 参数说明
参数含义说明
-N指定线程数量使用多个线程进行下载,可以加快下载速度
-c支持断点续传从已下载部分直接接着下载,不会重头开始下载
--restrict-filenames使用安全文件名文件名最终会变成类似 2_HOUR_STUDY_WITH_ME.mp4
--proxy "http://127.0.0.1:7890"指定代理支持 http://https://socks5:// 等代理格式

特别注意

  • YouTube 视频通常分成音频 + 视频两个流下载,yt-dlp 会自动合并处理。
  • 如果是长视频,建议 yt-dlp 配合 -c 断点续传和 -N 多线程加速,这样即使下载中途断了,也能很快恢复。
  • -N 参数对大部分 HTTP 分片流(DASH、HLS)有效,对单个 MP4 文件直链无效。有些代理或网络环境下,如果线程数太高,可能触发 YouTube 限制。

查看视频格式

  • 查看视频支持的格式
1
yt-dlp -F --cookies-from-browser chrome  -c --proxy "http://127.0.0.1:6860" "https://www.youtube.com/watch?v=xxxxx"
  • 查看视频支持的格式(指定代理和 Cookie)
1
yt-dlp -F --cookies-from-browser chrome --proxy "http://127.0.0.1:6860" "https://www.youtube.com/watch?v=xxxxx"

yt-dlp 使用问题

问题描述:下载 YouTube 视频时,触发了人机验证 / 登录验证(如下所示),yt-dlp 没法直接绕过,所以它提示要用浏览器 Cookie 来模拟已登录的状态。

1
ERROR: [youtube] 5Q2Pc-e-8Qc: Sign in to confirm you’re not a bot. Use --cookies-from-browser or --cookies for the authentication. See  https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp  for how to manually pass cookies. Also see  https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies  for tips on effectively exporting YouTube cookies

解决方法一:使用浏览器插件

  • (1) 安装浏览器插件

    • 推荐用 Get cookies.txt(Chrome)或 Firefox 的同类扩展插件。
  • (2) 导出 Cookie 文件

    • 浏览器打开 https://www.youtube.com
    • 确保已经登录 Youtube
    • 点击扩展插件 → 导出 Cookies → 保存成 cookies.txt 文件
  • (3) 让 yt-dlp 用 Cookie 文件下载

    1
    yt-dlp -c --proxy "http://127.0.0.1:7890" --cookies cookies.txt "https://www.youtube.com/watch?v=xxxx"

解决方法二:从浏览器自动读取 Cookie

  • (1) yt-dlp 支持直接读取浏览器的 Cookie(需要本地环境支持)

    1
    yt-dlp --cookies-from-browser chrome -c --proxy "http://127.0.0.1:7890" "https://www.youtube.com/watch?v=xxxx"
  • (2) 参数说明

    • --cookies-from-browser chrome 表示从 Chrome 读取 Cookie,也支持用 firefoxedge 等。
    • 要求本地浏览器已经登录了 YouTube,并且浏览器没有关掉 Cookie 保存功能。

音频和视频合并失败

YouTube 视频通常分成音频 + 视频两个流下载,yt-dlp 会在两者下载完成后自动合并处理。但是,如果 .webm 音频是 Opus 编码,直接合并进 .mp4 会报错,如下所示:

1
2
3
4
5
6
7
8
9
10
[youtube] 5Q2Pc-e-8Qc: Downloading webpage
[youtube] 5Q2Pc-e-8Qc: Downloading tv client config
[youtube] 5Q2Pc-e-8Qc: Downloading tv player API JSON
[info] 5Q2Pc-e-8Qc: Downloading 1 format(s): 401+251
[download] 2_-HOUR_STUDY_WITH_ME-[5Q2Pc-e-8Qc].f401.mp4 has already been downloaded
[download] 100% of 3.27GiB
[download] 2_-HOUR_STUDY_WITH_ME-[5Q2Pc-e-8Qc].f251.webm has already been downloaded
[download] 100% of 111.71MiB
[Merger] Merging formats into "2_-HOUR_STUDY_WITH_ME-[5Q2Pc-e-8Qc].webm"
ERROR: Postprocessing: Conversion failed!

这种情况需要使用 Ffmpeg 先将音频转成 AAC 编码,然后再进行合并(前提是 yt-dlp 已经将 .webm.mp4 文件都完整地下载到本地)

1
ffmpeg -i video.mp4 -i audio.webm -c:v copy -c:a aac -b:a 192k output.mp4

下载时合并音频和视频

YouTube 视频通常分成音频 + 视频两个流下载,若希望 yt-dlp 在下载两者的时候直接合并,可以参考以下命令:

1
yt-dlp -f "bv*+ba" --merge-output-format mp4 "https://www.youtube.com/watch?v=xxxx"

参数 -f "bv*+ba"yt-dlp 里的格式选择表达式,意思是:

  • bv* = best video stream(最好画质的视频流),* 表示不限编码类型(AV1、VP9、H.264 都可以)
  • ba = best audio stream(最好音质的音频流)
  • + = 选择视频流和音频流,并在下载后合并成一个文件

下载时指定视频的分辨率

  • 查看视频支持的格式
1
yt-dlp -F --cookies-from-browser chrome  -c --proxy "http://127.0.0.1:6860" "https://www.youtube.com/watch?v=xxxxx"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[info] Available formats for DXT9dF-WK-I:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
249-drc webm audio only 2 │ 89.74MiB 51k https │ audio only opus 51k 48k low, DRC, webm_dash
250-drc webm audio only 2 │ 119.84MiB 67k https │ audio only opus 67k 48k low, DRC, webm_dash
249 webm audio only 2 │ 88.83MiB 50k https │ audio only opus 50k 48k low, webm_dash
250 webm audio only 2 │ 118.56MiB 67k https │ audio only opus 67k 48k low, webm_dash
140-drc m4a audio only 2 │ 229.94MiB 129k https │ audio only mp4a.40.2 129k 44k medium, DRC, m4a_dash
251-drc webm audio only 2 │ 241.29MiB 136k https │ audio only opus 136k 48k medium, DRC, webm_dash
140 m4a audio only 2 │ 229.94MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
251 webm audio only 2 │ 239.12MiB 135k https │ audio only opus 135k 48k medium, webm_dash
244 webm 854x480 24 │ 568.95MiB 320k https │ vp9 320k video only 480p, webm_dash
397 mp4 854x480 24 │ 342.40MiB 193k https │ av01.0.04M.08 193k video only 480p, mp4_dash
136 mp4 1280x720 24 │ 385.71MiB 217k https │ avc1.4d401f 217k video only 720p, mp4_dash
247 webm 1280x720 24 │ 1.05GiB 603k https │ vp9 603k video only 720p, webm_dash
398 mp4 1280x720 24 │ 653.15MiB 368k https │ av01.0.05M.08 368k video only 720p, mp4_dash
137 mp4 1920x1080 24 │ 1.59GiB 915k https │ avc1.640028 915k video only 1080p, mp4_dash
248 webm 1920x1080 24 │ 1.62GiB 934k https │ vp9 934k video only 1080p, webm_dash
399 mp4 1920x1080 24 │ 1.21GiB 699k https │ av01.0.08M.08 699k video only 1080p, mp4_dash
271 webm 2560x1440 24 │ 4.40GiB 2540k https │ vp9 2540k video only 1440p, webm_dash
400 mp4 2560x1440 24 │ 3.72GiB 2146k https │ av01.0.12M.08 2146k video only 1440p, mp4_dash
313 webm 3840x2160 24 │ 14.92GiB 8602k https │ vp9 8602k video only 2160p, webm_dash
401 mp4 3840x2160 24 │ 8.33GiB 4805k https │ av01.0.12M.08 4805k video only 2160p, mp4_dash
  • 下载视频时指定分辨率
1
yt-dlp -f 137+140 "https://www.youtube.com/watch?v=xxxxx"

参数说明:

  • 137 表示 1920x1080 视频(avc1 编码标记,即 H.264 视频编码)
  • 140 表示 MP4 音频(m4a 音频编码)

下载时指定视频编码为 H.264

若希望指定 yt-dlp 下载视频的编码格式为 H.264(在 YouTube 格式代码中,H.264 编码视频通常带有 avc1 标签),可以参考以下命令:

1
yt-dlp -f "bv[codec^=avc1]+ba" --merge-output-format mp4 "https://www.youtube.com/watch?v=xxxx"

参数说明:

  • -f "bv[codec^=avc1]+ba"
    • bv = best video stream(最好画质的视频流)
    • [codec^=avc1] = codec 字段以 avc1 开头(H.264 的编码标记)
    • ba = best audio stream(最好音质的音频流)
    • + = 选择视频流和音频流,并在下载后合并成一个文件
  • --merge-output-format mp4
    • 限制输出容器是 MP4(和 H.264 配合更好)