抖音批量下载工具 douyin-downloader:从安装到深度定制的一次完整上手
2026/8/14 10:08:43 网站建设 项目流程

抖音批量下载工具 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

周五晚上十点,剪辑师小林接到一个急活:客户要在 48 小时内交付一条美食盘点视频,素材是某位博主过去半年发布的 120 条作品。他原以为得一条条复制链接、再找网页去水印,干到天亮都未必收得完;结果用抖音批量下载工具 douyin-downloader 配置了一次,半小时后 120 条无水印素材已经按博主、按日期整整齐齐躺在硬盘里。

这篇文章不打算按"痛点罗列—解决方案"的套路写,而是沿着小林这次"从零上手"的完整旅程来展开:先看这工具能干什么,再走一遍安装、第一次下载、批量下载,接着聊它怎么应对风控和断网,最后讲如何按自己的习惯深度定制。你读完就能照着走完一遍,也能明白每个配置项背后是什么逻辑。

第一章 先看它到底能干什么:一张功能地图

douyin-downloader 本质上是一个"链接进来、文件出去"的转换器:你给它一个抖音链接,它把对应的内容解析出来,下载到本地。关键在于它支持的链接类型覆盖了抖音几乎所有的内容形态:

你粘贴的链接下载到的内容
/video/{id}单个视频(无水印源优先)
/note/{id}/gallery/{id}单个图文(含多图)
/collection/{id}/mix/{id}整个合集
/music/{id}音乐原声文件
/user/{sec_uid}作者主页批量下载(发布/喜欢/合集/音乐)
live.douyin.com/{房间号}直播录制(FLV/HLS)
v.douyin.com/...短链自动解析还原

和单纯"下载视频"的工具不同,它下载的是一套完整素材:视频、封面、音乐、作者头像、JSON 元数据,甚至是评论。项目里core/目录按内容类型拆成了多个下载器(video_downloader.pymix_downloader.pymusic_downloader.pylive_downloader.py等),职责分明,这也是它功能面广却不乱的原因。

桌面版的主界面把"粘贴链接—检测内容—选择下载类型"压缩成了三步。不过命令行版才是这个项目的完全体,接下来我们用命令行走一遍完整流程。

第二章 三步完成 douyin-downloader 环境配置

小林的第一次上手只用了三个命令。下面这段代码解决"把项目代码和环境准备好"的问题:

git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt

如果你打算用到浏览器兜底或自动获取 Cookie 的能力,再多装一个 Playwright 浏览器内核:

pip install playwright && python -m playwright install chromium

环境就绪后,先复制一份示例配置再改。这段代码解决"生成一份可以编辑的配置文件"的问题:

cp config.example.yml config.yml

最后一步是关键中的关键:抖音的接口需要登录态,也就是 Cookie。项目推荐用自动方式获取,这段代码解决"自动登录抖音并把 Cookie 写进配置"的问题:

python -m tools.cookie_fetcher --config config.yml

运行后会弹出浏览器窗口,你正常扫码登录,回到终端按一下回车,程序就把 Cookie 写进config.yml了。这一步做了,后面所有下载都不会再碰"未登录"的墙。

第三章 把第一个链接交给它:从单条到批量

小林的第一个测试链接是博主主页。先看最小可用的配置长什么样,这段配置解决"指定下载谁的哪些内容、存到哪里"的问题:

link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx # 作者主页,支持多个链接 path: ./Downloaded/ # 保存目录 mode: - post # post=发布作品;可再加 like/mix/music number: post: 50 # 下载条数,0 表示不限 thread: 5 # 并发数 retry_times: 3 # 失败重试次数 database: true # 开启 SQLite 去重

然后运行:

python run.py -c config.yml

终端里会看到逐条作品的进度条,每条视频下载完成后状态变绿。小林这次下的是 50 条,用时不到十分钟——如果手动操作,光"找到视频—复制链接—粘贴—下载—重命名"这一套动作,50 条就要折腾两三个小时。

命令行也支持临时追加参数,适合不常改的场景。这段命令解决"不改配置文件、临时加一个链接并调整并发"的问题:

python run.py -c config.yml \ -u "https://www.douyin.com/video/7604129988555574538" \ -t 8 \ -p ./Downloaded

到这里你可能已经能跑通日常下载了。但批量下载跑得多了,会遇到两类很现实的问题:翻页被风控、网络半路断掉。下一章就讲工具怎么处理这两件事。

第四章 翻页被限制时,如何让下载自动兜底

小林第一次批量下载时就撞了墙:一个作者主页只抓到 20 条就停了。这是抖音翻页风控的典型表现——接口在持续翻页时会要求验证。

工具的处理方式是"API 优先、浏览器兜底":默认走官方接口,速度最快;一旦发现翻页受限,自动拉起一个浏览器窗口,你手动过一下滑块验证,它接着往下翻。这段配置解决"开启浏览器兜底并让它停在可见窗口"的问题:

browser_fallback: enabled: true # 开启兜底 headless: false # 显示浏览器窗口,方便手动过验证 max_scrolls: 240 # 最多滚动页数 idle_rounds: 8 # 连续无新内容几轮后停止 wait_timeout_seconds: 600

另外两类"下载到一半"的问题也有对应机制:

  • 失败重试:默认按 1 秒、2 秒、5 秒的指数退避重试(retry_times),不是傻乎乎地立刻重来;
  • 完整性校验:下载完成后比对 Content-Length,文件不完整会自动清理并重下,不会留下一个播到一半就卡住的残废文件。

control/目录里可以找到这些机制的实现(retry_handler.pyrate_limiter.py),它们共同保证了批量任务在无人值守时也能跑完。

第五章 用命名模板和数据库,让文件各就各位

素材下多了,第二个问题就来了:文件乱。小林第一天下完 50 条,第二天再去看,全是"VID_2024xxx"这种默认名,根本分不清哪条是哪条。

这个问题的解法是命名模板。这段配置解决"让每个作品按作者和日期自动归档"的问题:

folderstyle: true path: ./Downloaded/{author}/{year}-{month}/{date}_{title}_{aweme_id}/

命名模板支持的变量有 15 个(作者、日期、标题、作品 ID、合集名、清晰度等),桌面版的设置页里可以直接点选,命令行版写在path里即可。模板里的{aweme_id}是最重要的一环——它是每个作品的唯一编号,写进目录名后天然防重名。

与之配套的是 SQLite 去重。工具默认把下载记录写进dy_downloader.db,下次运行时先查数据库、再查本地文件,两头都对上才跳过。这意味着同一个链接、同一个作者主页重复跑几十次,也不会重复下载。想要增量更新也很简单,这段配置解决"只下载上次之后新发布的作品"的问题:

database: true database_path: dy_downloader.db increase: post: true # 只下载新发布的作品 like: true # 只下载新喜欢的作品 mix: true # 只下载合集里新增的内容

下载历史本身也是数据资产,可以随时查询。这段命令解决"查看最近的下载记录"的问题:

sqlite3 dy_downloader.db "SELECT aweme_id, title, author_name, datetime(download_time, 'unixepoch', 'localtime') FROM aweme ORDER BY download_time DESC LIMIT 20;"

第六章 直播、评论、热搜:把工具当内容采集器用

小林的需求跑顺之后,陆续发现了几个"超出下载"的用法。第一个是直播录制。这段配置解决"定时录制一场直播并保留已录数据"的问题:

link: - https://live.douyin.com/123456789 live: max_duration_seconds: 3600 # 0 表示录到主播下播 chunk_size: 65536 idle_timeout_seconds: 30

录制的 FLV 会存到Downloaded/{作者}/live/目录,并附带一份*_room.json直播间元数据。主播下播、网络空闲或你按 Ctrl+C 中断时,已录制的字节都会被保留下来——不会出现"录了两小时,一个 Ctrl+C 全没了"的惨剧。

第二个是评论采集。这段配置解决"把作品的评论区也一并抓下来"的问题:

comments: enabled: true include_replies: false # 设为 true 会多抓二级回复 max_comments: 500 # 0 表示不限量 page_size: 20

抓取结果会生成{date}_{title}_{aweme_id}_comments.json,和媒体文件放在同一个目录,方便后续做舆情分析或内容复盘。

第三个是热搜和搜索。这两条命令解决"不下载视频、只导出榜单和搜索结果数据"的问题:

python run.py --hot-board 30 -p ./Downloaded # 输出:./Downloaded/hot_board/20260424_221530.jsonl python run.py --search "猫咪" --search-max 100 -p ./Downloaded # 输出:./Downloaded/search/猫咪_20260424_221530.jsonl

如果你想把下载能力集成进自己的系统,它还提供 REST API 服务模式(python run.py --serve --serve-port 8000),通过POST /api/v1/download提交链接、GET /api/v1/jobs/{job_id}查询进度,源码在server/目录。下载完成后还能推送到 Bark、Telegram 或 Webhook,跑完一批素材手机立刻收到通知。

第七章 不想敲命令?桌面版同样能完成抖音批量下载

命令行功能全,但小林觉得日常维护素材时还是有个界面更直观。项目基于同一套后端做了桌面版,主界面支持粘贴链接检测、同步关注列表、可视化的任务中心,以及一个能按博主、关键词、时间筛选的"作品档案"。

任务中心把每个任务的进行中/成功/失败数量列得清清楚楚,右侧可以直接打开下载目录或查看详情。关注列表页则支持批量筛选"从未下载过"的博主,一键把某位创作者的最新作品全部拉下来。

不过要注意一点:命令行版始终是功能最全的形态,桌面版适合日常高频操作;遇到需要精细调参(命名模板、增量策略、代理设置)的场景,还是回到config.yml更顺手。两者共享同一套后端逻辑,不冲突。

结尾 回到小林的周五夜晚

回到开头那个周五:小林最终在周六中午就交了素材,比截止时间提前了整整一天。他后来把config.yml里的increase.post: true打开,每周跑一次增量更新,那位博主的素材库从此自动保持最新,再也没手动点过一条链接。

如果你想复刻小林的这套工作流,步骤很直接:从https://gitcode.com/GitHub_Trending/do/douyin-downloader克隆项目,按第二章的流程装环境、取 Cookie,然后把你的链接写进config.example.yml复制出的那份配置里,运行python run.py -c config.yml即可。遇到问题可以翻项目里的docs/目录和测试用例(tests/下有 40 多个覆盖各模块的测试文件),大多数边界情况都有对应的测试代码可以参照。

最后说一句理性的提醒: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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询