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 下载历史,日常用于个人素材整理非常顺手。
它解决的问题,先看清楚
这个项目的定位是"实用"而不是"大而全"。它面向的具体问题有这几类:
- 拿不到无水印原片。工具直接请求抖音服务端接口返回的视频源,落盘的就是未叠加水印的原始文件,画质取决于上传原片质量。
- 手动保存太慢。你可以把一个博主主页丢给它,配合
mode与number参数一次拉取作品、喜欢、合集、音乐原声,多线程并发下载。 - 重复劳动太多。SQLite 数据库和磁盘文件双重判断实现增量下载:已经下载过的作品自动跳过,下次运行只补新内容或补缺失文件。
- 过程不可控。内置速率限制(默认每秒 2 个请求)和失败自动重试(默认 3 次),并发数、画质档位、时间窗口都可在配置里约束。
- 下载完只是一堆散文件。默认按"作者/模式/作品"建目录,文件名带发布日期;另可导出
download_manifest.jsonl清单和原始 JSON,方便做素材库或数据分析。
此外还有几个可选增强项:评论采集(含二级回复)、视频语音转写、下载完成通知(Bark/Telegram/Webhook)、关键词搜索与热搜榜导出、REST API 服务模式,以及接口受限时的 Playwright 浏览器兜底。不想用就保持默认关闭。
项目同时提供图形界面版本 Douzy(Windows/macOS),覆盖抖音、TikTok、YouTube 等平台,粘贴链接即可下载并跟踪任务;命令行版则专注抖音,适合脚本化与批量任务。本文以命令行版为主线。
环境与前置准备
整个过程分四步:装依赖、准备登录态、复制配置、验证运行。
1. 获取代码并安装依赖(需要 Python 3.9+,支持 Windows / macOS / Linux):
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt2. 安装浏览器兜底组件(可选,但建议装。接口分页受限时会用它补全主页作品列表):
pip install playwright python -m playwright install chromium3. 准备 Cookie。访问抖音内容需要有效的登录态,最省事的办法是运行 Cookie 获取工具,它会打开浏览器让你扫码登录,然后回终端按 Enter 保存:
cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.ymlCookie 会以 JSON 形式写入配置,之后由 Cookie 管理模块 统一维护。登录态失效时程序会提示重新登录,交互环境下还能自动弹出浏览器重登一次。
4. 把配置文件里的示例link换成你的目标链接,其余保持默认即可先跑起来。
需要提前知道的限制:抖音接口风控(Argus 门禁)目前会拦截单条视频、合集、音乐、喜欢/收藏等部分接口,主页作品可走浏览器兜底但不保证成功率。若这类场景是你的主要用途,建议改用 Douzy 桌面版,命令行版更适合作品批量与自动化场景。
核心场景实战
场景一:下载单条视频
拿到v.douyin.com短链或douyin.com/video/...链接,两种方式任选:
python run.py -c config.yml -u "https://v.douyin.com/xxxxx/"-u会追加链接,不覆盖配置文件里的link,可以重复传入多条。短链会先自动解析再下载。
场景二:主页批量下载 + 时间/数量筛选
把博主主页地址填进link,在配置里限定范围:
link: - https://www.douyin.com/user/xxxxxx mode: [post] start_time: "2025-01-01" # 只下载该日期之后的作品 end_time: "" number: post: 100 # 0 表示不限制然后执行:
python run.py -c config.ymlmode可填post(作品)、like(喜欢)、mix(合集)、music(音乐原声)等,一次任务可以混合多种模式;每条模式都能单独设上限。
场景三:搭建可增量的素材库
首次全量下载后,把increase.post保持为true(默认),之后每周重跑同一份配置,工具会跳过磁盘上已存在的非空文件,只下载新增作品。缺失的文件由redownload_missing_files(默认true)负责补下。落盘结构大致如下:
Downloaded/ ├── download_manifest.jsonl # 每次下载的明细清单 └── 作者昵称/ └── post/ └── 2025-03-01_作品标题_aweme_id/ ├── 2025-03-01_作品标题_aweme_id.mp4 ├── ..._cover.jpg # 开启 cover 后 └── ..._data.json # 开启 json 后日期取自作品发布时间而非下载时间,素材归档时天然有序。
场景四:可选扩展
python run.py --search "关键词" --search-max 50 # 关键词搜索导出 python run.py --hot-board 30 # 热搜榜导出 python run.py --serve --serve-port 8000 # 启动 REST API 服务评论采集、语音转写、完成通知均在 config.example.yml 中有对应段落,打开enabled并按需填写即可;转写功能依赖额外安装 whisper 相关组件。
配置与参数详解
日常使用只需要碰几个键,完整示例见 config.example.yml,默认值定义在 config/default_config.py。
| 配置项 | 作用 | 建议值 |
|---|---|---|
link | 目标视频/图文/主页链接列表 | 必填 |
path | 下载根目录 | ./Downloaded/ |
mode | 下载模式,可多选 | [post] |
number.post | 各模式数量上限,0 为不限 | 按磁盘空间 |
start_time/end_time | 日期窗口(YYYY-MM-DD,含结束日) | 建素材库时启用 |
video_quality | 画质:original/highest/lowest/1440p…360p | highest(默认);original会多一次探测请求尝试原片 |
thread | 并发数 | 3~5 |
rate_limit | 每秒请求上限 | 2 |
retry_times | 失败重试次数 | 3 |
increase | 各模式增量开关;设false强制重下并覆盖当前筛选范围 | true |
redownload_missing_files | 磁盘文件缺失时是否补下 | true |
video/music/cover/json | 分别控制视频本体、背景音乐、封面、元数据 JSON 的落盘 | 默认只开video,按需叠加 |
filename_template/folder_template | 命名模板,可用{date}_{title}_{id}等变量,必须含{id}防重名 | 默认即可 |
browser_fallback | 浏览器兜底开关与滚动/超时参数 | enabled: true、headless: false |
database | 是否写 SQLite 历史 | true |
命令行参数可临时覆盖配置,优先级更高:-c指定配置、-u追加链接、-p下载目录、-t并发数、-v详细日志。
高频疑问与问题排查
Cookie 失效或提示需要登录怎么办?重新运行python -m tools.cookie_fetcher --config config.yml即可。交互环境下,程序检测到登录态失效时会自动弹浏览器重登一次并继续重试,不需要手动中断。
主页作品只拿到几条?确认browser_fallback.enabled为true、headless为false,让兜底浏览器以有界面模式打开,你在里面手动完成验证和滚动,翻页上限由max_scrolls控制。注意:接口风控严重时兜底也可能拿不全,这不是配置错误。
想强制重新下载一批作品?把对应模式的increase设为false再运行,工具会重下并原子覆盖当前筛选范围内的文件,数据库无需清空;想只补缺失文件则保持redownload_missing_files: true即可。
下载慢或经常失败?先加-v看详细日志定位卡点;网络波动大时把thread降到 3、确认rate_limit不低于接口承受范围;若配了proxy而代理不通,会直接导致全部请求失败,先排查代理。
为什么有些链接解析了却下不了?单条视频/图文、合集、音乐、喜欢、收藏等接口目前被抖音风控拦截,工具会直接报出具体原因而不是静默失败。这类内容建议改用 Douzy 桌面版下载,命令行的稳定能力集中在主页作品批量与自动化流程上。
文件命名或目录想自定义?改filename_template和folder_template,变量清单({date}、{title}、{author}、{id}等)写在配置文件注释里;作者目录想避免重名合并,把author_dir改为nickname_uid。
横向选型参考
| 维度 | douyin-downloader(CLI) | Douzy 桌面版 | 在线无水印网站 | 手机录屏 |
|---|---|---|---|---|
| 画质 | 无水印,最高转码档可选原画 | 无水印 | 通常有压缩 | 取决于设备,含平台叠加层 |
| 批量能力 | 主页/合集/音乐多模式批量 | 多任务队列 | 基本单次 | 无 |
| 元数据与清单 | JSON + manifest + SQLite 历史 | 作品档案管理 | 无 | 无 |
| 增量去重 | 磁盘 + 数据库双判断 | 本地档案去重 | 无 | 无 |
| 部署成本 | Python 环境 + Cookie | 直接安装客户端 | 打开即用 | 零成本 |
| 适合人群 | 脚本化、素材库、数据分析 | 日常收藏、多平台 | 临时单条需求 | 应急 |
选型建议一句话:要自动化、要留数据痕迹选 CLI;要开箱即用、偶尔跨平台,装 Douzy 更省事。
写在最后
工具能帮你高效保存内容,但下载下来的作品版权仍属于创作者。请把使用范围限定在个人学习、研究与合法授权内,避免高频大规模抓取,遵守平台规则;接口与风控会随平台变化,功能可用性以最新版 README 为准。
如果只想记住一件事:装好依赖、配好 Cookie、python run.py -c 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),仅供参考