抖音视频批量下载终极实测: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
手动存一条 30 秒的抖音视频,复制链接、去水印、改文件名,最快也要 1 分钟;把 274 条作品这样逐条存下来,基本等于搭上一个通宵。开源工具 douyin-downloader 专治抖音批量下载这个痛点:去水印、支持视频/图集/合集/音乐/直播录制,还自带去重、重试和进度条。读完本文,你可以在 5 分钟内跑通第一条批量下载命令,并拿到 4 个真实工作场景下可直接复制的配置。
本文是一份面向普通用户的 douyin-downloader 实战教程,不堆功能列表,而是带着你从装环境、配 Cookie、写最小配置开始,把"下载"这件事真正用起来。无论你是自媒体运营、学术研究者,还是只想备份自己收藏的普通用户,都适用。
先看真实运行画面:一次下载到底发生了什么
第一次跑通命令后,你会看到这样一个命令行界面:
画面分三个区域:上方是下载配置(总数、线程数、保存路径),中间是批量下载进度(每个文件的状态,这里清晰写着"跳过已存在"),下方是结果统计(成功数量与用时)。注意那个"跳过已存在"——它靠 SQLite 数据库记录 + 本地文件双重比对,同一个作品下载过一次就自动跳过,这正是后面所有增量玩法的地基。
三分钟完成环境配置与 Cookie 获取
动手之前先把环境准备好,这一步只要三条命令。
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt如果你打算用浏览器兜底功能(翻页被风控时自动开浏览器帮你过验证码),或者想自动获取 Cookie,再多装一个 Playwright:
pip install playwright python -m playwright install chromium接下来是很多新手最容易卡住的一步——Cookie。工具已经帮你封装好了:
python -m tools.cookie_fetcher --config config.yml这个命令会自动打开浏览器,你登录抖音后回到终端按一下回车,Cookie 就会被自动写进配置文件,全程不用手动复制粘贴。核心实现可以参考 tools/cookie_fetcher.py 和 auth/cookie_manager.py。
一份最小配置,跑通第一次抖音批量下载
新建config.yml,把下面这份配置粘贴进去,替换链接即可:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - post number: post: 50 thread: 5 retry_times: 3 database: true运行:
python run.py -c config.yml这份配置里的四个字段决定了你的下载体验:mode: post表示下载作者发布的作品;number.post: 50是数量上限,改成0就是全量下载;thread: 5控制并发;database: true开启去重与历史记录。到这一步,你已经完成了第一个真实的抖音视频批量下载任务。
一个工具,认得出八种抖音链接
跑通第一次后你会发现,link里能放的远不止用户主页。工具内置的链接解析模块会识别常见抖音地址类型,核心逻辑在 core/url_parser.py:
| 链接类型 | 示例 | 配合的 mode |
|---|---|---|
| 单个短视频 | /video/7604129988555574538 | 默认 |
| 单个图文 | /note/7341234567890123456 | 默认 |
| 单个合集 | /collection/7341234567890123456 | 默认 |
| 单个音乐原声 | /music/7341234567890123456 | 默认 |
| 短链接 | v.douyin.com/xxxx | 自动解析 |
| 作者主页 | /user/{sec_uid} | post/like/mix/music |
| 直播间 | live.douyin.com/{房间号} | 直播录制 |
| 我的收藏夹 | /user/self?showTab=favorite_collection | collect/collectmix |
这里有一个容易忽略的细节:同一个作品在不同模式下出现,不会重复下载。比如某个视频既在作者主页、又在作者点赞列表里,跨模式自动去重会帮你只存一份。接下来,我们用四个真实场景把这套能力串起来用。
场景一:竞品追更,只下新作品不重复
需求背景:做自媒体运营,每天要盯 30 个竞品账号的新内容做拆解。以前的做法是挨个打开主页、判断哪个是新发的、再逐条下载,一个上午就没了。
配置做法:把多个账号写进link,同时开启增量下载,让工具只补新作品:
link: - https://www.douyin.com/user/竞品账号A - https://www.douyin.com/user/竞品账号B mode: - post number: post: 0 # 0 = 不限制数量 increase: post: true # 只下载数据库里没有的新作品 folderstyle: true filename_template: "{date}_{title}_{id}"效果对比:原来人工轮巡 30 个账号要40 分钟,现在每天一条python run.py -c config.yml,配合系统定时任务(Linux 用 crontab、Windows 用任务计划程序)在凌晨自动跑,6 分钟跑完且只下载新增内容。加上filename_template按"日期_标题_ID"命名,素材归档完全不需要二次整理。
批量运行时,你会看到这样的进度画面——每个文件逐条推进,失败的自动重试,已存在的自动跳过:
场景二:建素材库,按关键词与热搜批量抓取
需求背景:培训机构要建一个包含上千条优质案例的素材库,按学科归类;研究员则需要按话题采集样本。这类需求不关心"谁发的",只关心"内容是什么"。
配置做法:工具提供了两个命令行参数,直接按内容抓取:
# 搜索"猫咪"相关作品,最多 100 条,结果落 JSONL python run.py --search "猫咪" --search-max 100 -p ./Downloaded/ # 拉取抖音热搜榜前 30 条 python run.py --hot-board 30 -p ./Downloaded/再配合评论采集和时间过滤,把"只下载视频"升级成"采集结构化数据":
start_time: "2024-01-01" end_time: "2024-12-31" comments: enabled: true include_replies: false max_comments: 500效果对比:原来人工逐条搜索、记录互动数据,300 条样本要抓一周;现在按关键词 + 热搜批量跑,半天拿到上千条,每条作品旁边还会生成*_comments.json评论数据和完整元数据 JSON,方便做多维分析。
场景三:直播录制,不再错过任何一场重要直播
需求背景:运营需要录制竞品直播复盘话术,老师要录下自己的直播课留档。手机录屏会占住手机、画质不稳定、容易中途断掉。
配置做法:直接在link里放直播间地址,加上录制参数:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 3600 # 0 = 录到主播下播 chunk_size: 65536 idle_timeout_seconds: 30运行后,工具会先拉取直播信息并让你选择清晰度,再解析出推流地址开始录制:
效果对比:录制的 FLV 文件会保存在Downloaded/{作者}/live/目录下,并附带*_room.json直播间元数据快照。最实用的是断点保护——主播下播、网络空闲或你按 Ctrl+C 中断时,已录制的字节会被完整保留,不会前功尽弃。录制 2 小时直播,人工录屏可能要占 10GB 手机空间,这个方案直接落到硬盘,画质更高。
场景四:备份收藏与点赞,让数据真正属于你
需求背景:刷了 300 条收藏,某天作品被作者删除或设为私密,就再也找不回来了。手机相册空间也撑不住高清视频。
配置做法:使用当前登录账号的收藏夹链接,批量同步到本地:
link: - https://www.douyin.com/user/self?showTab=favorite_collection mode: - collect number: collect: 0想看点赞过的作品?把mode换成like,配合number.like: 0全量拉取即可。注意一个细节:collect模式只支持当前登录的账号,而且必须单独使用,不能和post/like混在一个配置里。
效果对比:原来收藏了 300 条、能随时打开看的可能不到一半;现在一次性全量归档到硬盘,每条作品连同封面、音乐、作者头像、JSON 元数据一起保存,数据真正掌握在自己手里。
下载完成的文件长什么样
所有下载内容默认按"作者 → 模式 → 日期_标题_ID"三层结构组织:
Downloaded/ └── 作者名/ └── post/ └── 2024-02-07_作品标题_aweme_id/ ├── 视频.mp4 ├── 封面_cover.jpg ├── 音乐_music.mp3 ├── 元数据_data.json └── 头像_avatar.jpg在文件管理器里看,就是按日期和标题自动分类好的文件夹,一目了然:
每一条作品都是"全家桶":视频、封面、原声、作者头像、结构化元数据一应俱全。这正是它和普通在线解析站最大的区别——在线站给你一个 MP4 就结束了,而这里拿到的是一个可直接进入素材库的完整条目。
三个容易错过的高级能力
基础玩法跑通后,还有三个"用到就是赚到"的隐藏能力:
1. 视频转写(transcript):下载视频后自动调用转写接口生成文字稿,图文不生效。只需在配置里打开开关并配置 API Key,就会产出xxx.transcript.txt和xxx.transcript.json。做内容拆解、课程整理时,等于白送一份逐字稿。
2. REST API 服务模式:python run.py --serve --serve-port 8000会把整个工具变成一个本地服务,提供/api/v1/download、/api/v1/jobs/{job_id}等接口,方便集成到自己的系统里。核心实现参考 server/app.py 和 server/jobs.py。
3. 完成通知推送:支持 Bark、Telegram、Webhook 三种渠道,下载完成或失败时推送消息。批量任务挂着跑的时候,手机上就能收到结果,不用一直盯着终端。
| 能力 | 一句话价值 | 在哪开启 |
|---|---|---|
| 视频转写 | 下载即出逐字稿 | transcript.* |
| REST API | 嵌入你自己的系统 | --serve参数 |
| 完成通知 | 任务跑完自动喊你 | notifications.* |
| 浏览器兜底 | 翻页风控时人工过验证 | browser_fallback.* |
不想敲命令?桌面版 Douzy 用两张截图看懂
如果你完全不想碰命令行,项目还提供了一个基于同一套后端打造的桌面客户端Douzy(目前内测中)。粘贴链接,点击"检测链接",工具会自动识别出这是博主主页还是合集,然后选择要下载的内容类型:
下载任务完成后,在"任务中心"里能看到每一条任务的发布者、类型、数量和状态,失败的任务一目了然:
怎么选?一句话:要自动化、要定时、要嵌入脚本,用命令行版;只想"粘贴-下载-查看",用桌面版。两者共用同一套下载引擎和数据管理逻辑,迁移成本几乎为零。
藏在源码里的三重稳定保障
把稳定性设计放在最后讲,是因为它属于"加分项"而非"上手必需"。但它确实决定了批量下载能不能跑得长久:
- 双策略下载:默认走 API 高速下载,遇到接口异常自动降级为浏览器模拟模式,保证任务不中断。这就是为什么它能保持较高下载成功率。
- 失败重试 + 完整性校验:指数退避重试(1 秒、2 秒、5 秒递进),下载后用 Content-Length 比对文件完整性,不完整的自动清理并重试。
- 节奏自律:默认速率限制约 2 请求/秒、并发 5,配合 SQLite 数据库去重,既不会浪费资源,也不会对平台造成压力。核心代码可参考 core/、control/、storage/database.py。
避坑清单:五个高频问题的处理办法
1. 只能抓到 20 条作品?这是翻页风控的常见现象。确保browser_fallback.enabled: true、headless: false,浏览器弹窗出现后手动完成验证,不要急着关窗口。
2. Cookie 失效了?重新跑一次python -m tools.cookie_fetcher --config config.yml,工具会自动刷新并写回配置。
3. 想看详细日志?加参数运行:python run.py -c config.yml -v(显示 info 级别)或--show-warnings。
4. 想重新下载某个作品?去重机制靠"数据库记录 + 本地文件"双重判断,只删文件或只删数据库记录都不彻底。最省事的办法是删除对应作品的文件和数据库中的记录(参考项目 README 中的清理命令),或者直接换一个path目录。
5. 下载慢?先把thread从 5 调到 8 试一轮;如果网络受限,在配置里加proxy: "http://127.0.0.1:7890"。
合规提醒:边界在哪里
技术是无罪的,用法的边界要自己把握。douyin-downloader 设计用于个人学习、研究分析、备份自己可访问的内容等场景。请遵守以下原则:
- 不用于商业性内容分发或侵权二次传播
- 不用于大规模爬取干扰平台服务
- 不用于获取他人隐私信息
- 尊重内容创作者的权益,注明来源
- 遵守平台的使用协议与相关法律法规
项目在 README 中同样声明了免责条款,使用者需自行承担相应风险与责任。
行动清单:今天就能做完的 5 件事
- 装环境:克隆仓库、安装依赖,顺手装好 Playwright(3 分钟)
- 取 Cookie:运行
python -m tools.cookie_fetcher,登录一次(2 分钟) - 跑通首单:用最小配置下载一个你喜欢的博主的 5 条作品,确认文件"全家桶"完整(5 分钟)
- 落地一个场景:从上面的四个场景里挑一个最贴近你工作的,套用配置跑一轮
- 开启增量:在配置里打开
increase,配合系统定时任务,让素材库从此自动更新
从一个通宵手动下载,到一杯咖啡时间批量完成,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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考