从入门到精通的三重境界:用 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 去重与浏览器兜底能力。无论你是第一次接触下载工具的普通用户,还是需要稳定素材管道的内容团队,这篇指南都会带你从零开始,一步步把"下载抖音视频"这件事从手动苦力变成自动流水线。
写这篇文章之前,我先替你想清楚了一个问题:网上讲抖音下载的教程不少,但大多数要么只教单个视频,要么让新手对着几十个参数一头雾水。所以我干脆把使用路径拆成了三个递进的境界——先跑通、再批量、后自动化。你可以像打游戏闯关一样,逐个境界吃透。
第一重境界:三分钟部署,跑通你的第一次下载
这一重境界的目标只有一个:把第一个视频干净利落地存到本地。全程不需要理解任何底层机制,照着做就行。
第一步:克隆项目并安装依赖
在终端里执行下面的命令,先把工具拿到手:
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为什么建议装 playwright?因为抖音对批量翻页有风控,接口偶尔会"罢工",这时工具会自动降级到浏览器模拟模式,让你手动过一遍验证码就能继续。装了它,等于给下载上了一道保险。
第二步:用一条命令拿到"入场券"——Cookie
抖音的部分接口需要登录态,而 Cookie 就是你的通行证。手动从浏览器里抠 Cookie 又麻烦又容易过期,好在工具自带自动获取脚本:
python -m tools.cookie_fetcher --config config.yml运行后浏览器会弹出抖音登录页,登录成功后回到终端按一下回车,Cookie 就自动写进配置文件了。以后失效了,重复这一条命令即可。
第三步:写一份"最简配置"
先复制示例配置,再把它改到最精简:
cp config.example.yml config.ymllink: - https://www.douyin.com/video/7604129988555574538 # 想下载的视频链接 path: ./Downloaded/ # 保存目录 thread: 5 # 并发下载数,5 是稳妥的默认值 database: true # 开启 SQLite 去重与下载历史你没看错,这就是全部。一个链接、一个目录、两个参数,其余全部走默认值。
第四步:运行,然后看着进度条跳起来
python run.py -c config.yml终端会实时显示每个任务的下载进度、当前文件和重试状态。下载完成后,你以为只拿到一个视频?其实工具默认会保存"完整一套"数字资产:
- 🎬 无水印视频(自动从多个源里挑最高码率的那个)
- 🖼️ 封面图
- 🎵 原声音乐
- 👤 作者头像
- 📄 JSON 格式的完整元数据(标题、时间、点赞、评论数等)
- 📝 可选:评论数据、AI 转写字幕
看这张图,下载完成的每个作品都按"日期_标题_ID"独立成目录,文件齐全、命名清晰,想找哪条一眼就能定位。
第二重境界:批量制霸,把整个博主主页搬回家
单个视频会下了,接下来解锁真正的核心能力——批量下载。
一个链接,四种模式,各取所需
只要把链接换成博主主页地址,再声明想下载哪些内容,剩下的交给工具:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx # 博主主页链接 mode: - post # 博主发布的所有作品 - like # 博主点赞过的作品 - mix # 博主创建的所有合集 - music # 博主用过的原声音乐 number: post: 100 # 只取最新 100 条,填 0 表示全量 like: 50 mix: 0 music: 0四种模式可以自由组合、一次跑完,而且跨模式自动去重——同一个作品 ID 无论从哪个模式遇到,都只下载一次,绝不浪费流量和磁盘。
手动 vs 工具,差距用一张表说清楚
为了让你对"批量"的分量有体感,我算了一笔账:假设你要收集某博主 100 条作品。
| 对比维度 | 手动逐条保存 | douyin-downloader |
|---|---|---|
| 耗时 | 6 小时以上(复制、等待、保存) | 约 15 分钟(并发下载) |
| 画质 | 在线解析工具压缩明显,画质损失大 | 自动挑选无水印最高码率源 |
| 文件命名 | 随机乱码、日期错乱、无法检索 | 日期_标题_ID 模板化 |
| 重复下载 | 常见,白白浪费时间和磁盘 | SQLite + 文件系统双重去重 |
| 元数据 | 全部丢失 | 封面/音乐/头像/JSON 全保留 |
工具会把 274 个作品按你的配置并发拉取,进度、统计、路径一目了然。人只需要盯着终端喝茶。
下载完不乱成一锅粥:自定义命名与目录
批量下载最大的隐患是"下完找不到"。工具支持完全自定义的文件命名和目录组织:
# 文件命名模板,可用变量:{date} {title} {id} {author} {like_count} ... filename_template: "{date}_{title}_{id}" # 作者目录层命名方式 # nickname - 仅昵称(直观,重名会合并) # sec_uid - 仅 ID(稳定唯一,不直观) # nickname_uid - 昵称_ID(直观又唯一,重度用户推荐) author_dir: "nickname_uid" # 每个作品单独建子目录 folderstyle: true桌面版的设置界面里,这些模板都可以直接点选配置,不用记命令。
三道保险,杜绝重复下载
重复下载是这个领域最恼人的问题,工具用三层机制解决:
- SQLite 数据库记录:每个作品 ID 都有下载历史,命中即跳过(相关逻辑在
douyin-downloader/storage/database.py) - 本地文件名扫描:就算数据库被清了,也会扫描文件名里的 ID 二次去重
- 完整性校验:下载后比对 Content-Length,文件不完整会自动清理并重试
三层叠加,你在重跑同一个任务时会看到大量"已存在,跳过",而不是浪费带宽再下一遍。
第三重境界:从下载工具升级为内容自动化流水线
会批量下载只是"会开手动挡",这一境界教你把它变成自动驾驶。
增量下载:只追新,不重来
博主每天都在更新,你不想每次都全量重下。开启增量模式,工具只下载上次之后的新作品:
increase: post: true # 只下新增作品 database: true # 增量依赖数据库记录配合同样的increase.like / mix / music,追更某个博主变成一条命令的事。
定时任务 + 完成通知:人下班,机器上班
把增量下载挂进系统的定时任务,每天凌晨自动跑:
# Linux / macOS crontab:每天凌晨 2 点自动增量下载 0 2 * * * cd /path/to/douyin-downloader && python run.py -c config.yml >> download.log 2>&1再配合完成通知,下完第一时间推到你手机上:
notifications: enabled: true on_success: true on_failure: true providers: - type: bark # iOS 推送 url: https://api.day.app/YOUR_DEVICE_KEY sound: bell - type: webhook # 企业微信/飞书/钉钉机器人同样可用 url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx早上醒来,手机收到推送,素材已经整齐躺好在磁盘里——这就是"人下班,机器上班"。
REST API:把下载能力嵌进你自己的系统
如果你是开发者,想把这个下载能力集成到自己的脚本或系统里,一行命令就能启动服务:
pip install fastapi uvicorn python run.py --serve --serve-port 8000然后通过 HTTP 提交下载任务:
POST /api/v1/download 提交 {"url": "..."},返回 job_id GET /api/v1/jobs/{id} 查询任务状态与计数 GET /api/v1/health 健康探针任务中心会把每个 job 的解析、排队、下载状态实时呈现,适合需要可视化跟踪的团队场景。
全家桶能力:评论、转写、热搜、直播
这一境界的终点,是让一个工具覆盖你大多数内容需求:
采集作品评论(舆情分析、素材调研):
comments: enabled: true include_replies: false # 设为 true 会多拉二级回复 max_comments: 500 # 0 表示不限AI 视频转写(自动生成文字稿):
transcript: enabled: true model: gpt-4o-mini-transcribe response_formats: ["txt", "json"] api_key_env: OPENAI_API_KEY # 推荐用环境变量传密钥热搜榜快照与关键词搜索(选题灵感、竞品监控):
python run.py --hot-board 30 -p ./Downloaded # 导出热搜榜 JSONL python run.py --search "猫咪" --search-max 100 -p ./Downloaded # 关键词搜索直播实时录制(重要直播留存):
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 3600 # 最大录制 1 小时,0 表示录到主播下播 idle_timeout_seconds: 30主播下播或意外中断时,已录制的数据也会被完整保留,不会白等一场。
绕开这四个坑,少走一半弯路
再顺的工具也有"地雷",我把新手最容易踩的四个坑提前帮你排掉。
坑一:只能抓到 20 条作品怎么办?
这是翻页风控的典型表现,不是工具坏了。确认配置里:
browser_fallback: enabled: true # 开启浏览器兜底 headless: false # 非无头模式当浏览器窗口弹出时,手动完成验证,不要立刻关掉窗口,等它继续自动翻页。这一条能救回绝大多数"卡在 20 条"的场景。
坑二:Cookie 突然失效?
Cookie 有生命周期,失效了重新拉一次即可:
python -m tools.cookie_fetcher --config config.yml坑三:想重新下载某个作品,却被"跳过"?
去重机制会拦截已下载内容,想强制重下,需要同时清掉文件和数据库记录:
# 删除对应本地目录(文件名含 aweme_id) rm -rf Downloaded/作者名/post/*_<aweme_id>/ # 删除数据库记录 sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"记住一个原则:只删文件不删库会触发重下,只删库不删文件会继续跳过。
坑四:个别视频一直失败?
常见原因是视频被删除、设为私密,或网络波动。工具的策略是自动跳过失败项、继续处理后续任务,不会因为一条失败就整体卡死。排查时加上日志参数定位:
python run.py -c config.yml -v # 显示 info 级日志另外,遇到 IP 被限速时可以配置代理:
proxy: "http://127.0.0.1:7890"结语:工具是杠杆,会用才是关键
从"手动逐条保存"到"一条命令批量打包",再到"定时增量 + API 集成"的自动化流水线,douyin-downloader 真正改变的,是你在内容获取这件事上的时间杠杆。
如果你更习惯图形界面,基于同一套后端打造的桌面客户端也已经可以下载体验——粘贴链接即刻开始,关注列表自动同步,任务与作品档案可视化,和命令行版共用同一套下载引擎。
最后给你三条行动建议:
- 今天就跑通第一境界:克隆、装依赖、下第一个视频,全程不到十分钟
- 本周解锁第二境界:把常看的博主主页接进来,开启增量,建立你的素材库
- 按需进入第三境界:有定时需求就挂 crontab,有集成需求就开 REST API
技术的边界在于使用者的想象力,而这款工具的边界,只在于你愿不愿意把重复劳动交给它。去试试吧,从第一个命令开始。
【免费下载链接】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),仅供参考