douyin-downloader 教程:免费批量下载抖音视频去水印,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 数据库去重、断点续传和浏览器兜底。只存一个无水印视频,3 条命令就能跑通;想把整个创作者主页搬回本地硬盘,配置模板也已经给你备好。这篇教程面向不想写代码的新手,带你从安装依赖、拿到第一个无水印视频,一路走到批量增量下载、直播录制和 API 服务。
这篇适合谁:先对号入座
- 如果你正在遇到"存下来的视频总带水印",它能帮你挑无水印的最高清源,顺带存下封面、BGM、作者头像和元数据 JSON;
- 如果你正在遇到"一个个存太慢、文件名乱成一锅粥",它能帮你按作者主页批量下载,文件自动按"日期 + 标题 + ID"归档;
- 如果你正在遇到"隔几天再下又把老视频下了一遍",它能帮你用数据库记住每个作品 ID,第二次运行只拉新增;
- 如果你正在遇到"想录主播直播、分析作品下的用户讨论",它能帮你挂机录直播流、导出带二级回复的评论 JSON;
- 如果你正在遇到"想把下载能力接进自己的自动化流程",它能帮你启动一个 REST API 服务(就是 HTTP 接口),发一个请求就能提交下载任务。
能力速览:场景、能力与效果一页对照
| 场景 | 能力 | 效果 |
|---|---|---|
| 存单个视频 / 图文 | 粘贴作品链接 | 输出无水印最高清源,可附带封面、BGM |
| 手机 App 分享链接 | v.douyin.com短链自动解析 | 不用手动转长链 |
| 保存某作者全部作品 | 主页链接 +mode: post | 默认 5 线程批量抓取,数量和时间范围可控 |
| 搬运点赞与收藏夹 | mode: like/collect | 需登录,批量搬走"点赞过"和"收藏夹" |
| 下载整组合集 | 合集链接 | 自动展开合集,批量下完 |
| 保存原声音乐 | 音乐链接 | 优先原声文件,缺失时回退到该音乐下首条作品 |
| 录主播直播 | 直播间链接 | FLV/HLS 录制,下播自动保留已录数据 |
| 分析作品讨论 | 评论采集 | 每作品生成*_comments.json,含二级回复 |
| 内容选题研究 | 热搜榜 / 关键词搜索 | 前 30 条热搜或 100 条关键词作品,导出 JSONL |
第一阶 · 最小验证:用最少命令跑通流程
目标是拿到第一个无水印视频,全程只用一个终端。
克隆项目与安装依赖命令
前提是本地装了 Python 3.8 及以上版本:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader/douyin-downloader pip install -r requirements.txt第一条把项目代码拉到本地,第二条进入放主程序的子目录,第三条安装全部 Python 依赖;如果下载慢,最后一条命令末尾追加-i https://pypi.tuna.tsinghua.edu.cn/simple换国内镜像源。
Cookie 获取命令
抖音需要登录身份才返回完整内容,Cookie(cookie)就是登录凭证:
python -m tools.cookie_fetcher --config config.yml这条命令会弹出浏览器,你扫码登录一次抖音,回终端按回车,Cookie 就自动写进配置文件,只保存在本地不上传;有效期一般一两星期,过期重跑这条命令即可。如果要用到浏览器兜底,先装浏览器自动化引擎:
pip install playwright python -m playwright install chromium前者安装 Playwright 这个浏览器自动化库,后者下载它需要的 Chromium 浏览器内核。
写一份最小配置
cp config.example.yml config.yml把项目自带的模板复制一份当自己的配置,模板在douyin-downloader/config.example.yml,每个字段都带注释。打开config.yml,把链接换成要下的视频:
link: - https://www.douyin.com/video/7604129988555574538 path: ./Downloaded/ music: true cover: true json: truelink是下载目标,path是保存目录,后面三行决定要不要连带下载背景音乐、封面图和作品元数据 JSON,其余保持默认。
运行第一次下载
python run.py -c config.yml-c指定配置文件,这条命令启动下载,终端实时显示进度、跳过提示和统计信息,几秒后Downloaded/里就有第一个无水印视频。
命令行效果:顶部显示时间范围与作品总数,中间是下载配置和批量进度,底部给出成功数与保存位置
第二阶 · 批量与增量:把整个作者主页搬回家
批量主页下载配置
把链接换成创作者主页地址,指定模式和数量上限:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - post number: post: 50mode: post表示抓取发布的作品,number: 50表示只下最近 50 个,0 表示全量;还可以同时写like(他点赞过)、mix(合集)、music(用过的原声)。运行后一排排进度条并行推进,默认 5 线程。
批量下载时每个作品都有独立进度条,多线程并行、失败自动重试
增量去重配置
批量下载最怕重复。开启数据库与增量开关:
database: true increase: post: truedatabase启用 SQLite 记录(SQLite 是免安装的单文件数据库,每次下载的作品 ID 都存进去);increase.post: true表示再下同一作者时自动跳过已有作品,只拉新增。配合内置的断点续传和完整性校验,文件不完整会自动清掉重下,基本不用重复劳动。
时间范围过滤与命名模板
只想要某段时间的作品,加两行:
start_time: "2024-06-01" end_time: "2024-06-30"工具只搬这个时间窗口内发布的作品,其余不碰。命名和目录也能自定义:
folderstyle: true filename_template: "{date}_{title}_{id}" folder_template: "{date}_{title}_{id}"{date}、{title}、{id}是可用变量,模板里必须含{id}防止重名覆盖;folderstyle: true表示每个作品单独建子文件夹。落盘效果就是"一个作品一个文件夹",视频、封面、音乐、元数据 JSON 整齐放一起,Downloaded/下还有一份download_manifest.jsonl,每行一条下载记录,方便追溯。
下载完成后的目录:按"日期 + 标题"自动分文件夹,视频与封面资源齐全
第三阶 · 进阶与自动化:直播、评论、API
下面每项都是"一句场景 + 最小配置",按需开启。
直播录制命令
喜欢的博主开播了,但你没法守着?把直播间链接写进配置:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 0max_duration_seconds: 0表示录到主播下播,改成 3600 就只录 1 小时;录好的 FLV(常见直播流格式)存在Downloaded/{作者}/live/,下播或中断时已录数据都会保留。
直播录制:自动识别直播间、显示在线观众数与清晰度选项,拉取 FLV 流地址并保存
评论采集配置
想分析某条作品下的用户讨论:
comments: enabled: true include_replies: true开启后每个作品多生成一份*_comments.json;include_replies: true会连二级回复一起抓,适合内容研究和选题挖掘。
热搜榜与关键词搜索
不追特定博主,只想看今天抖音在聊什么:
python run.py --hot-board 30 -p ./Downloaded python run.py --search "猫咪" --search-max 100 -p ./Downloaded第一条抓热搜榜前 30 条,第二条按关键词搜 100 条作品,结果都是 JSONL 文件(每行一条 JSON 记录的文本格式),方便后续分析。
REST API 服务模式
想把下载能力接进自己的系统:
python run.py --serve --serve-port 8000需先执行pip install fastapi uvicorn;启动后向/api/v1/download发 POST 请求提交链接、向/api/v1/jobs/{job_id}发 GET 请求查进度,很适合自动化脚本编排。核心下载逻辑在douyin-downloader/core/,测试用例在douyin-downloader/tests/,想扩展功能时照着看即可。
完成通知与语音转写
长任务挂着跑,想完事立刻知道?
notifications: enabled: true on_success: trueproviders里填具体渠道,支持 Bark、Telegram、Webhook,任务跑完手机马上收到推送。想把视频内容变成可检索的文字:
transcript: enabled: true配置好 OpenAI API Key 后,每个视频作品会生成xxx.transcript.txt转写文本(图文不转写)。
不想敲命令:桌面版客户端
如果完全不想碰终端,项目还有基于同一套后端的桌面版:粘贴链接即可开始下载,任务中心逐条查看每个下载任务的状态,作品档案页支持按作者、标题、时间筛选和批量导出。
桌面版主界面:粘贴链接、检测内容类型、勾选作品 / 喜欢 / 合集后一键开始
常用配置速查表
| 配置项 | 作用 | 建议值 |
|---|---|---|
link | 下载链接,支持视频 / 主页 / 短链 / 直播间 | 换成你自己的 |
mode | 批量模式:post 作品、like 点赞、mix 合集、music 原声 | post |
number.post | 各模式下载数量上限,0 为不限 | 50 |
increase.post | 增量开关,只拉新作品 | true |
database | SQLite 去重与下载历史记录 | true |
start_time/end_time | 发布时间过滤,格式 YYYY-MM-DD | 留空或指定日期 |
thread | 并发下载线程数 | 3~5 |
retry_times | 失败重试次数,按 1s/2s/5s 指数退避 | 3 |
browser_fallback.enabled | 翻页受限时用浏览器兜底、人工过验证码 | true |
browser_fallback.headless | 兜底浏览器是否后台运行,false 才能弹窗手动过码 | false |
filename_template | 文件命名模板,必须含{id} | {date}_{title}_{id} |
proxy | HTTP/HTTPS 代理,如http://127.0.0.1:7890 | 留空 |
排障速查:现象对照解法
现象:报 403 Forbidden 或"未登录"原因:Cookie 过期,有效期一般只有一到两周。 解法:重跑python -m tools.cookie_fetcher --config config.yml扫码一次即可。
现象:批量下载只能抓到 20 条作品原因:翻页触发了风控限制。 解法:确认browser_fallback.enabled: true且headless: false,浏览器弹窗后手动完成验证码,等它跑完再关窗口。
现象:下载到一半断了,担心全部重来原因:不用慌,工具内置断点续传和完整性校验。 解法:直接再跑一次同样的命令,不完整的文件自动重下,已完成的会跳过。
现象:批量下载速度慢、内存占用偏高原因:并发和单次批量开得太激进。 解法:把thread调到 3,每次控制在 50~100 个作品分批跑,跑前确认磁盘剩余空间。
现象:想重下某作品却被跳过原因:去重是"数据库记录 + 本地文件名"双重检查。 解法:删掉本地文件目录,并删掉dy_downloader.db里对应记录;官方中文文档douyin-downloader/README.zh-CN.md的"重新下载"一节有现成命令。
收尾:三步开始
douyin-downloader 把"保存抖音内容"这件事,从手动点鼠标变成一份配置就能反复执行的流程:无水印源、去重、直播录制、API 集成,全在一个工具里。
- 克隆项目装依赖
- 扫码写入 Cookie
- 换链接跑首次任务
【免费下载链接】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),仅供参考