从手动保存到批量自动化:douyin-downloader 抖音批量下载工具上手全记录
【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具,去水印,支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader
那个周五的晚上,我在工位上对着第 43 个"另存为"弹窗发呆。
那天 leader 丢给我一句话:下周的选题是"美食博主最近都在拍什么",你先把十个账号近半年的作品都存下来当素材。听起来不难,对吧?等我真正动手才发现,所谓"存下来",是打开一个又一个作品页,等它缓冲完,右键另存为,然后收获一串毫无意义的随机数字文件名。更崩溃的是,有的视频存到一半断网,文件损坏了都不知道;有的图集存下来只剩一张图;至于按"博主—日期—主题"归档,那基本是奢望。
到晚上十点,我存了不到六十条,脑子里只有一个念头:一定有工具能把这件破事自动化。于是朋友推给我 douyin-downloader,一个开源的抖音批量下载工具。我把当周剩下的活干完后,花了一个周末把它从装到用整个走了一遍。这篇文章与其说是一份 douyin-downloader 教程,不如说是我这段真实使用经历的全记录,写给和我一样第一次接触它的你。
用一句话讲清楚它是谁
douyin-downloader 是一个基于 Python 的开源命令行工具,采用 MIT 协议,代码和文档都公开躺在仓库里,谁都能拿去用、去看、去改。它解决的核心问题很朴素:把"从抖音保存内容"从一件手工活,变成一件可以批量、可重复、有记录的事。
具体能下什么?单条视频和图文自不用说,还包括合集、音乐原声、某个博主主页下的全部作品(也就是抖音博主作品批量下载最常见的用法)、点赞列表,以及当前账号的收藏夹。视频默认优先无水印源——俗称的"去水印"——画质上会自动挑最高码率的那份。下载下来的不止是一个视频文件,而是连封面、原声音乐、作者头像和一份 JSON 元数据一起打包。听起来有点全,但正是这些细节,让我从"能用"变成了"离不开"。
为什么它能稳定不翻车:一次下载请求的旅程
我第一次用的时候,心里其实是有疑虑的——这类工具大多脆弱,今天能跑明天就挂。用久了我才理解,douyin-downloader 的可靠不是靠运气,而是把一次下载拆成了好几个有分工的环节。打个比方,每次你丢给它一个链接,它就像个办事利索的跑腿小哥,走完一整趟流程:
- 先拆单。拿到链接先判断这是什么东西:单视频、图文、合集、音乐、用户主页、还是直播间?它能识别九种左右的链接类型,短链接也会先展开再判断。
- 再查台账。动手前,它先翻一本 SQLite 台账,确认这条作品以前下过没有。下过就跳过,没下过才动手。这本台账还顺带记着每次下载的历史,所以"增量下载"——只补新的、不重下旧的——是自然实现的。
- 然后挑货源。确认要下之后,它在平台给出的多个视频源里,挑那个没有水印、码率最高的。
- 接着打包。视频文件之外,封面、音乐、头像、元数据一起带走,命名和目录结构都按你定好的规则来。
- 遇到查岗就换路。如果平台 API 开始风控翻页(常见于抓很多页作品时),它会自动切到浏览器模式,弹窗出来你手动过一下验证码就行,任务不用重来。
- 最后验货。下载完它会比对文件大小,发现不完整就自动清掉重下,不会留一个半截文件糊弄你。
你看,去重、完整校验、兜底策略,这些词听起来很高大上,落地之后其实都是"少让用户操心的细节"。这正是我敢把它挂后台跑一整晚的原因。
从安装到第一次成功下载的完整路线
我的建议是,别一上来就研究全部配置,先把一条最小路线跑通,再慢慢加东西。
第一步,把仓库拿下来。需要 Python 3.8 以上的环境,然后:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt装依赖这步别跳过,也别用太老的 Python,不然后面会莫名其妙报错。
第二步,拿一张"通行证"——Cookie。抖音的接口需要登录态,工具提供了自动获取的方式:
python -m tools.cookie_fetcher --config config.yml它会用浏览器打开抖音,你正常登录一次,回到终端按回车,Cookie 就自动写进配置了。为什么非要这一步?因为不带 Cookie 去请求,服务器基本只回你一个"请先登录"的空壳。Cookie 是会过期的,过几天失效了,重新跑一遍这个命令就行。
第三步,写一份最小配置。新建config.yml,核心其实就四行:
link: - https://www.douyin.com/user/某个博主主页地址 path: ./Downloaded/ mode: - post number: post: 50用人话解释:link告诉它去哪(这次是某个博主的主页);path是东西存哪;mode是"要哪一类内容",post就是作品,想连点赞的也一起下就加like;number是数量上限,写 0 表示不限制、全量抓。
第四步,跑起来:
python run.py -c config.yml然后你会看到一个进度条刷起来——每个视频一行,跑完变绿,右下角还有整体进度和剩余时间:
等它跑完,打开下载目录,文件已经被按博主归档好,命名是"日期_标题_ID"这种一眼能看懂的结构,不再是那串随机乱码了:
从这一刻起,我才真正体会到"工具替你干活"是什么感觉。
三份真实使用手记:别人的场景,我的参考
工具好不好用,光看功能清单没用,得看它能不能塞进真实的生活里。我身边恰好有三位不同身份的人,各自的用法都不一样。
第一份,来自做美食内容的阿哲。他的工作是每天拆解竞品账号,过去这活儿得两个人轮流点链接,一天耗四个小时。现在他的配置里塞了三个博主链接,mode同时开post和like,再打开增量开关,每天花十五分钟把新作品补齐就收工。他说了一句让我印象很深的话:"这工具最值钱的不是下载那一下,是它让我知道哪些下过了、哪些是新的。"
第二份,是读研的小方。他做短视频传播研究,需要按关键词捞样本、按时间窗筛选,还要存下评论做文本分析。他用的是另外几条命令:--search按关键词搜索导出清单,--hot-board拉当天热搜榜,再配合配置文件里的comments采集,把每条作品的评论存成 JSON。对他这种要"数据"而不是要"视频"的人来说,这其实就是一个轻量的抖音数据采集入口,导出结果直接就是结构化文件,省掉了自己写爬虫的一整段路。
第三份是我自己。有次需要完整录下一场教学直播,用的是直播录制功能:
link: - https://live.douyin.com/直播间ID live: max_duration_seconds: 3600 chunk_size: 65536 idle_timeout_seconds: 30max_duration_seconds写 0 就是一直录到主播下播。最贴心的是中途断网或手动中断,已经录下的字节也会保留,不会前功尽弃。当时终端里的流程大概长这样:
一个小提醒:直播如果拿到的是 HLS 格式,工具只会存下播放列表文件,需要再用 ffmpeg 转成视频;FLV 格式则可以直接播放。
决定下载体验的几个参数,该怎么调
用了一段时间后,我慢慢摸清了几个参数背后的权衡,这里把我的理解分享给你。
并发数thread。默认是 5,意思是同时开 5 个下载任务。网络条件好、下载的又是小文件时,调到 8 甚至 10 能明显提速;但如果是弱网或者被平台盯上了,并发太高反而容易触发风控,这时候调回 3、4 反而更稳。记住一个原则:提速的收益是线性的,被限流的代价是雪崩的。
重试次数retry_times。默认 3 次,采用指数退避(1 秒、2 秒、5 秒)。如果你在跑大任务、网络又不太稳,调到 5 会更安心;日常小批量 3 次足够,没必要为了"显得稳"无限拉高。
命名规则filename_template。默认是{date}_{title}_{id},桌面版里能看到更多可用变量。命名这事看起来小,其实决定了你三个月后还能不能找到一条素材。我的建议是:日期放最前,方便按时间排序;ID 一定保留,因为标题可能重名,ID 是唯一标识。目录上,作者目录默认用昵称,重名博主多了之后可以考虑换成"昵称_ID"的组合。
另外两个可选功能,按需开就行:视频转写transcript适合需要逐字稿的人(做字幕、做研究),但要自己配 OpenAI 的密钥;评论采集comments适合做数据分析,max_comments默认 0 表示不限量,量大的时候记得设个上限,不然请求数会很可观。
我踩过的坑,和当时的处理办法
既然是真实使用记录,坑也得如实讲。
第一个坑是 Cookie 失效。症状很典型:日志里一片"需要登录"之类的报错。处理很简单,重新跑一遍 cookie_fetcher 再登录一次就行。后来我养成习惯,每次大任务前先顺手刷新一次,基本没再被这个卡过。
第二个坑是翻页风控,表现是"只能抓到 20 条作品"。这是平台的常见限制,解决办法是启用浏览器兜底:配置里browser_fallback.enabled设成 true,headless设成 false,让浏览器窗口弹出来,看到验证码就手动过一下,再让它继续滚。记住别急着关窗口,等它自己滚完。
第三个坑是收藏夹模式的限制。我一开始图省事,把collect(收藏夹)和post写进了同一个mode列表,结果任务报错。查了文档才知道,收藏夹模式必须单独用,不能和其他模式混写。这类限制在官方 README 的"限制说明"里写得很清楚,建议开始前先扫一眼,能省不少排查时间。
第四个坑是单条视频下载失败。这通常是因为视频被删、被设成私密,或者网络中断。工具默认会自动跳过失败的条目继续跑,不会让一颗老鼠屎坏了一锅汤。想知道失败原因,就加--verbose参数跑一遍,日志里会写明是哪种情况。
桌面版、接口和更远的将来
命令行用顺手之后,我还留意到项目在推一个叫 Douzy 的桌面客户端,基于同一套后端,正在内测。对我这种不习惯命令行的人来说,它友好很多:粘贴链接就能开始,左侧能清晰看到下载入口、任务中心、作品档案这些模块:
桌面版最戳我的两个点是任务中心和作品档案:前者把每个任务的状态、成功失败数量、耗时都摊开给你看;后者把 SQLite 里的下载历史做成一个可搜索的库,按作者、关键词、时间筛选,还能批量导出。以前"我到底下过什么"全凭记忆,现在打开档案库一目了然:
如果你有把它接进自己系统的需求,它还提供 REST API 服务模式,起一个本地服务,用接口提交下载任务、查询任务状态。桌面版在写这篇文章时还处于内测期,命令行版则是完全可用、持续维护的状态。
最后说一句项目本身:它采用 MIT 协议,源码里的目录结构也很清楚(核心逻辑在core/,配置解析在config/,辅助脚本在tools/),想深入研究或者提改进建议都很方便。社区贡献不外乎那几样——报 bug、提想法、改代码、补文档,门槛不高,欢迎程度不低。
现在就可以开始的五件小事
这篇文章看到这里,你其实已经知道全部关键信息了。剩下的事,按这个顺序做就行:
- ✅ 克隆仓库、装好依赖;
- ✅ 跑一次 cookie_fetcher,把通行证拿到手;
- ✅ 写一份只含
link、path、mode、number的最小配置; - ✅ 先下一个博主的最新几条作品试试水;
- ✅ 跑通了,再按自己的场景去加增量、命名、评论采集这些功能。
工具越用越顺的过程,本质上是你越来越清楚自己需要什么的过程。最后照例提醒一句:方便归方便,用的时候请只保存你有权保存的内容,尊重原作者和平台的规则,别开过高的并发去冲击服务。把工具用在正当的收集和整理上,它就是个值得长期留着的帮手。
【免费下载链接】douyin-downloaderA practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具,去水印,支持视频、图集、合集、音乐(原声)。项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考