跳到正文
yt-dlp

Instagram 的 yt-dlp 命令生成器

为 Instagram 的帖子和 reels 生成 yt-dlp 命令。cookies 默认开启,因为没有它几乎什么都做不了。

可选。留空的话命令会以 URL 结尾,由你自己填。

你的命令

yt-dlp --merge-output-format mp4 --no-playlist --cookies-from-browser chrome https://www.instagram.com/p/Cxxxxxxxxxx/
基本

仅音频会提取声音轨并丢弃视频流。

视频与画质

限制高度上限。yt-dlp 仍会挑选该上限及以下最好的一路流。

把分离的视频流和音频流合并进去的文件类型。

高级选项(3)

会取代画质下拉框。适合已经熟悉 format 语法的人。

不重新编码,只重新封装。快且无损。

重新编码视频。慢且有损 —— 只在 remux 不行时才用。

音频

音频要转换成的文件类型。

VBR 的体积与质量之比最好;固定 bitrate 更容易预估大小。

字幕

内嵌会把字幕放进视频里;保存则在旁边写一个独立的 .srt 文件。

用逗号分隔。想要所有可用语言就写 all。

播放列表与频道

当网址同时属于一个视频和一个播放列表时该怎么做。

范围和列表都可以,例如 1-10,15,或者用 -5::2 表示从末尾开始每隔一项取一项。

高级选项(1)

记下已经下过的项,于是重新运行会跳过它们。这就是让一个频道保持同步的办法。

片段与章节
高级选项(2)

像 *00:01:30-00:03:00 这样的时间范围,或者章节名。开头的星号表示这是时间戳。

元数据与封面
高级选项(3)
SponsorBlock

依据 SponsorBlock 数据,把社区标记的片段从文件里直接剪掉。

高级选项(1)

片段保留,但会被标出来,让你自己跳过。

文件与目录

字段名写在 %(...)s 里。斜杠会创建目录。

高级选项(4)

文件写到哪里。配合上面的模板可以生成子目录。

文件名最大长度,按字符计。

筛选
高级选项(5)

YYYYMMDD,或者像 now-1month 这样的相对日期。

YYYYMMDD,或者相对日期。

跳过更小的文件。可以写 5M、500K 之类。

跳过更大的文件。

停下来之前要下载的文件数量。

网络

例如 2M 或 500K。当你需要把余下带宽留给别的事情时很有用。

高级选项(5)

能加快分片流的下载。从 4 开始比较合适。

失败的分片要重试几次。也可以写 infinite。

HTTP、HTTPS 或 SOCKS proxy 的地址。

让请求看起来来自真实浏览器。突然出现 403 时,这是最常见的解法。

登录与 cookies

直接读取你的登录会话。私密、年龄限制或会员专属内容都需要它。

高级选项(1)

从浏览器导出的 Netscape 格式 cookies.txt。

直播
高级选项(2)

反复检查直到预定的直播开始。MIN-MAX 是两次检查之间的秒数。

故障绕行
高级选项(3)

已弃用,应改用 --add-headers。之所以保留,是因为很多旧教程还在用它。

已弃用,应改用 --add-headers。

按站点区分的专用选项,例如 youtube:player_client=web。

输出与调试
高级选项(2)
重置

Instagram 需要登录会话

Instagram 对未登录的请求几乎什么都不给,所以 --cookies-from-browser 实际上是必须的,而不是可选项。运行命令前请关掉浏览器:Chrome 和 Edge 在运行时会锁住自己的 cookies 数据库。

轮播帖子会被当作播放列表,所以把播放列表处理设为整个播放列表才能取到全部内容。Stories 需要一个已关注该账号的会话,并且 24 小时后就消失。

Instagram 对自动化访问越来越不信任,一次下载太多太快的会话会被要求重新登录——征兆就是昨天还能用的命令今天返回登录页面。用专门的小号而不是主号,隔三差五正常登录保持 cookies 新鲜,并且接受这样使用的账号偶尔会被打上标记,无论命令写得多小心。这是平台的代价,不是 yt-dlp 的 bug。

帖子、reels 和精选集走同一个 extractor,但不同会话看到的东西不一样。你关注的账号的 reels 能正常下载;探索页的 reels 对从未接触过这类内容的会话常常拒发。精选集——钉在主页上的那些故事圈——每一个都作为自己故事的播放列表下来。IGTV 已退役:旧链接有时还能解析,但没有任何新东西在用它。

Instagram 的限速比 yt-dlp 日常面对的任何平台都狠。并发 fragment 只会让事情更糟而不是更好;一次取一条、每次运行之间留出停顿,才是活得下去的模式。多条目的运行在中途失败是常态——记录文件加上出错继续,会让重试变成续传而不是从头再来,这很重要:等运行跑完,最早那些条目的 CDN 链接通常已过期,全量重跑只会重新抓页面而不是媒体。

无法挽回的东西:你不关注的私密账号的帖子、过了 24 小时的 Stories、以及在你运行命令之前就被删掉的一切。抓回来的页面里的 CDN 链接很快过期,一小时前还能用的媒体网址现在可能拒绝——别重试旧链接,重新抓帖子页面。这种过期也是"尽早下载而不是以后再说"的理由:Instagram 从不承诺让媒体一直可达,而它确实说到做到。

常见问题

为什么没有 cookies 时 Instagram 会失败?
Instagram 对未登录的请求几乎什么都不给。--cookies-from-browser 实际上是必需的,而且那个会话必须属于一个能看到该帖子的账号。
能下载 stories 或 reels 吗?
reels 和普通帖子一样。Stories 需要一个已关注该账号的会话,并且 24 小时后失效。
怎么取到轮播帖子的全部内容?
把播放列表处理设为整个播放列表 —— yt-dlp 把多图帖子当作播放列表。