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 是一个开源的抖音下载器:无水印下载单条视频、图文、合集,支持主页作品批量收集和抖音音频提取,全程由一个 YAML 配置文件驱动。适合需要归档作品、收集背景音乐素材的用户。
项目速览
这是一个 Python CLI 工具,同仓库还提供一个基于同一后端的桌面版 Douzy。最大亮点是工程化做得比较完整:Rich 进度条、指数退避重试、SQLite 加本地文件双重去重(增量下载可跳过已下载内容),以及 API 翻页受限时启动真实浏览器、人工过验证码的兜底机制(浏览器兜底配置)。
两个前提要说清楚:需要一份已登录抖音账号的 Cookie(含 msToken、ttwid 等字段);只支持国内版抖音接口,海外版 TikTok 不在覆盖范围内,直播录制功能标注为实验性。
跑通流程:从 clone 到首次抖音批量下载
把代码拿下来装好依赖,整个过程没有编译步骤:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt pip install playwright && python -m playwright install chromium装 playwright 是为了 Cookie 自动获取这一步。运行python -m tools.cookie_fetcher --config config.yml会弹出浏览器,登录抖音后回到终端按 Enter,Cookie 会自动写回配置文件,不需要手动复制粘贴。
配好之后复制config.example.yml为config.yml,改两个地方就能跑:link 填作品或主页地址,mode/number 控制下载什么、下载多少。下面是最简可用配置:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx path: ./Downloaded/ mode: - post number: post: 20 thread: 3执行python run.py -c config.yml,命令行参数-u、-t、-p可以覆盖文件里的值。文件默认按"作者名/模式/日期_标题_aweme_id"建目录,进度条实时显示,跑完有成功失败统计。不想碰命令行的话,桌面版 Douzy 粘链接即可自动识别类型并一键下载。
抖音音频提取:收集某位创作者的全部原声
如果你正在做"收集某创作者全部背景音乐"这类任务,把配置改成这样:
link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx mode: - music number: music: 0 music: truenumber.music填 0 表示全量;music: true会把每个作品的原声 mp3 保存到该作品目录里。文件名走{date}_{title}_{id}模板,同一份 JSON 元数据里带作者、发布时间、播放量,方便后续检索。请求频率由rate_limit控制(默认 2 次/秒),我一般设 1 给自己留点风控余量。
批量归档与直播录制
如果你有多个创作者要处理,link 里直接放多个主页 URL,把json: true打开,媒体文件旁会多出一份作品元数据;保持database: true,第二次运行时 去重数据库 加本地文件名扫描会自动跳过已下载的作品,等于天然的增量更新。想给博主改名后不合并目录,把author_dir改成nickname_uid。
录制直播则是把 link 指向https://live.douyin.com/{room_id},live.max_duration_seconds填 0 表示录到主播下播。FLV 落在Downloaded/{作者}/live/下并附带_room.json元数据快照;Ctrl+C 中断或主播下播时,已录制的字节会保留。注意 HLS 源只保存 playlist 文件,需要自己用 ffmpeg 后处理,且 webcast 直播接口 覆盖不全场景,属于实验性功能。
douyin-downloader 实际表现与已知限制
| 任务量级 | 耗时量级(thread=3,家庭宽带) |
|---|---|
| 单条视频 | 几秒到 1 分钟,取决于时长和码率 |
| 100 条 post 作品(720p) | 约 12~15 分钟,主要受 rate_limit 制约 |
| 100 条音频原声 | 约 3~5 分钟,文件小、下载本身很快 |
实测 100 条 post 作品、thread=3 的情况下,瓶颈基本不在带宽而在请求频率,把 rate_limit 往上抬收益很小,反而更容易触发风控。
已知限制有两条值得先知道:一是 Cookie 有有效期(通常数周量级),过期后表现为全部请求登录失效,重跑一次 Cookie 脚本即可;二是 API 翻页受限时,浏览器兜底目前只对post模式做了完整验证,like/mix/music模式主要依赖 API 正常分页,被风控时可能只抓到前几页。
踩坑速查
抓作品只能看到 20 条
- 现象:主页采集停在 20 条左右,不再翻页也不报错
- 原因:API 翻页触发平台风控,被限制在首页
- 解法:保持
browser_fallback.enabled: true、headless: false,浏览器弹出后手动完成验证再让它继续
所有请求提示登录失效
- 现象:进度条不动,日志里全是登录过期或空数据
- 原因:配置里的 Cookie 过期了
- 解法:重跑
python -m tools.cookie_fetcher --config config.yml,几分钟内拿到新的
下载中断留下半截文件
- 现象:个别 mp4 无法播放,体积明显小于源视频
- 原因:网络中断;程序会做 Content-Length 校验,不完整文件自动清理并重试
- 解法:
retry_times: 3的自动重试通常能覆盖;仍失败就直接重跑任务,增量模式会跳过已完成的部分
并发拉满反而失败率升高
- 现象:thread 设到 10,失败和重试比 3 并发时多得多
- 原因:并发过高触发速率限制,请求被降权或拒绝
- 解法:thread 保持 3~5,
rate_limit设 1~2,配合指数退避重试已经足够稳
douyin-downloader 的核心是"一个配置文件 + 一条命令",上手成本很低。建议先用单条视频跑通,再开批量任务,thread 别超过 5;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),仅供参考