news 2026/9/15 14:19:21

抖音批量下载如何做完整无水印采集:douyin-downloader 实用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
抖音批量下载如何做完整无水印采集: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 是一个免费开源的抖音批量下载工具,面向"手动下载慢、带水印难复用、元数据拿不全"这几个常见痛点。它支持单个视频/图文/合集/音乐下载、用户主页批量下载、收藏夹抓取和无水印源优先,运行在 Python 命令行环境,配合 YAML 配置文件即可完成从安装到批量采集的全过程。

这个工具能给你留下什么

  • 成目录的媒体文件:每个作品一个子目录,包含无水印 MP4(自动挑最高码率档)、封面 JPG、背景音乐 MP3,按Downloaded/作者名/post/...的层级自动归档
  • 结构化数据:每个作品旁生成_data.json元数据(作者、描述、点赞数等),可选生成_comments.json评论文件(含二级回复),方便后续做统计或分析
  • 可复跑的下载历史:内置 SQLite 数据库(dy_downloader.db)+ 本地文件双重去重,重复运行不会重复下载;开启increase增量模式后,只抓新发布的作品

项目基于同一套后端还推出了桌面客户端 Douzy(内测中,见 README.zh-CN.md),以下截图为桌面版界面,核心下载逻辑与命令行版一致:

快速开始:从克隆到第一次下载

环境要求:Python 3.8+,Windows / macOS / Linux 均可。建议先创建虚拟环境,避免依赖冲突:

python -m venv .venv && source .venv/bin/activate # Windows 用 .venv\Scripts\activate # 克隆并安装依赖 git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt # 复制示例配置 cp config.example.yml config.yml

下载用户主页需要登录态。推荐用内置的浏览器工具自动获取 Cookie(需要先pip install playwrightpython -m playwright install chromium):

python -m tools.cookie_fetcher --config config.yml # 浏览器弹出后登录抖音,回终端按 Enter,Cookie 自动写入配置

然后编辑config.yml,把link改成目标主页链接、number.post改成想要的首批数量,运行:

python run.py -c config.yml

终端会显示 Rich 进度条,下载结果落在./Downloaded/目录下。也支持 Docker 部署(见 Dockerfile):

docker build -t douyin-downloader . docker run -v $(pwd)/config.yml:/app/config.yml -v $(pwd)/Downloaded:/app/Downloaded douyin-downloader

三种最常用的用法

用法一:批量下载某作者的全部作品

输入:作者主页链接(浏览器地址栏复制的/user/xxxx完整 URL)。在配置里设置modenumber

link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post # 发布作品;也可加 like(点赞) / mix(合集) / music(音乐) number: post: 0 # 0 表示全量,不限数量
python run.py -c config.yml

产出:Downloaded/作者名/post/日期_标题_aweme_id/下按作品分目录的媒体文件。同一作品在多个模式下出现时自动去重。

用法二:单条链接下载,不用改配置文件

视频、图文(/note//gallery/)、合集(/collection/)、音乐(/music/)短链都可以直接通过命令行传入,配置里的其他项作为默认值生效:

python run.py -c config.yml \ -u "https://www.douyin.com/video/7604123456789012345" \ -t 8 \ # 覆盖并发数为 8 -p ./Downloaded # 覆盖下载目录

v.douyin.com短链会自动解析,无需手动还原。

用法三:只追新增内容(增量下载)

适合定期同步关注的账号。开启increase并保证database: true(增量依赖数据库记录):

increase: post: true # 已下载过的作品自动跳过,只下新发布的 database: true

另外两个轻量场景:--search "关键词"按关键词搜索并导出 JSONL 到Downloaded/search/--hot-board 30导出热搜榜快照到Downloaded/hot_board/,都只跑一条命令即可。

批量下载完成后,输出目录长这样(folderstyle: true时):

Downloaded/ ├── download_manifest.jsonl # 下载清单 └── 作者名/ ├── post/ │ └── 2024-02-07_作品标题_aweme_id/ │ ├── ...mp4 # 无水印视频 │ ├── ..._cover.jpg # 封面 │ ├── ..._music.mp3 # 背景音乐 │ └── ..._data.json # 元数据 └── like/ mix/ music/ ... # 其他模式同理

关键配置项说明

以下是config.yml中最影响体验的几项,其余保持默认即可:

thread: 5 # 并发下载数,网络一般时降到 2~3 retry_times: 3 # 失败重试次数(指数退避 1s/2s/5s) proxy: "" # 代理地址,如 http://127.0.0.1:7890,无代理留空 video_quality: highest # 画质档:original 探测原片 / highest 最高转码档 / lowest 省流量 / 指定 720p 等 database: true # SQLite 去重与历史记录,增量模式依赖它 progress: quiet_logs: true # 进度阶段静默日志,减少刷屏
配置项作用建议
thread并发下载线程数默认 5;大量下载或网络不稳时调低
video_quality码率档位选择日常用highest;需要原片用original(每条多一次探测请求)
browser_fallback.headless浏览器兜底是否无头运行保持false,翻页被限时需人工过验证码
increase.*各模式增量开关定期同步账号时开启
comments.enabled是否采集评论需要评论数据时开,max_comments控制上限
start_time/end_time时间过滤(YYYY-MM-DD只抓某时间段的作品时使用

工具内部默认速率限制为 2 请求/秒,一般不需要额外调参。

常见问题排查

Cookie 失效,接口报登录类错误

  • 现象:批量下载中途失败,或提示需要登录
  • 原因:抖音登录态有时效,Cookie 过期
  • 解决:重新执行python -m tools.cookie_fetcher --config config.yml,登录后按 Enter 即可;避免短时间内反复重新登录

只能抓到 20 条左右的作品就停了

  • 现象:主页作品多,但下载列表卡在 20 条附近
  • 原因:翻页触发风控,接口分页被限制
  • 解决:确认browser_fallback.enabled: trueheadless: false,浏览器弹窗出现后手动完成验证,不要立即关闭窗口

重新运行任务,作品却被跳过了

  • 现象:想重下某个作品,程序显示已存在直接跳过
  • 原因:程序同时检查数据库记录和本地文件名中的aweme_id,两者任一命中即跳过
  • 解决:删文件不够,还要清数据库记录,例如sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';";全部重下则连dy_downloader.db一起删

进度条刷屏,日志很难看

  • 现象:终端输出大量重复的进度行
  • 原因:进度阶段日志未静默
  • 解决:确认progress.quiet_logs: true;需要排查问题时再临时加-v--show-warnings参数

写在最后

这套工具适合三类人:需要批量备份/研究某个账号内容的研究者,需要定期同步关注的博主新作品的运营,以及需要无水印素材与结构化元数据的创作者。接下来你可以:

  1. 克隆仓库并安装依赖,用number.post: 1跑一次单条下载验证环境
  2. tools.cookie_fetcher获取 Cookie,把number.post调大正式批量下载
  3. 打开increase.post: true,配置定时任务做周期性增量同步

请仅将本工具用于个人学习、研究与个人数据管理,尊重创作者版权,不要用于侵犯他人合法权益的用途。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 14:17:43

CuPy 内存管理完全指南:内存池、显存限制与流有序分配

CuPy 内存管理完全指南&#xff1a;内存池、显存限制与流有序分配 【免费下载链接】cupy NumPy & SciPy for GPU 项目地址: https://gitcode.com/GitHub_Trending/cu/cupy CuPy 默认采用**内存池&#xff08;memory pool&#xff09;**机制进行 GPU 显存与固定内存&…

作者头像 李华
网站建设 2026/9/15 14:17:30

个人微信API接口中的消息ID有什么用?开发者为什么经常需要它

msgId 是每条消息的唯一标识。它看起来只是一个字符串&#xff0c;但在接口开发的全流程里&#xff0c;从消息接收到发送再到撤回&#xff0c;msgId 贯穿了消息的完整生命周期。 一、接收时——幂等去重 同一条消息可能被推送多次&#xff08;网络重试、服务重启后补推&#…

作者头像 李华