type
Post
status
Published
date
Jul 2, 2021
slug
yt-dlp
summary
如果你喜欢用命令行工具,那么保存网络视频可能是个挑战。视频网站不断更新技术来保护内容,传统下载工具很难跟上。
yt-dlp 是 youtube-dl 的改进版本,已经成为最好用的命令行视频下载工具。tags
工具
开发
category
开源平替
icon
password
URL
yt-dlp 我从头到尾折腾了一遍。下面是我踩坑之后留下来的“有效配置”。
一、先装 ffmpeg,不然 yt-dlp 等于没装
只装 yt-dlp 不装 ffmpeg,遇到视频音频分开的情况(YouTube 几乎所有高清视频都是分离的),下载下来的文件要么无声,要么只有声没有画面。ffmpeg 就是那个帮你缝合的东西。
各平台安装命令(别去官网翻下载页了):
- Windows:
scoop install ffmpeg或choco 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 运行时就行。- 作者:airouter.me
- 链接:https://airouter.me/article/yt-dlp
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
.webp?table=block&id=29d6498c-e5c2-8142-95cf-f25aa5bf7c3c&t=29d6498c-e5c2-8142-95cf-f25aa5bf7c3c)
.webp?table=block&id=29d6498c-e5c2-81db-8e4b-e244bef7a08e&t=29d6498c-e5c2-81db-8e4b-e244bef7a08e)
.webp?table=block&id=29d6498c-e5c2-81c0-a99d-c7634656aeb1&t=29d6498c-e5c2-81c0-a99d-c7634656aeb1)
.webp?table=block&id=29d6498c-e5c2-81a6-9769-d0a36aa56ae1&t=29d6498c-e5c2-81a6-9769-d0a36aa56ae1)
.webp?table=block&id=29d6498c-e5c2-81b9-9097-ca18dffbaf26&t=29d6498c-e5c2-81b9-9097-ca18dffbaf26)
.webp?table=block&id=29d6498c-e5c2-8179-a7cc-f3e9ba78174b&t=29d6498c-e5c2-8179-a7cc-f3e9ba78174b)
.webp?table=block&id=29d6498c-e5c2-8139-99e4-ddc3616fb5c9&t=29d6498c-e5c2-8139-99e4-ddc3616fb5c9)


