抖音批量下载工具完整教程:用 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
给一位博主做全套内容备份,我过去的时间账本是这样的:真正花在"下载"这两个字上的时间只占不到三成,其余七成被拆成四件琐事——逐条找无水印源、手动改名防止覆盖、反复排查重复文件、再把散落的 mp4 归进正确的文件夹。而 douyin-downloader 这个抖音批量下载工具做的事情,恰恰是把这七成的"隐形劳动"全部吃掉:去水印、智能命名、双重去重、自动归类,你只负责粘贴链接。这篇文章不按功能清单念菜单,而是沿着"它到底能产出什么→怎么最快跑通→批量下载的坎在哪→如何让它反复可用"这条真实使用路径来讲,全程命令都可直接复制。
下载一个作品,麻烦从来不在"下载"本身
先算一笔容易被忽略的账。一个 3 分钟的抖音视频,点开、等到缓冲、右键另存,顺利的话 30 秒搞定,但那是带水印的版本。要拿到无水印源,通常的做法是复制链接丢给各种网页解析站,结果不是弹广告就是限次数。更糟的是当你面对的不是一条视频,而是一个博主主页的 200 条作品时:
- 手动逐个复制链接,一个主页翻 20 页,光复制就花掉半小时;
- 下载下来的文件名千奇百怪(一串无意义数字),不重命名根本无法检索;
- 同一作品今天在 post 里,明天在 like 里,重复下载浑然不觉;
- 网络一断,已下载的部分全废,得从头再来。
douyin-downloader 把上面四件事全部做进了程序里,而这篇文章的剩余部分,就是带你把它跑起来,并看懂它替你做掉了哪些脏活。
先看"完成态":一次批量下载最终会得到什么
与其急着跑命令,不如先建立对"结果"的预期。一次批量下载结束之后,你的下载目录大致长这样:
Downloaded/ ├── download_manifest.jsonl # 全量下载清单,每行一条 JSON └── 作者昵称/ └── post/ └── 2024-02-07_作品标题_aweme_id/ ├── 2024-02-07_作品标题_aweme_id.mp4 # 无水印视频 ├── 2024-02-07_作品标题_aweme_id_cover.jpg # 封面 ├── 2024-02-07_作品标题_aweme_id_music.mp3 # 原声 ├── 2024-02-07_作品标题_aweme_id_avatar.jpg # 作者头像 └── 2024-02-07_作品标题_aweme_id_data.json # 完整元数据每个作品独占一个以"日期_标题_ID"命名的文件夹,日期取自作品的发布时间而非下载时间,这对后续按时间线整理素材极其关键。除了这些可见文件,目录根部还会生成一份download_manifest.jsonl清单,记录每个作品的发布日期、作者、描述、标签、落盘路径——相当于给整批下载开了张"快递底单",日后回溯某一帧素材来自哪条作品,一条命令就能查。
与此同时,如果你开启了database: true(默认开启),程序还会在本地维护一个 SQLite 数据库(默认dy_downloader.db)。桌面版客户端把它做成了可视化的"作品档案"面板:
这就是我推荐你先看结果再看过程的原因:下载工具的真正价值不是"把视频存到硬盘",而是存完之后你能快速找到、筛选、复用。download_manifest.jsonl和 SQLite 档案,才是这个工具区别于"网页解析站"的护城河。
最短路径:让第一个无水印视频在十分钟内落地
现在动手。项目要求 Python 3.8+,macOS / Linux / Windows 均可。打开终端:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader/douyin-downloader pip install -r requirements.txt网络受限时可以换用国内镜像源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple紧接着需要配置 Cookie,这是整个过程中唯一"绕不开"的环节——抖音的内容接口要求登录态。好在项目提供了自动获取脚本,它会打开浏览器引导你登录,登录完成后回终端按回车,Cookie 自动写回配置:
python -m tools.cookie_fetcher --config config.yml提示:如果你后续要用浏览器兜底或自动取 Cookie,还需要装 Playwright:
pip install playwright && python -m playwright install chromium。
配置写好后,复制一份示例配置作为起点:
cp config.example.yml my_config.ymlmy_config.yml里填上你想下载的内容,先跑通最小配置:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx # 替换为目标用户主页 path: ./Downloaded/ mode: - post # 下载发布作品 number: post: 50 # 最多下 50 条,0 表示全量 thread: 5 # 并发数 retry_times: 3 database: true database_path: dy_downloader.db启动下载:
python run.py -c my_config.yml主界面(以及命令行模式)的流程完全一致:粘贴链接 → 检测链接类型 → 创建对应下载器 → 拉取并下载。命令行的实时输出长这样,每一条作品的抓取、落盘、跳过都一目了然:
如果你只想下一个单条链接,甚至不用改配置,直接追加命令行参数即可:
python run.py -c my_config.yml \ -u "https://www.douyin.com/video/7604129988555574538" \ -t 8 \ -p ./Downloaded从 clone 到第一个视频落地,通常就在十分钟以内。需要后台常驻的人可以直接用项目提供的 Dockerfile 部署,一条docker build加一条docker run挂载配置与下载目录即可。
批量下载的隐形门槛:翻页风控与双层兜底策略
跑通单条之后,很多人会立刻撞上一堵墙:一个博主主页明明有几百条作品,工具却只抓到 20 条。这不是 bug,是抖音的翻页风控——服务端会对短时间内的高频分页请求触发验证。怎么破?douyin-downloader 的答案是"双层策略",这也是它最值得理解的部分。
第一层是 API 直连:优先调用官方接口拉取作品列表,速度快、延迟低。这一层配了三个"软约束"来降低触发风控的概率——默认每秒钟最多 2 个请求(rate_limit),失败后按 1 秒、2 秒、5 秒的指数退避重试(retry_times),并且每次下载后都会用 Content-Length 校验文件完整性,不完整的文件会被自动清理并重新下载。
第二层是浏览器兜底:当 API 翻页被风控卡住时,程序会自动拉起一个真实浏览器,像真人一样滚动页面采集作品 ID,再回头补全每一条的详情。你可以把它理解成"人工过安检"——浏览器窗口弹出后,手动完成一次验证码,剩下的翻页就交给它了:
browser_fallback: enabled: true headless: false # 必须为 false,人工验证需要可见窗口 max_scrolls: 240 idle_rounds: 8 wait_timeout_seconds: 600需要说明的是,浏览器兜底目前对post(发布作品)模式做了完整验证;like、mix、music三种模式仍主要依赖 API 正常分页。所以如果你批量下载某位博主的全部作品卡在 20 条,优先确认:browser_fallback.enabled是否为true、headless是否为false、验证弹窗出来后有没有在超时前完成操作。
把单次下载升级成可反复运行的素材流水线
一次性批量下载只是入门,真正让这个工具值回票价的是"可以反复跑"。创作者需要的是每周自动更新素材库,而不是每次手动全量重下。这就轮到几个关键机制上场了。
增量下载:只下新的
开启增量后,程序会拿数据库里的历史记录跟当前作品列表做差集,只下载新增部分:
increase: post: true # 只下载新发布作品 like: true # 只下载新喜欢作品 mix: true # 只下载新合集内容 music: true # 只下载新音乐注意增量模式依赖数据库记录,所以database: true必须开着。
双重去重:数据库 + 本地文件
这个工具的去重不是单靠一张表,而是"数据库记录 + 本地文件扫描"双保险——即使你删了数据库重建,程序扫描本地文件名中的aweme_id也能识别出已下载内容并跳过。反过来,如果你只想重新下载某个作品,需要同时清掉对应文件和数据库记录:
# 以单个作品为例(文件名中含 aweme_id) rm -rf Downloaded/作者名/post/*_<aweme_id>/ sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"只删文件不删数据库,下次会重新下载;只删数据库不删文件,会被本地文件挡回来。这个机制想清楚了,重下、补下、整库重来都不会出错。
命名模板:让文件名替你说话
默认的{date}_{title}_{id}已经够用,但项目留了完整的模板变量:{id} {title} {author} {author_id} {date} {year} {month} {day} {time} {timestamp} {type} {mode},要求模板里必须包含{id}防止重名覆盖。作者目录层也有三种策略可选——昵称(直观但重名会合并)、sec_uid(稳定唯一但不直观)、昵称_uid(直观且唯一,重度用户首选):
filename_template: "{date}_{title}_{id}" folder_template: "{date}_{title}_{id}" author_dir: "nickname_uid" # 切换只影响后续下载,不迁移已有目录跑完后通知你
批量任务经常挂在后台,下完了人不在。可以配置 Bark、Telegram 或 Webhook 推送,任务结束自动发一条结果摘要(成功/失败/跳过计数),单个推送失败也不会阻塞主流程:
notifications: enabled: true on_success: true on_failure: true providers: - type: bark url: https://api.day.app/YOUR_DEVICE_KEY这三件套配齐后,配合系统定时任务,就是一条全自动素材流水线:
# 每天凌晨 3 点增量更新一次素材库 0 3 * * * cd /path/to/douyin-downloader && python run.py -c daily_config.yml >> download.log 2>&1下载之外:它还是一台内容采集器
最后这部分,是把这个工具从"下载器"推向"数据采集器"的增量功能。如果你的需求不止于存视频,以下任意一个都可能正中要害。
评论采集。研究类场景常需要连评论一起抓,开启后每个作品旁会额外生成*_comments.json,支持二级回复和数量上限:
comments: enabled: true include_replies: false # 开启会多拉每条评论的二级回复 max_comments: 500 # 0 = 不限 page_size: 20热搜与搜索导出。想盯热点,或按关键词批量摸底,两条命令即可把结果导出为 JSONL(每行一条 JSON,方便后续用 pandas 或 Excel 处理):
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.jsonlREST API 服务模式。想把下载能力接进自己的系统(比如定时任务框架、内部运营后台),可以把它跑成一个服务:
pip install fastapi uvicorn python run.py --serve --serve-port 8000| 方法 | 路径 | 用途 |
|---|---|---|
| POST | /api/v1/download | 提交{"url": "..."},返回{job_id, status} |
| GET | /api/v1/jobs/{job_id} | 查询单个任务状态与计数 |
| GET | /api/v1/jobs | 列出最近任务(自动按 TTL + 容量剪裁) |
| GET | /api/v1/health | 健康探针 |
直播录制与视频转写。直播链接(live.douyin.com/{room_id})支持录制成 FLV/HLS,主播下播、网络空闲或 Ctrl+C 中断时已录字节都会保留;转写功能则调用 OpenAI Transcriptions API,把下载的视频自动转成*.transcript.txt/*.transcript.json,适合给口播类内容做索引。而所有已下载的作品,都能在桌面版的"作品档案"里按作者、标题关键词、类型、发布时间交叉筛选:
下一步:复制第一条命令
回头看文章开头那笔账:手动处理 200 条作品需要小半天,而工具把"抓取、去水印、改名、去重、归类、建档"一次性做完,你实际参与的只是贴链接和(偶尔)过一次验证码。剩下的时间,省下来去打磨内容本身。
想真正上手,就从这一条开始:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader/douyin-downloader pip install -r requirements.txt最后照例提醒一句:这个工具适用于个人学习、内容研究、素材备份等合法用途,请尊重原创作者的劳动成果,遵守平台规则与相关法规,不要将下载内容用于商业侵权。技术提升效率,边界在于使用者自己。 🚀
【免费下载链接】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),仅供参考