抖音下载器实操:5 分钟跑通无水印视频、图集与批量主页下载
【免费下载链接】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 去重和浏览器兜底,适合需要把抖音内容落到本地的开发者、数据分析师和内容运营。
快速上手:5 分钟跑通第一个例子
环境要求不高:Python 3.8+,macOS / Linux / Windows 均可。
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt仓库提供了现成的 config.example.yml,复制一份即可用。部分能力(浏览器兜底、收藏夹下载)需要登录 Cookie,首次用自动获取最省事:
cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml浏览器弹出后登录抖音,回终端按 Enter,Cookie 会自动写回 config.yml。
最小示例:下载单个视频。
python run.py -c config.yml \ -u "https://www.douyin.com/video/7604129988555574538" \ -t 5 -p ./Downloaded✅ 跑成功的标志:终端出现 Rich 进度条;Downloaded/作者名/post/下生成以作品日期、标题、aweme_id 命名的子目录,里面有.mp4和可选的_data.json;Downloaded/根目录多出一个download_manifest.jsonl清单文件。看到这三样,说明整条链路都通了。
核心能力拆解
单链接无水印下载
一句话:把一条链接粘进来,自动识别类型并取无水印源。 怎么触发:-u参数或配置文件link列表,支持/video/、/note/(图文)、/collection/(合集)、/music/(音乐,优先原声文件),v.douyin.com短链会先解析再下载。 什么时候用:只想存单条内容时,这是最轻的用法。画质由video_quality控制,默认在 API 返回的多档码率里挑最高转码档。
桌面版 Douzy 工作台(内测中):粘贴链接识别类型后一键下载。
作者主页批量下载
一句话:给定一个/user/{sec_uid}链接,按模式拉取该作者的内容。 怎么触发:配置mode列表,可选post(发布)、like(点赞)、mix(合集)、music(音乐),多个模式可叠加:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post - like number: post: 50 # 0 表示全量 increase: post: true什么时候用:做账号内容归档、竞品账号跟踪时。同一个 aweme_id 跨模式自动去重;increase为 true 时跳过已下载作品,配合database: true生效,重跑任务只会补新内容。
登录账号收藏夹下载
一句话:下载"我的收藏"里的视频和收藏合集。 怎么触发:链接填https://www.douyin.com/user/self?showTab=favorite_collection,模式用collect或collectmix。 什么时候用:整理自己账号里攒的素材。注意它只认当前 Cookie 对应的账号,且必须单独使用,不能和 post/like 混用。
浏览器兜底
一句话:API 翻页被风控卡住时,启动真实浏览器继续翻页,验证码由你手动过。 怎么触发:browser_fallback.enabled: true,建议headless: false。 什么时候用:批量下载只抓到约 20 条、明显是分页受限时。它会采集缺失的 aweme_id 再补全详情,max_scrolls和wait_timeout_seconds控制滚动轮数与等待上限。
直播录制(实验性)
一句话:录live.douyin.com/{room_id}的直播流,主播下播时已录数据不丢。 怎么触发:link填直播间地址,配live.max_duration_seconds(0 = 录到下播)。 什么时候用:需要留存直播回放时。FLV 可直接播放;HLS 源只保存 playlist,要用 ffmpeg 后处理。
评论采集与热搜、搜索导出
一句话:把"内容"之外的数据也落到本地。 怎么触发:comments.enabled: true会为每个作品生成*_comments.json;python run.py --hot-board 30导出热搜榜快照,python run.py --search "关键词"导出搜索结果,均为 JSONL 文件。 什么时候用:做评论分析或关键词选题调研时,不用下载媒体本身。
关键配置说明
以下条目来自 config.example.yml 注释与 README,按对结果的影响排序:
| 配置项 | 作用 | 推荐值 |
|---|---|---|
mode | 决定下载作者主页的哪类内容 | 按任务选,collect/collectmix单独用 |
number.post等 | 各模式数量上限,0 为不限 | 先设小值试跑,稳定后改 0 |
thread | 并发下载数 | 默认 5,网络好可调到 8 |
video_quality | 码率档位:original/highest/1080p 等 | highest;要原片用original |
increase.post等 | 增量开关,跳过已下载作品 | 定期跟更的账号设true |
browser_fallback.enabled | 翻页受限时启用浏览器 | true,headless: false |
progress.quiet_logs | 进度阶段静默日志 | true,避免刷屏 |
proxy | API 与媒体下载共用代理 | 如http://127.0.0.1:7890 |
database/database_path | SQLite 去重与下载历史 | true/dy_downloader.db |
进阶玩法与调优
⚙️限速与并发:据仓库文档,默认速率限制为 2 请求/秒,重试走指数退避(1s、2s、5s)。批量任务失败多时,先降thread、别急着加代理;retry_times默认 3 次通常够用。
批量 + 增量跟更:把number.post设 0、increase.post设 true,配start_time/end_time划出时间窗(YYYY-MM-DD格式)。定时任务里反复跑同一份 config,就是"只下新作品"的追更流水线。
目录组织:folderstyle: true时按作品建子目录;作者重名可把author_dir改成nickname_uid,直观且不会合并。download_manifest.jsonl每行一条 JSON,含日期、aweme_id、标签、文件路径,是后续检索的现成索引。
完成通知:notifications.providers支持 Bark、Telegram、Webhook(企业微信/飞书/钉钉 bot 同理),长任务跑完推手机,不必盯着终端。也可以--serve起 REST API 服务,用POST /api/v1/download提交任务、轮询 job 状态。
桌面版任务中心:按作者/合集列出任务的成功、失败计数与重试入口(演示数据)。
常见问题(FAQ)
只抓到约 20 条作品?这是翻页风控的典型表现。确认browser_fallback.enabled: true且headless: false,浏览器弹窗后手动完成验证,不要立刻关窗。
Cookie 失效?重跑python -m tools.cookie_fetcher --config config.yml即可,无需手动复制浏览器字段。
为什么没有 transcript 文件?转写只对视频生效(图文不转写),且要transcript.enabled: true、OPENAI_API_KEY有效、response_formats包含txt或json,逐项排查。
想让某个作品重新下载?要同时删本地文件和数据库记录:删掉Downloaded/作者名/post/*_<aweme_id>/,再sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"。只删库不删文件不会触发重下。
进度条刷屏?确认progress.quiet_logs: true;调试时再临时加--show-warnings或-v。
怎么查下载历史?sqlite3 dy_downloader.db "SELECT aweme_id, title, author_name FROM aweme ORDER BY download_time DESC LIMIT 20;"。
边界与注意事项
❗浏览器兜底目前只对post模式完整验证,like/mix/music主要依赖 API 正常分页,深度抓取时受风控影响更大。
收藏夹模式限制多:仅当前登录 Cookie 账号可用、不能与其他模式混用、不支持增量截断。
直播录制是 experimental:webcast 接口未覆盖所有场景;HLS 源需 ffmpeg 后处理。
依赖平台接口与签名:工具通过内置的 xbogus/abogus 签名实现(见 utils/xbogus.py)访问抖音接口。平台更新风控或签名算法时功能可能失效,据仓库文档,这属于正常技术风险。
合规底线:内容仅用于技术研究、学习与个人数据管理,尊重版权与平台规则,避免高频批量请求。
写在最后
如果你的诉求是"把抖音内容稳定、可追溯地落到本地",这个下载器的功能覆盖面已经够用:单链接、批量主页、增量跟更、直播留存都有对应开关。下一步建议先通读 README.zh-CN.md 的典型场景一节,再对照 config.example.yml 里每个字段的注释,跑通一次单视频下载,然后按自己的任务类型打开对应能力。
参考资料
- 完整文档:README.zh-CN.md
- 示例配置:config.example.yml
- 架构与落盘策略:PROJECT_SUMMARY.md
- CLI 入口与参数:cli/main.py
- 下载器与策略实现:core/
- Cookie 自动获取工具:tools/cookie_fetcher.py
- 测试用例(验证各能力行为):tests/
- 文档设计稿:docs/superpowers/specs/
【免费下载链接】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),仅供参考