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
douyin-downloader 是一款面向实用场景的抖音无水印下载工具,支持单条链接抓取与用户主页批量下载,内置并发重试、SQLite 去重与浏览器兜底,适合需要批量归档抖音内容的创作者、研究者与开发者。
项目能力速览
| 功能 | 一句话说明 | 典型场景 |
|---|---|---|
| 单条内容下载 | 视频/图文/合集/音乐,短链自动解析 | 保存单条无水印作品 |
| 用户主页批量下载 | 按post/like/mix/music模式采集 | 备份创作者全部内容 |
| 直播录制 | 直播间链接直接录 FLV,下播保留已录数据 | 直播存档 |
| 评论与搜索采集 | 评论落 JSON,热搜/关键词导出 JSONL | 数据采集分析 |
| 去重与增量 | 数据库记录 + 本地文件双重校验 | 定时增量采集 |
| 浏览器兜底 | 翻页受限时拉起浏览器,人工过验证 | 风控场景 |
架构上,core/下的下载器工厂按 URL 类型分发到不同下载器,API 请求失败时由浏览器兜底接管翻页;storage/负责文件落盘与 SQLite 历史记录,模块间通过config/的配置加载器串联。
安装与首次运行
环境要求 Python 3.8+,macOS / Linux / Windows 均可。
① 克隆并安装依赖
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。
② 复制配置并获取 Cookie
cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml浏览器中登录抖音后回到终端按 Enter,Cookie 自动写入config.yml。
⚠️ Cookie 有时效,出现"登录态失效"类报错时重新运行上述 cookie_fetcher 命令即可更新。
③ 跑通第一条下载命令
python run.py -c config.yml -u "https://www.douyin.com/video/7604129988555574538" -p ./Downloaded成功后Downloaded/下出现按日期_标题_aweme_id命名的作品文件夹。
核心用法
单条链接下载命令
链接写入配置link数组,或用-u直接追加:
python run.py -c config.yml \ -u "https://www.douyin.com/video/7604129988555574538" \ -t 8 -p ./Downloaded关键参数:
-u, --url— 追加下载链接,可重复传入-c, --config— 指定配置文件,默认config.yml-p, --path— 指定下载目录-t, --thread— 指定并发数--search KEYWORD— 按关键词搜索并导出 JSONL
支持/video/、/note/(图文)、/collection/(合集)、/music/(原声)链接及v.douyin.com短链,视频源默认自动选无水印地址。
用户主页批量下载命令
在配置中指定主页链接与模式,number为每种模式的条数上限,0表示全量:
python run.py -c config.ymllink: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post number: post: 0多模式可同时开启(post/like/mix/music),跨模式按 aweme_id 去重。输出目录结构:
Downloaded/ ├── download_manifest.jsonl └── 作者名/ └── post/ └── 2024-02-07_标题_aweme_id/ ├── 视频.mp4 ├── 视频_cover.jpg ├── 视频_music.mp3 └── 视频_data.json封面、音乐、头像、JSON 由cover/music/avatar/json开关控制,默认仅保存视频本体。
直播录制配置
link指向直播间时进入录制模式,FLV 存于Downloaded/{作者}/live/,附*_room.json元数据快照;主播下播、网络空闲或 Ctrl+C 时已录数据保留:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 3600 # 0 = 录到主播下播 idle_timeout_seconds: 30清晰度按流列表自动挑选最高可用档:
- ORIGIN 原画(最高优先级)
- FULL_HD1 / FULL_HD 超清
- HD1 / HD 高清
- SD1 / SD2 / SD 标清
- LD 流畅
HLS 源仅保存 playlist,需 ffmpeg 后处理为可播放文件。
Douzy GUI 客户端
Douzy 是基于同一套后端的桌面客户端(内测中,安装文件见仓库 Releases 页面),为抖音、TikTok、YouTube 提供独立工作台,粘贴链接即可开始下载,无需记忆命令。
- 多链接队列,一键启动单条/主页/合集下载
- 同步关注、收藏夹、收藏合集与喜欢列表
- 任务中心查看任务状态、重试失败项、打开输出目录
- 本地作品档案,支持筛选与快速重新下载
配置体系
仓库内实际模板及配置相关源码:
| 文件 | 适用场景 | 与基础模板的关键差异 |
|---|---|---|
| config.example.yml | 唯一完整模板,复制到config.yml使用 | 覆盖全部选项:画质、浏览器兜底、评论、直播、通知 |
| config/default_config.py | 新配置的代码级默认值 | 字段缺失时自动补齐,含increase/author_dir等 |
| config/config_loader.py | 加载与合并逻辑 | 默认值与用户配置合并,支持 CLI 参数覆盖 |
最小可用配置(注释为关键字段说明):
link: - https://www.douyin.com/video/7604129988555574538 path: ./Downloaded/ mode: - post thread: 5 # 并发数 retry_times: 3 # 失败重试次数 database: true # SQLite 去重与历史并发与限速,控制下载吞吐:
thread: 8 rate_limit: 2 # 默认 2 请求/秒重试策略,失败按指数退避(1s、2s、5s)重试:
retry_times: 3 proxy: "" # 可选 HTTP/HTTPS 代理时间过滤,仅采集区间内发布的作品(格式YYYY-MM-DD):
start_time: "2024-01-01" end_time: "2024-12-31"其他常用字段:video_quality(original/highest/lowest或指定1440p等分辨率)、increase.*(增量下载开关)、comments.*(评论采集)、notifications.*(Bark/Telegram/Webhook 推送)、transcript.*(OpenAI 转写)。
实战工作流
备份自己账号的全部作品
目的:创作者定期备份自己的发布内容。将link指向自己的主页,配置mode: [post]、number.post: 0、increase.post: true,运行python run.py -c config.yml。已下载作品按磁盘主文件跳过,新作品自动增量补齐。
按时间范围采集指定账号内容
目的:研究者只关注某时间窗内的发布。在配置中同时设置start_time/end_time与目标主页链接,并配number.post限制条数。采集结束后download_manifest.jsonl与*_data.json可直接作为分析数据源。
定时自动化采集
Linux / macOS 用 crontab 每天凌晨执行增量任务:
0 2 * * * cd /path/to/douyin-downloader && python run.py -c config.yml >> download.log 2>&1Windows 用任务计划程序:① 新建daily_download.bat,内容为cd /d C:\path\to\douyin-downloader && python run.py -c config.yml;② 在任务计划程序中创建每日触发任务,指向该 bat 文件。注意 Cookie 会过期,定时任务失败时先更新 Cookie。
元数据与二次利用
每个作品的元数据文件
启用json: true后,每个作品目录内生成*_data.json(原始 API 响应摘录,关键字段如下),下载根目录另有download_manifest.jsonl逐条记录:
{ "aweme_id": "7604129988555574538", "desc": "视频标题/描述", "create_time": 1704067200, "author": { "nickname": "创作者名称" }, "statistics": { "digg_count": 12345, "comment_count": 678 }, "video": { "duration": 60 } }常见二次利用方式
- 批量转写:开启
transcript.enabled: true,视频下载后自动生成*.transcript.txt/json,用于听力材料或内容检索 - 入库做趋势分析:
dy_downloader.db的aweme表记录下载历史,配合*_data.json的互动字段可统计发布频率、热度分布 - 按互动数据筛选:解析 JSON 中的
statistics,按点赞/评论量阈值筛出优质样本
故障排查
症状:报错"登录态失效,需要重新登录"或批量请求 401/403。解决:重新运行
python -m tools.cookie_fetcher --config config.yml,登录后按 Enter 更新 Cookie。症状:每个用户只拿到约 20 条作品。解决:这是翻页风控限制,确认
browser_fallback.enabled: true且headless: false,在弹出的浏览器窗口手动完成验证后再继续。症状:下载速度慢或频繁超时。解决:调整
thread(默认 5)与rate_limit,网络不稳时在配置中设置proxy;调试期可用-v查看完整日志。症状:希望强制重下某条已下载作品。解决:跳过判定是"数据库记录 + 本地文件"双重校验,需同时删除本地目录与数据库记录:
rm -rf Downloaded/作者名/post/*_<aweme_id>/ sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"工具只处理当前 Cookie 可见的公开内容,不会突破平台权限获取私密或他人账号数据;平台接口变更导致功能失效属于正常技术风险。
项目结构与使用边界
核心目录职责:
- run.py + cli/ — 命令行入口、参数解析与主流程
- core/ — API 客户端、下载器工厂及视频/主页/直播/音乐下载器
- auth/ + tools/cookie_fetcher.py — Cookie 管理与自动抓取
- config/ + storage/ — 配置加载合并、文件落盘与 SQLite 历史
桌面端 Douzy 已覆盖 TikTok 与 YouTube 工作台,后续方向以多平台支持与转写等智能处理能力扩展为主。
使用边界:本项目仅用于技术研究、学习与个人数据管理;不用于侵犯他人隐私或版权,不用于商业用途;遵守抖音平台使用条款,用户对使用行为自行承担法律责任。
遇到 bug 或接口失效,直接向仓库提 Issue;有意改进的,可提交 PR 参与 tests/ 覆盖下的开发。
【免费下载链接】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),仅供参考