这篇笔记整理了 yt-dlp 的安装与常用下载命令,包括下载 MP4 视频、提取 MP3 音频、批量下载播放列表,以及使用 Cookie 和代理。想直接使用,可以先看安装后的命令速查;想了解画质选择,以及视频编码和封装格式的区别,再往下看详细说明。
太长不看: 推荐把这篇教程和想下载的音视频网址一起发给 AI,说明需要视频还是音频、期望的格式和画质,让它参考文中的命令帮你下载。
安装 Yt-dlp#
依赖确认
确认系统已正确安装 FFmpeg 和随附的 ffprobe;合并视频与音频、转换 MP3 都会用到它们。
ffmpeg -version
ffprobe -version
下载 YouTube 视频还需要留意 JavaScript 依赖:当前版本使用 yt-dlp-ejs 和受支持的 JavaScript 运行时完成挑战解析,官方推荐 Deno。不同安装渠道是否附带 EJS 不尽相同,缺失时按官方 EJS 安装说明补齐。
官方安装说明:https://github.com/yt-dlp/yt-dlp/wiki/Installation,以下列出个人常用系统的安装升级命令
MacOS 系统
brew install yt-dlp ffmpeg deno
# 更新
brew upgrade yt-dlp ffmpeg deno
Ubuntu 系统
sudo add-apt-repository ppa:tomtomtom/yt-dlp
sudo apt update
sudo apt install yt-dlp ffmpeg
# 更新
sudo apt update
sudo apt install yt-dlp ffmpeg
上面是通过第三方 PPA 安装的方式,版本更新取决于维护者;Deno 和 EJS 仍需按前面的官方说明确认。包管理器版本过旧时,参考官方安装说明选择其他渠道,不要混用不同渠道的更新命令。
安装后查询 yt-dlp 版本
yt-dlp --version
后面的截图保留自 2024 年,原示例使用 yt-dlp 2024.08.01,仅用于解释输出和格式选择,不代表当前版本的下载结果。实际可用画质、格式 ID 和网站限制可能变化,请以本机查询结果为准。
常用命令速查#
以下命令以已安装依赖为前提。将 "视频网址" 或 "播放列表网址" 替换为实际链接,保留两侧引号,避免网址中的 &、? 等字符被 shell 误处理。没有指定保存路径时,文件默认下载到当前目录。
# 默认下载视频
yt-dlp "视频网址"
# 优先选择 MP4 视频和 M4A 音频,没有时回退到其他格式
yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/bv*+ba/b" "视频网址"
# 提取并转换为 MP3 音频
yt-dlp -x --audio-format mp3 "视频网址"
# 下载播放列表;再次使用同一记录文件时跳过已下载项目
yt-dlp --download-archive archive.txt "播放列表网址"
MP4 优先不等于保证输出 MP4,也不保证所有播放器都支持其中的编码。需要精细选择画质、添加封面或使用登录状态时,继续看下面的说明。
默认下载命令#
在已安装 FFmpeg、正常下载到文件且未用配置文件覆盖选项时,默认的格式选择通常为 -f "bv*+ba/b",意为选择最佳的视频音频组合,后文会解释它的含义。
yt-dlp "https://www.youtube.com/watch?v=60ItHLz5WEA"
后续命令中的
"视频网址"都需要替换成实际链接;格式 ID 则需要先用--list-formats查询,不能照搬旧截图中的编号。

通过截图中 yt-dlp 输出的信息,我们得知:
它分别下载了视频流文件和音频流文件,最终合并为 Alan Walker - Faded [60ItHLZ5WEA] webm 视频文件
616 Alan Walker - Faded [60ItHLz5WEA]. f616.mp4 视频文件(Video Only) 251 Alan Walker - Faded [60ItHLz5WEA].f251.webm 音频文件
这里值得留意的是 616 和 251,它们是资源 ID,稍后会查看这个视频下的所有资源
查看可供下载的资源列表#
yt-dlp --list-formats "视频网址"

截图中展示了这个视频可获取的全部资源 —— 不同的封装格式、分辨率、编码、码率等
这里选取 720P 分辨率的视频资源进行说明

简要来说第一列为资源ID、第二列是容器后缀、第三列是画面分辨率
第六列的 “345K”、“808K” 是视频的码率。同样的编码和相近参数下,码率可以作为质量的参考,但不同编码的压缩效率不同,不能只凭码率判断哪个画质最好。
第七列展示传输协议,例如 https、m3u8;m3u8 通常对应 HLS,另外还有 MPEG-DASH 等流媒体技术。这里先把它们理解为传输方式,不必仅为了画质选择某一种协议。
第八列的 av01.0.05M.08、avc1.4D401F、vp09.00.40.08 描述了编码格式,分别对应 AV1、H.264、VP9(AV1 最新、VP9 是 Google 的开放标准,更适合4K等资源编码、H.264 使用最为广泛)
这里要区分编码格式和容器封装格式:前者 AV1、H.264、VP9 是编码格式,而我们下载到的视频 MP4、MKV、WEBM、AVI 是容器封装格式,容器将视频流、音频流、字幕等“打包”到一个文件中。实际使用 yt-dlp 时一般不需要指定具体资源,后面有更易用的命令。
第十列的 “video only” 说明这个资源只包含视频画面,不包含声音。完整截图中的 18 号资源则同时包含音视频;具体编码应以对应行的 VCODEC、ACODEC 列为准。
了解了以上信息,我们可以手动指定下载 398 AV1 编码 720P 分辨率的视频和 140 MP4A 编码的音频作为测试
# mp4
yt-dlp -f "398+140" "视频网址"
下载后的文件为 mp4 格式,这是 yt-dlp 自动判断的,如果指定 247 的 VP9 编码,则下载合并后是 mkv 格式,同时也把音频换为 251 的 opus 编码,则会自动合并为 webm 格式,yt-dlp 会选择适宜的容器封装技术来存储视频、音频流
# mkv
yt-dlp -f "247+140" "视频网址"
# webm
yt-dlp -f "247+251" "视频网址"
如需在合并音视频流时指定 MP4 容器,可使用 --merge-output-format 参数。它只影响需要合并的情况,不会把视频编码自动转成 H.264,也不会转换无需合并的单文件下载。
# mp4
yt-dlp -f "247+251" --merge-output-format mp4 "视频网址"
常用命令整理#
优先下载 MP4 视频
优先选择 MP4 视频和 M4A 音频,如果没有,则回退到其他格式;这不是强制转码为 MP4。
yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]/bv*+ba/b" "视频网址"
不关心最终格式,获取「最佳视频流」和「最佳音频流」,合并为一个视频
yt-dlp -f "bv+ba/b" "视频网址"
优先下载指定分辨率的视频(720P、1080P、4K)
下面的 height=720 等条件是精确匹配视频高度,并限定 MP4/M4A 资源;找不到对应组合时,/b 会回退到同时包含音视频的最佳单一资源,且没有分辨率限制。因此它不是“最高 720P / 1080P / 4K”的上限设置,也不保证最终下载到指定分辨率。
# 720P
yt-dlp -f "bv[height=720][ext=mp4]+ba[ext=m4a]/b" "视频网址"
# 1080P
yt-dlp -f "bv[height=1080][ext=mp4]+ba[ext=m4a]/b" "视频网址"
# 4K
yt-dlp -f "bv[height=2160][ext=mp4]+ba[ext=m4a]/b" "视频网址"
下载 MP3 格式的音频
# 提取 MP3,并将缩略图嵌入为封面
yt-dlp --extract-audio --embed-thumbnail --audio-format mp3 "视频网址"
# 不添加封面
yt-dlp --extract-audio --audio-format mp3 "视频网址"
"--extract-audio" 参数从资源中解析出音频流
"--embed-thumbnail" 设置文件封面缩略图
"--audio-format" 保存的音频格式,可选值为 best (default), aac, alac, flac, m4a, mp3, opus, vorbis, wav
补充:这里的 --audio-format 参数,如果你指定了 mp3、flac、opus, 最终的文件也会是对应名称的后缀文件、如果指定了 aac,最终保存的文件是 .m4a 文件,指定了 vorbis 则文件后缀为 .ogg,跟视频同理,yt-dlp 会根据你选择的音频编码选择适合的容器进行存储
下载 Playlist 视频列表
yt-dlp --download-archive archive.txt "https://www.youtube.com/playlist?list=PLSk-fsG1YwI9Zu4e8MJBKM2TRjWcXqCDw"
--download-archive archive.txt将成功下载的项目 ID 存入记录文件。下次使用同一文件时跳过这些项目;换了工作目录时,要注意是否仍然指向原来的archive.txt。
更多的 -f 参数说明,参考 yt-dlp 官方文档:format-selection-examples
格式参数的补充说明#
参数 -f "bv*+ba/b" 更详细的介绍
在前面说明的常规下载条件下,默认的 "bv*+ba/b" 是 "bestvideo*+bestaudio/best" 的简写。
bv*选择包含视频的最佳资源,允许它同时带有音频;bv则只选择纯视频资源。默认组合在选中资源已带音频时通常不再添加额外音轨,否则再与ba选择的最佳音频合并。“+” 加号代表单一视频和单一音频下载后合并为一个音视频文件,斜线 “/” 表示 “或”,当前方条件不满足时使用后面的条件进行匹配
best表示获取包含音频流的最佳视频,如果仅指定-f b,那么如果仅有一个 360P 的同时包含视频和音频的视频资源,也会被下载,虽然它跟通常意义上的 “高清” 不沾边儿,通常作为一个 “保底” 的可选参数
参数 -f "bv+ba" --merge-output-format mp4 和 -f "bv[ext=mp4]+ba[ext=m4a]" 的选择与使用
初看感觉这两个命令差不多 —— 都能下载 MP4 格式的视频,但还是有一些本质区别
前者的意思是分别获取「最佳视频流」和「最佳音频流」合并为 MP4 格式的视频,后者是在选择资源的时候就从 MP4 视频流及 M4A 音频流中下载其中的最佳画质,最终合并的也是天然的 MP4 视频格式
如果只想优先选择 MP4/M4A 资源,可以使用后者;它选的是符合这些条件的最佳资源,不一定是所有格式中的最高画质。MP4 容器内部仍可能是 AV1、VP9 等编码,文件后缀本身不能保证播放器兼容性。
--merge-output-format mp4 只指定合并容器,不会转换编码。更在意老设备兼容性时,需要进一步确认视频、音频编码是否受设备支持,常见组合是 H.264 视频与 AAC 音频;不关心容器时,则无需强制指定 MP4。
使用 Cookie 下载视频#
我最开始碰见需要设置 Cookie 的场景是下载 Bilibili 视频时,不登录下载到的视频画质低(是的,除了 Youtube,yt-dlp 也支持包括 Bilibili 在内的很多网站)
其中一个可行的方式是导出 Cookie,Firefox Cookies Text 插件:https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/
yt-dlp --cookies cookies.txt "https://www.bilibili.com/video/BV1H44y1w7AX"
Cookie 文件需要是 Netscape 格式。YouTube 等网站也可以使用 --cookies,但登录状态不能保证绕过所有访问限制,下载失败时仍需结合具体报错判断。
在自己的电脑上,也可以直接读取已登录浏览器的 Cookie,省去手工导出:
# 使用本机 Firefox 的登录状态
yt-dlp --cookies-from-browser firefox "视频网址"
# 使用 Chrome 时将浏览器名称改为 chrome
yt-dlp --cookies-from-browser chrome "视频网址"
浏览器配置、系统权限和 Cookie 加密方式都会影响读取结果;遇到数据库占用时可先关闭浏览器再试,其他错误参考官方 Cookie 说明。这些示例说明的是参数用法,不代表已在所有系统和浏览器上实测。
Cookie 属于敏感登录凭据,不要上传给 AI、提交到代码仓库或分享给他人;只在受信任的本机环境中使用。
使用 Socks5 设置代理#
最后,不得不提的 --proxy 参数使用如下,预祝网络畅通,心舒畅 🌈
yt-dlp --proxy "socks5://127.0.0.1:10808" "视频网址"
将示例地址和端口替换为本机实际运行的代理地址;这个参数不会自动启动代理服务。
了解至此,对于 yt-dlp 的简单实用场景,就基本能应付的来,更多的参数信息参考 --help 命令或 Document