douyin-downloader 抖音批量下载指南:合集、用户主页与无水印视频 3 步上手
【免费下载链接】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
douyin-downloader 是一个 Python 编写的抖音批量下载工具,支持单条视频、图集、合集、音乐和用户主页作品的无水印下载,带进度显示、自动重试与 SQLite 去重。本文面向首次使用者与内容归档者,讲清安装、最小配置与常见场景。
它适合哪些场景
- 归档创作者作品:贴用户主页链接并指定
mode: post,按"作者/作品"落盘到本地;配合number限制条数,可以只拿指定数量,也可以全量。 - 保存完整合集:给出
/collection/或/mix/链接,工具自动翻页拉取合集内全部作品,不用逐条收藏。 - 原声音乐与图集:音乐链接优先直取音频,不必从视频里抽取;note/gallery 链接下载图集,文件无水印。
- 定期更新个人收藏:登录后提供 favorite_collection 页链接,用
collect/collectmix模式,增量补齐已下载收藏。
抖音批量下载快速上手(安装、配置、运行)
第一步,获取源码并装依赖。需要 Python 3.8+;若要使用浏览器兜底(见常见问题),还需单独装 playwright 与 Chromium。
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt第二步,准备最小配置。复制示例配置为config.yml,填入链接、下载目录与 Cookie——这一步决定"下什么、存到哪":
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - post number: post: 0 # 0 表示不限条数 thread: 5 retry_times: 3 database: true cookies: msToken: YOUR_MS_TOKEN ttwid: YOUR_TTWID odin_tt: YOUR_ODIN_TT passport_csrf_token: YOUR_CSRF_TOKEN sid_guard: YOUR_SID_GUARD第三步,取 Cookie 并运行。先运行自动获取脚本(浏览器登录抖音后回车,Cookie 会写回配置文件),再启动任务;终端实时显示进度与最终成功/失败计数:
python -m tools.cookie_fetcher --config config.yml python run.py -c config.yml跑完后在./Downloaded/下查看结果,下载历史记录在dy_downloader.db。
能力拆解:从链接解析到文件落盘
🔍 链接解析:贴什么链接都能路由
core/url_parser.py 用正则识别视频、图集、合集、音乐、用户主页、直播六类链接,并提取关键 id(aweme_id、sec_uid、mix_id 等)。你得到的是"不用区分链接格式":贴进去的链接会自动进入对应的下载逻辑,v.douyin.com短链同样支持。
上图所示为同后端桌面版 Douzy 的抖音工作台界面,CLI 版功能对等。
⬇️ 下载执行:分页拉取、并发下载、失败自动重试
以合集为例,core/mix_downloader.py 先按游标翻页拉齐合集内的全部作品,再提交队列并发下载。默认 5 线程,请求速率限制在约 2 次/秒;单条失败会按 1s、2s、5s 间隔重试 3 次。你得到的是终端里的进度条与成功/跳过/失败计数,不用盯着单条网络波动。
📁 文件落盘:按"作者/模式/作品名"组织
文件默认存到path目录,结构为作者名/模式/日期_标题_aweme_id/;folderstyle: true时每个作品一个独立文件夹。按需在配置里打开cover、music、avatar、json,可追加保存封面、原声、头像与 JSON 元数据;启用comments则为每个作品额外生成评论文件。你得到的是可直接用文件管理器浏览的本地目录树,文件名自带日期与标题。
🗄️ 去重与增量:重复运行不产生重复文件
SQLite 记录下载历史(默认dy_downloader.db),程序同时扫描本地目录的文件名,两者共同决定是否跳过。increase: true(默认)下重跑只补缺失的作品;删掉某个本地文件,该作品下次会重新下载。你得到的是可以放心反复执行的任务配置,适合长期更新。
进阶配置:三个高频配置项
thread与retry_times——速度换稳定。thread: 5是默认并发,调高可加快批量任务,但网络与账号侧压力同步上升;网络不稳时降到 2~3 反而更快完成。retry_times: 3指失败后的重试次数,弱网环境调到 5 更稳。
video_quality——挑哪档码率。默认highest只在 bit_rate 阶梯里选最高转码档,不额外发请求。改original会探测上传原片,体积可能比转码档大数倍,代价是每条作品多一次探测请求(10 秒超时);也可直接指定720p、1080p等档位,匹配不到时自动降级。取舍在于:归档画质,还是流量与时间。
increase——增量还是覆盖。按模式开关:true跳过磁盘上主文件已存在的作品;false在当前筛选范围内重新下载并覆盖。定期更新创作者主页时保持true;想换画质整批重存时,把对应模式改成false。
常见问题
用户主页只下载了二十条左右就停了
分页触发了风控限制。确认browser_fallback.enabled: true且headless: false,在弹出的浏览器窗口里手动完成验证码,不要过早关闭窗口;通过后翻页会继续。
Cookie 过期,下载全部失败怎么办
重新运行python -m tools.cookie_fetcher --config config.yml,再次登录后新 Cookie 会自动写回配置文件。定期用脚本刷新 Cookie,比手工粘贴 Cookie 字符串更省事。
想重新下载某个已下载的作品
最简单的做法是直接删除本地文件(目录名包含 aweme_id),主文件缺失时程序会重新下载。若想整批重存,把对应模式的increase设为false,它会在当前筛选范围内覆盖重下。
进度条刷屏,日志太吵
progress.quiet_logs: true是默认值,会在进度阶段抑制日志输出。需要定位失败原因时,加--show-warnings或-v参数临时打开警告/信息级日志即可。
原理速览
链路分发遵循"先判类型、再取 id"。解析器按主机名和路径判定链接类型,用正则提取关键 id,再由工厂按类型实例化对应的下载器——视频、合集、用户主页各自独立成类。合集下载按游标分页拉取作品列表(每页 20 条),合集目录名取自合集展示名,不同合集不会混入同一目录。
稳定性来自"限流 + 退避"。每个 API 请求先过限流器(默认 2 次/秒,另加 0~0.5 秒随机抖动,避免固定频率请求);失败的操作交给重试处理器,按 1s、2s、5s 间隔退避重试。下载动作统一走队列,按thread并发执行,单条失败不会阻塞整个队列。
去重与兜底是最后两道防线。SQLite 记录已下载作品的元数据,配合本地文件名扫描,在下载前判断是否跳过。若分页被风控限制(典型表现是每页只返回 20 条),工具会退回真实浏览器滚动加载页面,这一步需要人工过验证码,因此headless必须为false。
收尾
建议先用number限制条数跑一个单合集任务,确认 Cookie 有效、目录结构符合预期,再把数量放开为 0。 详细参数见 README.zh-CN.md,架构说明见 PROJECT_SUMMARY.md;交流群入口在 README 的"Community Group"一节。
【免费下载链接】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),仅供参考