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 去重与失败重试。它能完成"下完一个主页"这类可以反复执行的任务,而不只是保存眼前这一条。适用边界先说清楚:直播录制属于实验性功能;收藏夹采集模式(collect / collectmix)只对当前登录的账号生效,且必须单独配置,不能与 post、like、mix、music 混用。
前置检查:Python 环境与登录态
安装依赖
需要 Python 3.9 以上版本,依赖很少,装完即可运行:
git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt看到 "Successfully installed" 字样就表示环境就绪。
获取登录态 Cookie
批量任务能不能稳定翻页,关键在 Cookie 这组凭据上。它是抖音用来识别请求身份与登录状态的字段,失效后请求会被限流,或者只返回很少的作品。
自动获取:先装 Playwright,再运行抓取工具。它会弹出一个浏览器窗口,你在窗口里登录抖音,回到终端按回车,Cookie 会直接写进配置文件的cookies块:
pip install playwright python -m playwright install chromium python -m tools.cookie_fetcher --config config.yml手动获取:在浏览器里登录抖音,从开发者工具复制 Cookie,粘贴到config.yml的cookies字段即可。
自动抓取与 Cookie 的管理逻辑都在 tools/cookie_fetcher.py 和 auth/ 里,想看实现可以直接翻源码。
最小可运行路径:从配置到下载完成
复制一份示例配置,只改几个字段:
cp config.example.yml config.ymlconfig.yml里最关键的是这几项:
link: - https://www.douyin.com/user/MS4wLjAB... path: ./Downloaded/ mode: - post # post 作品 / like 点赞 / mix 合集 / music 音乐 number: post: 0 # 0 表示全部,也可以写 50 只取前 50 条 thread: 5 database: true cookies: ttwid: YOUR_TTWIDlink是主页链接,mode决定采集什么,number控制数量上限,thread是并发线程数。
运行入口是run.py:
python run.py -c config.yml运行后程序先给出作品总数,再按线程数逐条下载,进度条实时刷新,已经下过的作品直接标记跳过。结尾汇总成功、失败与跳过数量,失败项可以从日志里单独拎出来重跑。
下载完成后目录按Downloaded/作者名/post/日期_标题_aweme_id/组织,视频、封面、原声与 JSON 元数据都放在同一个作品文件夹里。只想留视频本体的话,把music、cover都设为 false,目录会干净很多。画质默认取最高转码档,想探测上传原片可以把video_quality改为original。
常用增强:按任务改配置
多主页批量归档
把多个主页链接都写进link列表,一次运行遍历全部创作者:
link: - https://www.douyin.com/user/MS4wLjAB...A - https://www.douyin.com/user/MS4wLjAB...B number: post: 0每个创作者各自一个目录,互不干扰。mode也可以同时列出post、like、mix、music,同一作品跨模式不会重复下载。
让新发布的作品自动补下
持续跟踪固定创作者的素材库,把增量开关打开:
increase: post: true database: true跳过与否以磁盘上主文件是否存在为准,SQLite 数据库负责记录下载历史,方便回查进度。把这份配置挂进 crontab 定期执行,每次只会补下新发布的作品,旧文件保持不动。
获取直播间流并录制
link里填直播间地址即可触发录制:
link: - https://live.douyin.com/123456789 live: max_duration_seconds: 0 # 0 表示录到主播下播FLV 文件与*_room.json房间元数据会保存在Downloaded/{作者}/live/下;主播下播、断流或手动停止时,已录到的分片会合并保留。注意 HLS 源目前只保存播放列表,想要可播放文件需要再交给 ffmpeg 处理一次。
故障定位:现象—原因—处理
大量请求报错、提示未登录。最常见原因是 Cookie 过期。重新运行python -m tools.cookie_fetcher --config config.yml,或手动更新cookies块,再重跑任务。
批量任务只拉到 20 条左右就停了。这是翻页被风控截断的典型表现。确认browser_fallback.enabled为 true 且headless为 false,程序会弹出真实浏览器窗口,在窗口里手动完成验证后继续采集,验证期间别提前关窗。
批量任务频繁中断。多半是触发限流。把thread降到 3 左右,保持retry_times: 3自动重试;高峰时段并发请求更容易被拦,改到凌晨或清晨执行会更稳。
想让某个作品重新下载。需要同时清理本地文件和数据库记录:
rm -rf Downloaded/作者名/post/*_<aweme_id>/ sqlite3 dy_downloader.db "DELETE FROM aweme WHERE aweme_id = '<aweme_id>';"只删文件会触发补下,只删数据库记录则会跳过,两者要一起处理。
延伸资料
- 使用说明:README.md、README.zh-CN.md
- 带注释的配置样例(字段含义以此为准):config.example.yml
- 架构说明:PROJECT_SUMMARY.md
- 核心下载器:core/
- 配置加载逻辑:config/config_loader.py
- 按时间范围提前停止的设计文档:docs/superpowers/specs/
【免费下载链接】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),仅供参考