前言 yt-dlp 是一个功能丰富的命令行音频 / 视频下载器,支持数千个站点 ,支持断点续传和网络代理等功能。
开源项目 yt-dlp 安装步骤 1 2 # Linux / Macpip install -U yt-dlp
1 2 3 4 5 6 7 8 9 10 11 # Linux (可直接下载可执行文件)# https ://github.com/yt-dlp/yt-dlp/releaseswget -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
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"
1 yt-dlp -F --cookies -from-browser chrome --proxy "http://127.0.0.1:6860" "https://www.youtube.com/watch?v=xxxxx"
yt-dlp 使用问题 缺少 Cookie 信息 问题描述:下载 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
解决方法一:使用浏览器插件
解决方法二:从浏览器自动读取 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 配合更好)