抖音批量下载实战:douyin-downloader 的四场景用法与素材库搭建
抖音批量下载实战: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 十五分钟拿下了全部无水印原片。douyin-downloader 是一个抖音批量下载工具,支持视频、图集、合集、音乐原声的批量下载,还覆盖作者主页整页抓取、直播录制与评论采集,全程带进度显示、自动重试与 SQLite 去重。
一个周五下午的真实场景
阿杰的烦恼不是个例。做内容的人大概率都经历过这样几件事:想存某位博主的合集,翻一页存一条,存到一半忘了存到哪;下载回来的视频带着平台水印,剪辑前还得找人去水印;几十个文件命名混乱,混进素材库后根本找不到对应的是哪一条。
douyin-downloader 的出发点是"把下载这件事一次做完整"。它对每个作品默认抓齐一套素材:无水印视频、最高码率源、封面图、背景音乐、作者头像,以及一份完整的 JSON 元数据(标题、发布时间、点赞评论数、视频分辨率、音乐信息都在里面)。你拿到的不是孤零零一个 mp4,而是一份可以长期归档的资料。
它和那些"单视频下载器"差在哪里
网上单视频下载器很多,但批量场景下它们通常撑不住。douyin-downloader 的做法是靠几个关键设计撑起整套流程:
- 去水印与选源:自动挑选无水印视频源,并基于
video.bit_rate数组选最高码率版本,视频和实况图都适用。 - API 优先、浏览器兜底:默认走官方接口翻页,速度快;遇到翻页风控(常见于"只能抓到 20 条")时,自动启动浏览器让你手动过验证,验证通过后继续抓取。兜底逻辑在 core/ 的下载器与策略模块里实现。
- 双重去重:SQLite 数据库记录 + 本地文件扫描各查一遍,同一个作品换个模式(作品/喜欢/合集)也不会重复下载。
- 完整性校验:下载后比对 Content-Length,不完整的文件自动清理并重试,不会把半截视频留在目录里。
- 失败重试:指数退避重试(1s、2s、5s),默认限速 2 请求/秒,既保证成功率也不容易触发风控。
单条视频链接、图文、合集、音乐、作者主页、收藏夹、直播间,这些入口它都接受,链接解析还支持v.douyin.com短链自动展开。
动手前:装依赖、配 Cookie、建配置
需要 Python 3.8+,Windows / macOS / Linux 都可以。先拉取代码:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader/douyin-downloader # Python 包所在目录 pip install -r requirements.txt想用浏览器兜底,或希望自动获取 Cookie,再补装 Playwright:
pip install playwright python -m playwright install chromium抖音内容需要登录态。项目提供自动获取 Cookie 的方式,运行后会自动打开浏览器引导你登录抖音,登录完成回到终端按回车,Cookie 自动写入配置:
cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml五分钟跑通第一个批量下载任务
编辑config.yml,把链接换成你想下载的博主主页,先试 3 条:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - post number: post: 3 thread: 5 database: true运行:
python run.py -c config.yml终端会先解析链接,然后逐条显示下载进度、成功与失败计数。完成后到Downloaded/目录看一眼,每个作品是独立文件夹:{日期}_{标题}_{作品ID}/,里面是视频、封面、音乐和 JSON 元数据。
桌面客户端主界面:粘贴链接、检测类型、勾选要下载的内容
如果你更习惯图形界面,项目里还有一个内测中的桌面版,粘贴链接即刻开始,与命令行共用同一套下载后端。
批量任务进行中:进度百分比、已处理条数、每项的解析与下载状态一目了然
进阶场景一:把整个作者主页变成素材库
对固定追踪的博主,可以一次抓完整页,并按自己的规则归档。四种模式可自由组合:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post # 发布作品 - like # 喜欢列表 - mix # 合集 - music # 音乐原声 number: post: 0 # 0 表示全量 like: 0目录组织也交给工具。命名模板支持{id} {title} {author} {date} {year} {month} {day} {time} {type} {mode}等变量:
folderstyle: true filename_template: "{date}_{title}_{id}" folder_template: "{date}_{title}_{id}" author_dir: "nickname_uid" # 昵称_sec_uid,直观且唯一author_dir有三个选项:纯昵称最直观但重名会合并、改名会分裂;sec_uid稳定唯一;nickname_uid两者兼顾,重度用户推荐。切换只影响后续下载,不会迁移已有目录。
命名规则设置:作者目录、子目录开关、文件名模板都可以按需调整
进阶场景二:直播开录,下播自动存盘
想把直播间内容录下来,把链接指向直播间即可:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 0 # 0 = 一直录到主播下播 chunk_size: 65536 idle_timeout_seconds: 30录制的文件保存在Downloaded/{作者}/live/下,并附带一份*_room.json直播间元数据快照。主播下播、网络空闲或手动中断时,已录制的字节都会被保留,临时文件自动提升为正式文件,不会白录。注意 FLV 格式可直接播放,HLS 源只保存 playlist 文件,需要 ffmpeg 后处理转封装。
进阶场景三:评论、热搜与搜索,一次抓成结构化数据
下载之外,项目还带三个数据采集能力,输出都是机器可读的 JSON/JSONL,适合做内容分析和选题参考。
评论采集按作品抓取,可含二级回复:
comments: enabled: true include_replies: false # true 会多拉每条评论的二级回复,请求量增加 max_comments: 500 # 0 = 不限 page_size: 20会在媒体文件旁生成{日期}_{标题}_{作品ID}_comments.json。
热搜榜和关键词搜索用命令行直接触发,无需写配置文件:
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.jsonl进阶场景四:增量下载加定时任务,素材库自己长
定期追更某位博主,靠的是增量模式:数据库记录上次下载到哪,下次运行自动跳过已下载内容,只拉新作品。
database: true database_path: dy_downloader.db increase: post: true like: true配一个系统定时任务,每天凌晨自动跑:
0 3 * * * cd /path/to/douyin-downloader/douyin-downloader && python run.py -c daily.yml >> download.log 2>&1下载完成还可以通过 Bark / Telegram / Webhook 推送结果到手机,长任务挂着不用盯。若把服务跑成 REST API 模式(python run.py --serve --serve-port 8000),提交下载链接、查询任务状态都能走接口,方便接进自己的自动化流程。
效率实测:同样 50 条作品,差在哪里
本地实测数据如下。测试条件:100M 家用宽带、8 核台式机、thread: 5、默认限速 2 请求/秒、普通登录态 Cookie,抓取一个发布 200 条作品的博主主页。实际速度受网络与平台风控影响会有浮动。
| 环节 | 手动操作 | douyin-downloader |
|---|---|---|
| 单条作品(含无水印源查找、命名) | 3-5 分钟 | 20-40 秒 |
| 作者主页 50 条作品 | 2-3 小时 | 8-15 分钟 |
| 二次增量更新(判断哪些是新发) | 人工翻页比对 20-30 分钟 | 1-2 分钟自动跳过 |
| 文件整理归档 | 30 分钟 | 0(模板自动完成) |
| 合计 | 约 3.5-4 小时 | 约 15-20 分钟 |
差别主要来自三处:自动选无水印源省去二次处理、并发下载把单条串行变成 5 路并行、数据库加文件的双重去重让重复劳动归零。
任务中心:今日统计、历史记录、每个任务的作者与下载数量一目了然
高频问题与避坑
只能抓到 20 条作品怎么办?这是翻页风控的典型现象。确认配置里browser_fallback.enabled: true、browser_fallback.headless: false,浏览器弹窗出现后手动完成验证,别急着关窗口,验证通过会继续翻页。
Cookie 失效了怎么处理?Cookie 通常有几周到一个月有效期,失效后重新运行python -m tools.cookie_fetcher --config config.yml走一遍登录即可。
想重新下载某条作品?程序靠"数据库记录 + 本地文件"双重判断,两者都要清:删掉对应作品目录,再用sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<作品ID>';"删记录。只删数据库不会触发重下(本地文件里还能扫到 ID),只删文件会重下。
进度条反复刷屏?默认progress.quiet_logs: true会在进度阶段静默日志,调试时可以临时加--show-warnings或-v查看详情。
下载到一半断了?完整性校验会自动清理不完整文件并重试;直播录制中断时已录字节会保留为正式文件。
参与项目与最后提醒
douyin-downloader 是 MIT 协议的开源项目,遇到问题可以在项目页面的 Issues 提交 bug 或使用场景建议,愿意改代码可以直接提 Pull Request,文档和测试也欢迎补充。项目的功能文档在douyin-downloader/README.zh-CN.md,核心下载逻辑在 core/,认证与 Cookie 管理在 auth/,去重与历史记录在 storage/。
最后说句实在话:工具负责提效,怎么用是你的事。下载前想想内容是否用于个人学习、素材整理或创作参考,尊重原作者的劳动,别拿去侵权或商用,也留意平台的使用条款。数据抓取类的功能请控制频率、理性使用。
现在可以动手了——从把第一个链接粘进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),仅供参考