
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-downloaderdouyin-downloader 是一个 Python 命令行工具用于无水印下载抖音视频、图文、合集与音乐粘贴链接它解析出无水印的原画文件连封面、原声、元数据 JSON 一起存进按「作者/类型/作品」组织的目录。最突出的能力是主页批量下载——配合 SQLite 去重和磁盘增量一份配置跑一次就完成归档再跑只补新作品。工作原理从链接到落盘的一条流水线一次运行的流程是固定的run.py读取配置优先级为命令行参数 环境变量 配置文件 内置默认值用配置里的 Cookie 初始化抖音 API 客户端按链接形态判断是单个作品还是用户主页。主页链接会翻页拉取作品列表经过时间窗口和数量过滤后以设定并发数并发下载内置限速默认 2 请求/秒和指数退避重试1s、2s、5s。每个作品存入独立子目录同时追加一份download_manifest.jsonl清单开启database时还会把记录写进本地 SQLite。如果主页翻页被风控拦截它会自动启动一个真实浏览器做兜底由你手动完成验证后继续采集。两个入口命令行 CLI 与桌面版 Douzy同一套后端有两种形态。命令行版免费开源适合服务器和脚本化场景桌面版 Douzy内测中带图形界面、内置登录窗口且请求由内置浏览器签名发起不受当前抖音风控门禁影响。对比项命令行run.py桌面版 Douzy形态YAML 配置 终端GUI 应用登录方式cookie_fetcher 脚本 手动扫码内置登录窗口主页作品下载依赖浏览器兜底未针对风控实测正常获取方式clone 仓库 pip 安装Releases 内测包如果你在服务器上跑或要嵌进自动化流程用命令行如果想在日常电脑上稳定地做归档个人建议直接上桌面版。从安装到第一次成功运行克隆代码并安装依赖git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt要求 Python 3.8 以上。浏览器兜底和 Cookie 自动获取还需要 Playwrightpip install playwright python -m playwright install chromium生成配置文件cp config.example.yml config.yml打开config.yml把link写成一个抖音主页链接mode保持[post]number.post改成 2 左右用于试跑。其余字段先不动。获取 Cookie最容易卡住的步骤python -m tools.cookie_fetcher --config config.yml这条命令会拉起浏览器并打开 douyin.com。扫码或账号登录后回到终端按 Enter你会看到msToken、ttwid、odin_tt、passport_csrf_token等字段被写回config.yml。卡住了怎么办浏览器起不来或报错多半是 Playwright 或 Chromium 没装全补跑上面两条安装命令。Cookie 没写进配置确认登录成功后回到终端按了 Enter会话过期就重新扫码。不确定 Cookie 是否有效项目没有独立的验证命令直接跑下载命令若立刻出现 403 或要求登录的提示就是 Cookie 失效。跑第一次下载python run.py -c config.yml你会看到 Rich 进度条逐项推进结束后Downloaded/作者名/post/下出现作品子目录视频本体加按开关保存的封面、原声、JSON旁边生成download_manifest.jsonl和dy_downloader.db。想临时覆盖配置值命令行参数更直接-u追加链接、-t改并发、-p改保存目录例如python run.py -c config.yml -u https://www.douyin.com/user/xxxx -t 8。核心能力拆解按你实际会碰到的任务来一次拉空一个主页的全部作品把link指向主页链接v.douyin.com短链也可以会自动解析mode设为postnumber.post设为 0 即不限数量。link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post number: post: 0 # 0 不限条数跑完后作者目录下每个作品一个子目录默认命名模板是{date}_{title}_{id}日期前缀取的是作品发布时间而非下载时间所以按目录名排序就等于按发布时间排序。mode还支持like点赞、mix合集、music音乐可以一次多选跨模式按作品 ID 去重同一作品不会下两遍。重复运行只补新作品增量机制在这里发挥价值increase.post: true默认开启的含义是——该作品的主文件在磁盘上已存在且非空就跳过缺失或为空则重新下载。判断主要依据磁盘文件SQLite 记录用于历史查询所以「强制重下某个作品」的官方做法就是删掉它本地的媒体文件让下一次运行认为缺失。圈定时间窗口和条数start_time和end_time格式YYYY-MM-DD按发布时间过滤作品列表常和number.post组合做定向采样。比如只想要 2024 年的前 50 条start_time: 2024-01-01、end_time: 2024-12-31、number.post: 50。这样不用下完整个主页再人工筛选。给作品附带评论和转写comments.enabled: true后每个作品旁多一个*_comments.jsoninclude_replies: true会额外抓取二级回复请求量明显增加慢一些。对视频图文不转写开启transcript.enabled: true并配上有效的OPENAI_API_KEY环境变量下载完成会调用 OpenAI 转写 API生成.transcript.txt和.transcript.json存在媒体文件旁。两者默认都关闭按需开启即可。录制直播实验性功能把link指向live.douyin.com/{room_id}live.max_duration_seconds设 0 表示一直录到主播下播。FLV 存在Downloaded/{作者}/live/下附带直播间元数据快照下播、断网或按 CtrlC 时已录制的字节都会保留。注意 HLS 源只保存播放列表文件需要自己用 ffmpeg 后处理这个功能整体标记为 experimental。配置与自定义真正影响决策的几个开关不用通读整个配置文件下面这些值最常用配置项默认值建议值影响范围mode/number.*[post]/post: 1post: 0全量下载什么、下多少0 为不限video_qualityhighestoriginal追画质 /720p省流量从多档码率里挑哪一档original会逐条探测上传原片每条多一次请求thread53-8并发下载数调太高容易触发风控start_time/end_time空不限按需求按发布时间过滤作品列表video/music/cover/avatar/json仅video: true建议json: true除视频本体外是否保存封面、原声、头像、元数据browser_fallback.enabled/.headlesstrue/false保持默认翻页被风控时是否弹浏览器headless 模式下无法手动过验证increase.*各模式true保持true分模式的增量开关database/database_pathtrue/dy_downloader.db保持默认历史记录与去重数据来源目录形态由folderstyle按作品建子目录默认开和filename_template模板必须包含{id}防重名覆盖决定。作者目录默认按昵称命名重名的博主会合并到一起重度用户可以改author_dir: nickname_uid用「昵称_sec_uid」保证唯一。真实任务演练任务一持续归档某创作者的新作品。如果你的需求是「每天把新作品拿下来、旧的不重复下」在config.yml写主页链接mode: [post]、number.post: 0、increase.post: true然后把python run.py -c config.yml放进 crontab 每天跑一次。每次运行翻到「磁盘上已存在」的作品就跳过只补新增download_manifest.jsonl是追加写入的看当天多了哪些行就知道这次拉到了什么。任务二按关键词摸清某话题的抖音内容盘子。如果你的需求是「分析某个话题下大家在发什么」不必建配置文件python run.py --search 关键词 --search-max 100 -p ./Downloaded会输出Downloaded/search/关键词_时间戳.jsonl每行一个作品含描述、标签、作者、发布时间--hot-board 30则导出热搜榜快照。JSONL 直接喂给 pandas 或任何脚本做统计即可。常见问题与排错1) 主页作品只拉到 20 条就停了现象翻页中断数量停在 20 左右。原因抖音对翻页接口做了风控。确认browser_fallback.enabled: true且headless: false弹出浏览器后手动完成验证别急着关窗口。这是当前 CLI 拉取主页作品的唯一兜底通道。2) 单个视频 / 点赞 / 合集 / 音乐下载报 403现象请求返回Blocked by ArgusSecurityPlugin。原因2026 年 8 月起抖音的 Argus 风控开始拦截这些接口的非浏览器请求CLI 的 API 直连无法携带页面 SDK 签名带不带 Cookie 都一样。这是平台侧限制不是配置问题——这些场景目前建议改用桌面版 Douzy主页post模式可依赖浏览器兜底。3) Cookie 失效现象请求返回 403 或提示需要登录。原因Cookie 绑定登录态会过期。重新执行python -m tools.cookie_fetcher --config config.yml刷新即可。4) 第二次运行没有重新下载 / 想强制重下现象已下载的作品被直接跳过。原因磁盘文件 数据库双重去重。重下单个作品删除它本地子目录目录名含作品 ID并清掉dy_downloader.db里对应记录全部重来则把Downloaded/和数据库文件一起删。注意只删数据库不删文件不会触发重下因为程序会扫描本地文件名里的作品 ID。边界与进阶玩法先说清楚它做不到的事免得走弯路它无法绕过平台风控——Argus 门禁之下单个视频 / 图文、合集、音乐、点赞 / 收藏 / 收藏合集在 CLI 里目前都不可用2026-08/09 起主页作品依赖尚未针对门禁实测的浏览器兜底collect/collectmix当前登录账号的收藏夹只对 Cookie 对应的账号生效且必须单独使用、不能和其他模式混跑直播录制是实验性的接口未覆盖所有场景。需要这些场景时桌面版 Douzy 是当前稳妥的路径。两个值得了解的集成方式。一是把它当 REST 服务用pip install fastapi uvicorn后执行python run.py --serve --serve-port 8000通过POST /api/v1/download提交链接、GET /api/v1/jobs/{job_id}查进度适合嵌进内部系统。二是完成通知notifications支持 Bark、Telegram、Webhook 三种推送Webhook 填企业微信、飞书、钉钉的机器人地址也行长任务跑完推一条消息不用守在终端前。写在最后核心路径就一条装好依赖 → 跑cookie_fetcher拿 Cookie → 在config.yml里写主页链接和模式 →python run.py -c config.yml。下一步建议先把number.post设成 2 试跑一遍确认Downloaded/里的文件、命名和清单符合预期再放开到全量并打开增量开关。【免费下载链接】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),仅供参考