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 这套抖音去水印批量下载工具在自己电脑上跑起来:一条链接试水,一个主页链接整页搬运,作品、图集、合集、音乐原声都能无水印落盘,重复下载会自动跳过。
先说结果:一次主页批量下载长什么样
先看成果。下面这张图是任务跑完后的记录面板:一个主页任务 24 件作品全部完成,一个合集任务 18 件完成,还有一条失败记录——两个作品已不可用,工具把失败原因也如实标了出来。谁成了、谁挂了、耗时多久,扫一眼就有数。
这就是后面所有操作要达到的效果:你只管贴链接,剩下的选源、去水印、命名、归档、去重,它自己完成。
它是什么:一句话定位
douyin-downloader 是一个 Python 写的命令行工具,专门解决"想整页存下某个抖音账号的作品,却只能一条一条手动保存"的问题。适合做素材收集、竞品分析、个人备份的人;前提是你看得懂终端命令,不需要读源码。
它的边界也很明确:以接口抓取为主、浏览器兜底为辅;直播录制是实验性功能;收藏夹类模式只认你 Cookie 对应的那个登录账号。另外项目里还套了一个桌面 GUI 版 Douzy(闭测中),和 CLI 共用同一套后端——贴链接、看任务、管档案,它把命令行那套流程做成了界面:
能力全景:一张表看清它能接什么活
| 你手上的链接 / 需求 | 工具怎么接 | 备注 |
|---|---|---|
单个视频www.douyin.com/video/... | 直接下载,默认挑无水印源 | 最常用 |
图文作品/note/或/gallery/ | 整组图片下载 | 图文按图集处理 |
合集/collection/、/mix/ | 按合集批量下载 | |
音乐/music/ | 优先直取音频,取不到就下第一关联视频 | |
分享短链v.douyin.com/... | 自动还原成真实地址再下 | 手机上复制的短链可直接用 |
作者主页/user/... | 按 mode 抓post/like/mix/music | 批量核心能力 |
| 自己的收藏夹 | collect/collectmix模式 | 需登录 Cookie,且只能单独用 |
直播间live.douyin.com/... | 自动录制,下播保留已录部分 | 实验性 |
| 评论、热搜榜、关键词搜索 | 输出 JSON / JSONL 文件 | 做文本分析用 |
下载时还顺手带一份元数据,可选封面、音乐、头像、JSON 文件,按"作者 / 模式 / 日期_标题_ID"自动分层归档,进度条、失败重试、断点保留都有。
环境准备:三条命令装好
要求不高: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"(强烈建议装,后面会用到),再补一个浏览器内核:
pip install playwright python -m playwright install chromium怎么算装好了?跑python run.py --version,能正常打印版本号就说明环境没问题。
Cookie 配置:最常见的失败原因就是它过期了
先说结论:后面 80% 的"突然下不动了",都是 Cookie 过期,重跑一次自动获取就能解决,先记住这个。
为什么需要 Cookie?抖音网页要识别"你是谁"才肯把数据给你,这串身份凭证就存在浏览器的 Cookie 里。工具给你两条路:
自动获取(推荐)。终端里跑:
python -m tools.cookie_fetcher --config config.yml它会弹出一个浏览器窗口,你正常扫码登录抖音,回到终端按回车,Cookie 就被写进 config.yml 了。底层逻辑可以看 tools/cookie_fetcher.py。
手动粘贴。自动方式不顺手时,登录抖音网页版,打开浏览器开发者工具,把 Cookie 整段复制,填进配置文件的cookies字段。
提醒:collect/collectmix这种"抓自己收藏夹"的模式必须走登录 Cookie;抓公开视频和主页作品时,Cookie 主要是降低被限流的概率。
主流程走通:从一条链接,到搬空一个主页
这一节只有一条主线:改配置文件 → 运行 → 看结果。先拿单条试水,跑通之后把链接换成主页,其余命令完全不变。
第 1 步:复制示例配置。
cp config.example.yml config.ymlconfig.example.yml 里每个字段都有中文注释,照着改即可。
第 2 步:单条视频试跑。打开 config.yml,把最顶上的link换成任意一个视频链接,其他保持默认:
link: - https://www.douyin.com/video/7604129988555574538 path: ./Downloaded/运行:
python run.py -c config.yml你会看到初始化、解析链接、下载几段进度条走完,最后输出一张统计:成功几条、耗时多久、存在哪。文件落在Downloaded/作者名/post/日期_标题_ID/里,视频本体之外,按你的开关还会存封面、音乐、JSON 元数据。
懒人也可以不动配置文件,直接用命令行参数临时指定:
python run.py -c config.yml -u "https://www.douyin.com/video/7604129988555574538" -t 8 -p ./Downloaded-u追加链接、-t并发数、-p保存目录。
第 3 步:同一条命令,换链接就是批量。单条跑通后,把link换成作者主页地址,加上mode和number:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - post # 作者发布的全部作品 number: post: 0 # 0 = 全量;写 50 就只下前 50 条再跑一次python run.py -c config.yml,这个主页的作品就开始整页往本地搬。mode可以同时写post/like/mix/music几行,一次抓取把多类内容都带回来,同一个作品跨模式也不会重复下载。桌面版把同样的"主页作品列表 + 直接下载"做成了可视界面,CLI 用户不需要它,但能帮你理解批量任务长什么样:
第 4 步:验收归档结构。打开Downloaded/目录,默认长这样:
Downloaded/ └── 作者名/ └── post/ └── 2024-02-07_视频标题_视频ID/ ├── 视频.mp4 └── (可选)封面 / 音乐 / JSON按作者、模式、日期标题分层,之后找素材不用翻文件属性。
进阶场景:四种直接能用的玩法
直播录制场景。遇到不想错过的直播场次,把直播间链接填进link,配好时长上限:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 3600 # 0 = 一直录到主播下播 idle_timeout_seconds: 30 # 流空闲多久判定结束主播下播、网络断了甚至你手动 Ctrl+C,已经录到的部分都会保留成正式 FLV 文件,不会白录。注意这是实验性功能,HLS 源目前只存播放列表,需要可播文件要自己过一遍 ffmpeg。
热搜榜与关键词搜索场景。做选题调研时,两条命令把数据落成 JSONL,省掉手工翻页:
python run.py --hot-board 20 -p ./Downloaded python run.py --search "猫咪" --search-max 100 -p ./Downloaded收藏夹场景。想把自己账号收藏的视频整批存下来:
link: - https://www.douyin.com/user/self?showTab=favorite_collection mode: - collect # 收藏夹里的视频;collectmix 是收藏夹里的合集 number: collect: 0注意collect/collectmix必须单独使用,不能和post等模式混写,且只认你 Cookie 对应的账号。桌面版对应的"我的收藏与合集"界面长这样:
评论采集场景。做用户研究时,给每个作品附带一份评论 JSON,方便后续做文本分析:
comments: enabled: true include_replies: false # true 会连二级回复一起抓,请求量更大 max_comments: 500 # 0 = 不限产物是媒体文件旁边的*_comments.json。
另外提一句时间过滤:start_time/end_time(格式YYYY-MM-DD)可以只抓某个时间段内的作品,适合"只要今年发的"这类需求。
调优参数:为什么长期用要这么调
用一周之后,真正影响体验的就是这几个字段。
thread(并发数,默认 5)。它决定同时下载几个任务。为什么建议家用网络别往上调:并发一高,请求密集,平台侧限流的概率就变大,反而越调越慢。5 左右是速度和稳定之间的平衡点,发现失败变多就往下减。
number.post等分模式数量(0 = 不限)。为什么建议先写个小数字:第一次抓一个几百条的大号之前,先post: 10跑一遍,确认 Cookie 有效、归档正常,再改成 0 全量。翻车成本从"下几百条"降为"下十条"。
increase.post等增量开关(默认 true)。判定标准是"磁盘上主媒体文件已存在就跳过",而不是数据库。为什么重要:它让你可以每周跑一遍同一个主页配置,只补"新发的"内容,做定期同步。反过来,把某模式设为 false 表示强制重下并覆盖,配合start_time能只重刷某个时间段。
video_quality(默认 highest)。抖音每条视频返回多档码率。highest只在转码档里挑最高档,不额外请求;original会多花一次探测请求去找上传原片——原片可能比最高转码档大好几倍,适合要精剪的场景;纯归档选默认即可,省时省流量。
browser_fallback.headless: false(务必保持)。正常翻页走接口,一旦触发风控,工具会自动切浏览器模式继续抓。为什么不能改成无头模式:翻页受限后往往要弹验证码,只有有界面的窗口才能人工处理,无头模式下这一步会卡死。
问题速查:高频坑先备好答案
Q:主页抓取只拿到 20 条左右就停了?典型的分页风控。确认browser_fallback.enabled: true且headless: false,然后在弹出的浏览器窗口里手动完成验证,别急着关。这是最常见的"抓不全"原因。
Q:某天突然大面积报错?第一反应:Cookie 过期了,重跑python -m tools.cookie_fetcher --config config.yml。第二反应:那条内容本身被删除或设了私密——这类谁都下不了,跳过即可。
Q:某个视频想重新下载?它是"数据库记录 + 本地文件"双重校验去重的,两边都得动:删掉本地对应目录,再用 sqlite3 打开dy_downloader.db,从aweme表里按aweme_id删掉那条记录,下次运行就会重新抓。只删数据库留文件不会触发重下;只删文件留数据库反而会触发重下。
Q:下载慢?大概率是并发开太高被限流了,把thread调低试试;再检查网络本身;有条件就配上proxy字段。
Q:进度输出太吵?配置里progress.quiet_logs: true(默认)会压掉进度阶段的日志;调试时临时加--show-warnings或-v看完整日志。
落地路径:今天就能做完的四件事
- 把环境跑通:clone 仓库、装依赖,
python run.py --version能打印版本号即过关。 - 把凭证配上:跑一次
python -m tools.cookie_fetcher --config config.yml,扫码、回车,配置文件里出现 Cookie 即成功。 - 用单条视频试水:
cp config.example.yml config.yml,link换成一个视频 URL,python run.py -c config.yml,等统计面板出结果。 - 升格到批量:同一个配置文件里把
link换成关注的主页、mode: post、number.post: 0,再跑一次——你的第一个整页素材库就有了。
写在最后
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),仅供参考