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 记录并按 aweme_id 双重去重,配合默认 5 路并发,增量运行只捞新作品。
能力矩阵:批量下载、增量同步与风控兜底
- 无水印自动选档:对比多路视频源的 bit_rate 码率阶梯,
video_quality默认挑最高转码档,original可探测上传原片、失败自动回退。 - 并发加退避重试:默认 5 路并发(
thread: 5),失败按指数退避重试(retry_times: 3),rate_limit限制为 2 请求/秒,降低触发风控概率。 - 双重去重:SQLite 下载记录 + 本地文件名中的 aweme_id 双重比对,
increase增量模式只下载新作品,删库前请先想清楚。 - 浏览器兜底:API 翻页被风控截断时自动拉起 Playwright Chromium,保持
headless: false,手动过一遍验证码即可继续翻。 - 多形态产物:评论导出
*_comments.json、热搜榜与关键词搜索落盘 JSONL、直播录制存 FLV 并附房间元数据快照。
| 输入 / 触发 | 模式 | 本地产物 | 备注 |
|---|---|---|---|
/user/主页链接 | mode: post | mp4 + 封面/原声/data.json | 按number.post限量,0 不限 |
/collection/、收藏页 | mix/collect | 按作品分目录 | 受 2026 风控门禁影响 |
/music/原声链接 | music | mp3 | 缺失时回退该音乐下首条作品 |
live.douyin.com/{room_id} | 直播录制 | flv +*_room.json | 实验功能;HLS 仅存播放列表 |
--hot-board/--search | 数据采集 | search/*.jsonl | 先筛清单再决定下载哪批 |
同一套后端还打包了桌面客户端 Douzy(内测中),形态不同,按需选择:
| 形态 | 定位 | 入口 |
|---|---|---|
| CLI(本仓库) | 主页批量、直播录制、数据采集 | python run.py |
| 桌面版 Douzy | 单作品下载、可视化任务管理 | 项目 Releases 页获取 |
⚠️ 自 2026-08 起,抖音对单视频/图文、合集、音乐等接口加了ArgusSecurityPlugin风控门禁,非浏览器请求直接 403;CLI 侧目前仅主页作品可走 Playwright 兜底,且不保证成功。
五分钟上手:安装、扫码登录与首次运行
拉代码并安装依赖
Python 3.9+,Windows / macOS / Linux 均可。一条命令装完依赖和浏览器内核:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt playwright python -m playwright install chromium跑通标志:pip安装无报错、chromium 内核下载完成(输出中出现 "Executable downloaded")。
扫码获取 Cookie
💡 首次使用最容易卡住的一步:没有有效 Cookie 时,作品列表往往只翻 20 条就停。用自带脚本扫码,Cookie 会自动写回 config.yml:
cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml浏览器里登录抖音后回终端按 Enter。跑通标志:config.yml 的cookies段填入了真实值(msToken、ttwid、odin_tt 等),不再是 YOUR_XXX 占位符。
首次运行
把配置里的示例link换成目标博主主页(number.post先设小值试水),然后:
python run.py -c config.yml # 也可临时追加链接与并发,不动配置文件: python run.py -c config.yml -u "https://www.douyin.com/user/xxxx" -t 5 -p ./Downloaded跑通标志:终端出现 Rich 进度条,Downloaded/{作者}/{日期}_{标题}_{aweme_id}/下多出 mp4 文件。
场景拆解:主页增量同步与直播存档
整站主页搬进本地素材库(增量同步)
短视频创作者跟踪竞品更新,只想每月同步新作品、日期区间内可重复执行:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: [post] number: post: 50 # 0 表示不限数量 start_time: "2026-09-01" # 只抓区间内作品,含结束日当天 end_time: "2026-09-30" increase: post: true # 跳过已下载作品执行python run.py -c config.yml。文件按「作者/模式/日期_标题_aweme_id」三级归档,每个作品目录含 mp4、封面、原声与 data.json(点赞数、发布时间等)。需要强制重下时把increase.post设为false即可,无需清空数据库。
直播回放一键存档
课程运营要留存整场直播,把直播间链接写进link:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 0 # 0 = 录到主播下播 idle_timeout_seconds: 30执行同一条python run.py -c config.yml。已录字节保留为Downloaded/{作者}/live/下的 flv 文件,旁边附*_room.json元数据快照。注意:直播录制属实验功能,HLS 源只保存播放列表,需要时用 ffmpeg 二次合成。
评论数据与关键词采集
做舆情分析前先备原始料:config.yml 打开评论采集(comments.enabled: true、max_comments: 500),每个作品会在媒体文件旁生成*_comments.json;关键词命中的作品清单则先导出再挑:
python run.py --hot-board 30 python run.py --search "关键词" --search-max 100结果落盘为search/目录下的 JSONL,逐行 JSON 可直接用 pandas 读入分析。
参数调优与源码地图
先调并发与稳定性:
thread(默认 5)→ 同时下载任务数 → 家庭宽带 5~8 → 再高容易撞限流。retry_times(默认 3)→ 单任务重试次数 → 网络差调到 5 → 配合指数退避吸收瞬时抖动。rate_limit(默认 2)→ 每秒 API 请求上限 → 保持默认 → 这是不触发风控的关键阀门。video_quality(默认 highest)→ 码率档选择 → 存素材库用 original,省流量用 720p → original 每条作品多一次 10s 超时探测。browser_fallback.max_scrolls(默认 240 轮)→ 兜底浏览器翻页深度 → 深主页调到 400 → 配合headless: false方便手动过验证。
代码模块化程度高,改造入口明确:
- core/user_modes/:post / like / mix / music / collect 六种策略类,由 core/user_mode_registry.py 注册发现;新增内容类型加一个策略类并
register即可。 - auth/cookie_manager.py:封装 Cookie 生命周期;想接自己的登录态或过期提醒从这里入手。
- storage/database.py:SQLite 层,
dy_downloader.db里的 aweme 记录、下载历史、统计查询都在这里,二次开发报表直接查它。
要接前端或自动化流水线:python run.py --serve --serve-port 8000起 REST 服务(需 fastapi + uvicorn),POST/api/v1/download提交任务,GET/api/v1/jobs/{job_id}查状态,实现见 server/app.py。
故障诊断:只抓 20 条、403 与重复跳过
- 现象:主页作品只抓到 20 条就停 →原因:API 翻页被风控截断 →修复:确认
browser_fallback.enabled: true且headless: false,浏览器窗口弹出后手动完成验证再让它继续翻。 - 现象:列表抓空、全部作品下载失败 →原因:config.yml 里 Cookie 过期 →修复:重跑
python -m tools.cookie_fetcher --config config.yml扫码刷新。 - 现象:单个视频/图文、合集、音乐链接报 403
Blocked by ArgusSecurityPlugin→原因:2026-08 起接口加风控门禁,非浏览器请求被拒 →修复:CLI 无解,单个作品改用 Douzy 桌面版;主页作品走 post 模式加浏览器兜底。 - 现象:删了本地文件,下次运行仍跳过该作品 →原因:SQLite 双重去重记录还在 →修复:
sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"。 - 现象:问题定位不到 →原因:日志级别不够 →修复:
python run.py -c config.yml -v开详细日志。📌
收束
那批收藏的教程视频,不用再等它从时间线里消失后才想起来补:主页、直播、评论都会按「作者/模式/日期_标题」自动归档,点赞数、发布时间一并落进 JSON。
- 扫码跑通 cookie_fetcher
- 目标主页链接填进 config.yml
- 执行
python run.py -c config.yml
你的素材库,从下一条视频开始自动归档。
【免费下载链接】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),仅供参考