Lazy loaded image
开源平替

5️⃣万能开源下载工具:yt-dlp

字数 1894阅读时长 5 分钟
2021-7-2
2026-5-8
type
Post
status
Published
date
Jul 2, 2021
slug
yt-dlp
summary
如果你喜欢用命令行工具,那么保存网络视频可能是个挑战。视频网站不断更新技术来保护内容,传统下载工具很难跟上。yt-dlpyoutube-dl 的改进版本,已经成为最好用的命令行视频下载工具。
tags
工具
开发
category
开源平替
icon
password
URL
yt-dlp 我从头到尾折腾了一遍。下面是我踩坑之后留下来的“有效配置”。

一、先装 ffmpeg,不然 yt-dlp 等于没装

只装 yt-dlp 不装 ffmpeg,遇到视频音频分开的情况(YouTube 几乎所有高清视频都是分离的),下载下来的文件要么无声,要么只有声没有画面。ffmpeg 就是那个帮你缝合的东西。
各平台安装命令(别去官网翻下载页了):
  • Windows:scoop install ffmpegchoco install ffmpeg
  • macOS:brew install ffmpeg
  • Linux (Ubuntu/Debian):sudo apt install ffmpeg
安装完命令行敲 ffmpeg -version,有输出版本信息就对了。
避坑:系统自带的 ffmpeg 版本太老有可能跟 yt-dlp 打架。如果合并视频音频时一直报错,换成 yt-dlp 社区推荐的构建版,能省掉不少跟版本兼容性作斗争的时间。

二、下载一个视频,不要抄过去就完事

先给一个最基础的命令:
但这样下载的质量可能不是你想要的。先看看到底有哪些格式可选:
屏幕会输出一个表格,列出所有可用的 format code。
如果你想要最高画质(视频+音频分别取最好的再合并):
合并后默认容器格式可能是 webm,想要 mp4:
避坑:注意 bestvideo 可能会拿到质量太高导致播放器卡顿的编码(比如 AV1)。如果你跟我一样旧设备硬解不了,在格式选择的时候截住它:
这句的意思是:优先挑 H.264/H.265 编码的视频流,没有合适的才用其他编码。

三、下载付费 / 会员 / 年龄限制视频

直接下会报错,因为 yt-dlp 不知道你是谁。
先确保在你常用浏览器里登录了目标网站,然后直接用浏览器里的 cookies:
支持 chrome、firefox、edge、opera、brave 等主流浏览器。
避坑
  • 这个命令用的是你当前浏览器的 登录态,不是以浏览器名字为最终依赖。如果换了不同浏览器登录,要换成对的浏览器名。
  • 简单写个浏览器名出不来时,说明你可能需要更精确地指定配置(比如多用户 profile),查 -cookies-from-browser 的详细用法,加上 :ProfileName 参数。

四、格式筛选,别再一个个手动算了

格式选择器最有用的几个操作:
限制分辨率不超过 720p:
这样 4K 的视频会被自动拉回到 720p,省流量。
根据文件大小选(大概接近 1GB):
命令会从可用的格式里,选一个总大小最接近 1GB 的。
根据编码器优先顺序筛选(AV1 > H.265 > H.264 > VP9):
先在支持的格式里挑 AV1,没有再依次降级。
避坑:排序 -S 和筛选 -f 经常混在一起用,这是对的,但优先级要搞清:-f 先粗筛,-S 再在结果里精细排序。先筛后排,别指望一排把完全不符合条件的格式也给捞回来。

五、下载字幕

手动下载字幕(非自动生成版,更干净):
下载自动生成字幕(YouTube才有,有些视频本身不自带):
默认下载格式是 vtt,要转成主流格式:
避坑
  • -write-auto-subs 经常下载的不是最干净的版本(带"自动"标识),自动字幕的同步可能不准。
  • 如果要中英双语,可以 -sub-langs "zh-Hans,en"
  • 有的视频根本没有中文字幕,加了参数不会报错,但你会奇怪为什么没生成。可以先 yt-dlp --list-subs URL 查看有哪些可用字幕,再下。

六、后处理:缩略图 / 元数据 / 重封装

嵌入缩略图做封面
添加元数据(把标题、上传者、描述写入文件)
避坑--embed-thumbnail--embed-metadata 同时用有时会让文件的创建时间变成你运行它那一刻的时间,而不是原始上传日期。如果你像我一样在意时间戳,要额外用 --no-overwrites 兜着。
不想重编码(不损画质),只换个封装容器 你下载得到的文件可能是个 mkv,但只想做个 mp4 在手机上看:
这个是 直封装,不重新编码,速度飞快。
如果播放器不支持的编码必须重新编码:
注意这个会慢很多。

七、播放列表批量下,别只复制第一个视频连接

下载整个播放列表:
整个从中间某一段开始下载:
避坑:最坑的是:你打开页面以为自己只复制了一个视频 URL,但那个视频属于某个播放列表,结果 yt-dlp 把整个播放列表都下了。关键控制这两个:
存档神器 --download-archive
让你的多次运行自动记住下过哪些,不会重复下载:
运行一次以后,archive.txt 里记录下了所有的视频 ID。下一次再跑同一 URL,之前下过的自动跳过。
结合 --no-overwrites(不要覆盖已存在的文件),组合起来:
非常适合每天增量同步关注的 UP 主。

八、把常用参数沉淀进配置文件

每次复制粘贴很烦。在 ~/.config/yt-dlp/config(Windows 在 %APPDATA%\\yt-dlp\\config.txt)里面写你需要的默认选项,例如:
以后直接 yt-dlp URL,它自动用这些默认值跑。

九、几个我要收藏的组合(直接拿去用)

1. 下载一个单集视频(最高画质,MP4格式)
2. 播放列表增量化(不重复下)
3. 只下载音频,保留歌手/曲名元数据,嵌入封面
4. 下载一段特定的时间段
注意 --download-sections 强制要求 ffmpeg。

十、版本过老会直接失败,更新命令

老版本 youtube-dl 更新慢、容易被网站屏蔽。建议全部切成 yt-dlp,并定期更新:
Arch Linux 用户直接 sudo pacman -Syu 走滚动升级,软件包 yt-dlp 已经取代了旧包。
如果提示缺 JavaScript 运行环境(Deno/Node.js/Bun)来解析 YouTube 新版签名算法,按官方告示跑 yt-dlp 时会给出命令,跟着装一个 JS 运行时就行。
上一篇
最好用的视频播放器:PotPlayer
下一篇
记录灵感闪光:Memos