Douyin Downloader:用 SQLite 与浏览器回退批量下载抖音内容
一个给开发者批量下载抖音内容的 Python 工具,用 SQLite 去重并在 post 分页受限时回退浏览器。
GitHub jiji262/douyin-downloader 更新 2026-09-14 分支 main 星标 11.4K 分叉 1.8K
Python 抖音下载 SQLite Playwright Docker macOS/Linux/Windows

🧭 决策指南

适合,如果你

  • 你要在 Python 3.8+ 中批量下载个人主页的 post、like、mix 或 music。
    README 的“Requirements”和“Feature Overview”列出 Python 3.8+ 及 `/user/{sec_uid}` 的四种 mode。
  • 你需要 SQLite 下载历史、默认 5 并发、重试和 increase.post 等磁盘增量下载。
    README 的“Feature Overview”和“Key Config Fields”分别列出 SQLite history、默认 concurrency 5、指数退避及 increase.post/like/mix/music。
  • 你要把下载器作为 REST API,以 --serve --serve-port 8000 提交任务并查询状态。
    README 的“Run as REST API server”给出该命令,并列出 `/api/v1/download`、`/api/v1/jobs` 和 `/api/v1/health`。
  • 你只需要 post 的浏览器回退,且能安装 Playwright Chromium 并手动完成 CAPTCHA。
    README 的“Install dependencies”和“FAQ”要求安装 playwright、Chromium,并说明浏览器回退对 post 已完整验证。

不适合,如果你

  • 你必须让 collect 或 collectmix 与 post、like、mix、music 同时运行。
    README 的“Current Limitations”明确要求 collect/collectmix 单独使用,不能组合其他 mode。
  • 你需要对 favorites collection 使用 increase 增量停止。
    README 的“Current Limitations”说明 increase 只适用于 post/like/mix/music,favorites collection 不支持 incremental stop。
  • 你的交付物必须是无需额外处理的可播放 HLS 直播文件。
    README 的“Current Limitations”说明 HLS 只保存 playlist,需 ffmpeg 才能得到 playable output。
  • 你要求所有直播场景都经过验证并具备稳定支持。
    README 的“Current Limitations”明确称 webcast room endpoint 未验证所有 live scenario,并标记为 experimental。

前置条件

  • Python 3.8+,支持 macOS / Linux / Windows。 / Python 3.8+, with macOS, Linux, and Windows support.
  • 先执行 README 原文命令 pip install -r requirements.txt。 / Run the README command pip install -r requirements.txt first.
  • 浏览器回退需要 playwright 和 Chromium:pip install playwright;python -m playwright install chromium。 / Browser fallback requires playwright and Chromium: pip install playwright; python -m playwright install chromium.
  • 默认配置使用 cookies 字段,README 示例包含 ttwid、odin_tt 和 passport_csrf_token。 / The sample configuration uses cookies fields including ttwid, odin_tt, and passport_csrf_token.
  • Docker 部署需要 Dockerfile,以及 config.yml 和 Downloaded 挂载路径。 / Docker deployment requires the Dockerfile plus mounted config.yml and Downloaded paths.
  • 转写需要 transcript.enabled、有效 OPENAI_API_KEY 或 transcript.api_key,模型示例为 gpt-4o-mini-transcribe。 / Transcription requires transcript.enabled and a valid OPENAI_API_KEY or transcript.api_key; the example model is gpt-4o-mini-transcribe.

第一步命令(README 原文)

pip install -r requirements.txt

要注意

  • 遇到只下载约 20 条 post 时,README 要求开启 browser_fallback.enabled、关闭 headless 并手动完成验证。
    README 的 FAQ“Why do I only get around 20 posts?”。
  • collect 与 collectmix 依赖登录 cookies 对应账号,不能用于任意账号的收藏集合。
    README 的“Current Limitations”。
  • SQLite history 不负责决定增量跳过,真正的磁盘跳过由 increase.post/like/mix/music 控制。
    README 的“Feature Overview”和“Key Config Fields”。
  • image-note 不生成转写文件,transcript 只对 video items 生效。
    README 的“Optional Feature: Video Transcription”和 FAQ“Why are transcript files not generated?”。
  • progress.quiet_logs 默认示例为 true;调试时 README 指定使用 --show-warnings 或 -v。
    README 的 Minimal Working Config 和 FAQ。

材料未说明

  • 材料没有说明抖音接口、cookies 有效期及账号风控规则。 / The materials do not specify Douyin API behavior, cookie lifetime, or account risk-control rules.
  • 材料没有给出不同规模下载任务的实际吞吐量、磁盘占用或内存需求。 / The materials provide no throughput, disk-usage, or memory figures for different download scales.
  • 材料没有说明 Docker 镜像基础版本、Playwright Chromium 版本或 ffmpeg 的安装方式。 / The materials do not specify the Docker base version, Playwright Chromium version, or how to install ffmpeg.
  • 材料没有提供 Desktop App(Douzy)章节、cookies 获取完整流程及免责声明正文。 / The provided materials omit the Desktop App (Douzy) section, the full cookie-acquisition flow, and the disclaimer text.
  • 材料没有说明 REST API 的认证、并发上限或生产环境安全配置。 / The materials do not specify REST API authentication, concurrency limits, or production security settings.
  • 材料没有给出 2026-09-14 Trending 上榜与 452 个新增星之间的具体因果证据。 / The materials provide no causal evidence linking the 2026-09-14 Trending entry to the 452 new stars.

💡 深度解析

6
不适合 我只想下载当前 Cookie 对应账户的 collect 和 collectmix,并希望与 post 一起运行、依靠 increase 增量停止;这个项目满足我的工作流吗?
适合读者: 需要归档自己登录账户中收藏合集和收藏合集内容的研究资料管理员,使用 Cookie 对应账户,并希望依靠 increase 做增量同步

不适合按这个工作流直接使用,因为收藏模式有明确的账户、组合和增量限制。

  • README 说明 collect / collectmix 只对登录 Cookie 所代表的账户生效,不能用于任意账户的收藏数据。
  • collect / collectmix 必须单独使用,不能与 postlikemixmusic 组合,因此不能和 post 放进同一次模式配置。
  • README 还明确指出 increase 适用于 post / like / mix / music,收藏模式不支持增量停止。
  • 虽然 number.collectnumber.collectmix 存在,且 0 表示不限制,但这不改变上述模式边界。

更准确地说,该项目能处理登录账户的收藏归档,但不能直接满足“混合模式 + 收藏增量同步”的要求。

  • Current Limitations:`collect / collectmix currently work for the account represented by the logged-in cookies only`
  • Current Limitations:`collect / collectmix must be used alone and cannot be combined with post / like / mix / music`
  • Current Limitations:`increase ... favorites collection modes do not support incremental stop`
  • Key Config Fields:`number.post/like/mix/music/collect/collectmix`,`0 = unlimited`
cp config.example.yml config.yml
材料未说明:README 未说明 collect 与 collectmix 在同一独立任务中的具体执行顺序;README 未说明收藏数据在 Cookie 过期或账户权限变化后的可恢复行为
不适合 我下载的内容既有视频也有图集,计划启用 OpenAI `gpt-4o-mini-transcribe` 并输出 txt 和 json;这个项目能否为两类内容都生成转写结果?
适合读者: 需要为下载后视频自动生成文字稿的 Python 内容处理工程师,使用 OpenAI 的 `gpt-4o-mini-transcribe`,同时要保留图集原文件

不适合为两类内容都生成转写,因为 README 将转写范围限定为视频,图集不会产生 transcript 文件。

  • 示例配置使用 model: gpt-4o-mini-transcribe,并支持 response_formats: ["txt", "json"]
  • README 的 Optional Feature 直接写明该行为“applies to video items only”,image-note items 不生成 transcripts。
  • 启用转写还需要有效的 OPENAI_API_KEYtranscript.api_key;FAQ 要求检查 transcript.enabled、内容是否为视频以及输出格式。
  • 转写发生在视频下载之后,因此它是后处理能力,不是图集 OCR 或图片文字识别功能。

所以它适合视频归档后的语音转写;图集只能继续保存媒体和其他元数据,README 没有提供 OCR 支持。

  • Optional Feature: `Current behavior applies to video items only (image-note items do not generate transcripts)`
  • Minimal Working Config:`model: gpt-4o-mini-transcribe`、`response_formats: ["txt", "json"]`
  • FAQ:`Why are transcript files not generated?`
  • 项目洞察 common_pitfalls:`转写仅针对视频,不适用于图集`
export OPENAI_API_KEY="sk-xxxx"
材料未说明:README 未说明单个视频转写的大小、时长或并发限制;README 未说明 OpenAI API 的具体费用和失败重试策略
不适合 我已经使用 FastAPI/Uvicorn,并希望在 Docker 中通过 REST API 提交抖音下载任务、查询任务状态;这个项目能否直接作为多用户、高可用的下载后端?
适合读者: 负责将抖音采集接入内部系统的 Python 自动化工程师,计划用 FastAPI/Uvicorn 和 Docker 提交任务、查询状态,并将下载目录挂载到宿主机

不适合直接作为多用户、高可用后端,因为 README 只展示了基础任务 API 和单机持久化,没有给出认证、权限隔离或分布式任务设计。

  • 项目可用 --serve --serve-port 8000 启动 REST 服务,接口包括提交下载、查询单个任务、列出任务和健康检查。
  • 任务列表受 max_jobsjob_ttl_seconds 限制,已完成任务默认 24 小时后清理,最大任务数默认 500;这更像受容量约束的轻量服务。
  • Docker 示例只挂载 config.ymlDownloaded,配置中的 database_path 默认是当前目录下的 SQLite 文件。
  • 项目洞察明确未体现多用户、分布式队列、对象存储、权限隔离和高可用设计。

因此它适合作为单机内部服务或自动化入口;若要承载多租户,需要额外补齐认证、任务隔离、共享存储和故障恢复。

  • Usage:`python run.py --serve --serve-port 8000`
  • REST API:`POST /api/v1/download`、`GET /api/v1/jobs/{job_id}`、`GET /api/v1/jobs`、`GET /api/v1/health`
  • REST API:`Finished jobs are pruned by TTL (default 24h) and max-jobs (default 500)`
  • Key Config Fields:`database_path` 默认是当前工作目录的 `dy_downloader.db`
  • 项目洞察 user_experience.usage_limitations:未体现多用户、分布式任务队列、对象存储、权限隔离和高可用
pip install fastapi uvicorn       # one-time optional dep
材料未说明:README 未说明 REST API 是否提供认证、授权、限流和租户隔离;README 未说明多个容器或进程同时使用 SQLite 和 Downloaded 目录时的并发行为
不适合 我计划在 Docker 中长期录制抖音直播,并要求 FLV 和 HLS 两种直播源都直接产出可播放视频;这个项目能否作为稳定的直播录制器?
适合读者: 需要录制抖音直播的 Linux 运维工程师,计划在 Docker 中保存 FLV,并处理 HLS 直播源以获得可播放文件

不适合把它当作稳定的通用直播录制器,因为直播能力在 README 中被标为实验性,且 HLS 默认只保存播放列表。

  • Current Limitations 明确写着直播录制原生保存 FLV;HLS 源只保存 playlist,需要 ffmpeg 才能得到可播放输出。
  • 同一章节说明 webcast room endpoint 没有针对每种直播场景验证,应按 experimental 处理。
  • live.* 配置支持 max_duration_secondschunk_sizeidle_timeout_seconds,说明项目提供录制控制参数,但不等于覆盖所有直播源。
  • 项目洞察还指出部分实况场景未经充分验证,FLV 与 HLS 涉及后续格式处理。

因此它可以作为受控场景下的实验性采集工具;若要求 HLS 直接可播、长期无人值守和所有直播类型稳定成功,README 依据不足。

  • Current Limitations:`Live stream recording saves FLV natively; HLS sources only save the playlist (use ffmpeg for playable output)`
  • Current Limitations:`The webcast room endpoint is not verified against every live scenario — treat as experimental`
  • Key Config Fields:`live.*` 包含 `max_duration_seconds / chunk_size / idle_timeout_seconds`
  • 项目洞察 usage_limitations:`直播功能属于实验性能力`
docker build -t douyin-downloader .
材料未说明:README 未说明 Docker 镜像是否预装 ffmpeg;README 未说明直播断线后的自动重连、文件封装和长期磁盘增长控制
视情况 我需要在 Windows 上批量下载一个创作者的 post,使用 Python 3.8+、登录 Cookie 和默认 5 个并发;如果通常只能抓到约 20 条作品,我能否用这个项目完成较完整的归档?
适合读者: 需要在 Linux、macOS 或 Windows 上批量归档抖音创作者作品,并希望用 Python 配置文件、SQLite 历史和浏览器回退处理分页限制的内容资料管理员

视情况,适合 post 批量归档,但完整性取决于浏览器回退、登录态和人工验证码处理。

  • README 明确支持 post,并提供 number.post: 0 表示不限制数量;配置还包含 thread: 5retry_times: 3 和 SQLite 历史。
  • 对约 20 条作品的问题,README 将其归因于分页风控,要求启用 browser_fallback.enabled: true、使用 headless: false,并在浏览器弹窗中完成验证且不要过早关闭。
  • 浏览器回退目前“fully validated for post”,因此这个模式比 likemixmusic 更有依据。

它不是官方导出方案;README 没有承诺在所有账号、验证码或页面变化下都能获得完整结果。

  • Minimal Working Config:`thread: 5`、`retry_times: 3`、`browser_fallback.enabled: true`、`headless: false`
  • FAQ:`Why do I only get around 20 posts?`
  • Current Limitations:`Browser fallback is fully validated for post`
  • Quick Start:`Python 3.8+`、`macOS / Linux / Windows`
pip install -r requirements.txt
材料未说明:README 未说明不同账号触发分页风控后的实际完整率;README 未说明 Cookie 的具体有效期和自动续期能力
适合 我需要通过 HTTP/HTTPS proxy 批量下载视频、图集、合集和 music,并在任务中断后避免覆盖磁盘上已有文件;这个项目能否覆盖这些下载控制需求?
适合读者: 需要在受限网络环境中归档视频、图集、合集和音乐的 Python 命令行用户,使用 HTTP/HTTPS 代理、重试和磁盘增量下载降低失败与重复文件

适合,这些需求正好落在项目的配置化下载、重试、代理和磁盘增量能力范围内。

  • mode 支持 postlikemixmusic,项目简介还明确列出视频、图集和合集。
  • proxy 字段支持可选的 HTTP/HTTPS 代理,retry_times 用于失败重试;示例配置给出 retry_times: 3
  • increase.post/like/mix/music: true 会跳过磁盘上已有的主媒体,false 才会重新下载并覆盖当前范围。
  • README 还提供下载完整性检查,项目洞察说明会依据 Content-Length 等方式校验,失败时清理不完整文件;SQLite 可记录历史,但增量跳过依赖正确配置 increase

因此它适合单机或 Docker 挂载目录的可恢复下载;但代理可用性、平台限流和媒体源是否始终存在无水印版本,README 没有保证。

  • Key Config Fields:`mode` 支持 `post`/`like`/`mix`/`music`
  • Key Config Fields:`proxy`、`database`、`thread`、`retry_times`
  • Key Config Fields:`increase... true: skip existing primary media on disk`
  • Feature Overview:`retries, SQLite deduplication, download integrity checks`
  • 项目洞察 common_pitfalls:`SQLite历史记录并不直接决定增量跳过`
python run.py -c config.yml
材料未说明:README 未说明代理认证格式、代理池或代理故障切换;README 未说明 Content-Length 缺失或媒体服务器返回分块响应时的完整性校验细节

✨ 核心亮点

  • 支持视频、图集、合集、音乐与个人主页批量下载
  • SQLite 记录下载历史,支持去重与增量下载
  • Playwright 浏览器回退可处理 post 分页限制
  • 默认并发 5、指数退避 1s/2s/5s 并校验文件完整性
  • 直播原生保存 FLV,HLS 仅保存播放列表

🔧 工程化

  • 用 run.py -c config.yml 读取配置,批量下载 post、like、mix、music。
  • 提供 --serve --serve-port 8000 REST API,含任务状态与健康检查接口。
  • 可选 OpenAI gpt-4o-mini-transcribe,为视频生成 txt 或 json 转写。

⚠️ 风险

  • collect 与 collectmix 只支持登录 cookies 对应账号,且不能和 post 等模式组合。
  • 浏览器回退仅对 post 完整验证,like、mix、music 仍依赖 API 分页。
  • webcast room endpoint 未覆盖所有直播场景,README 明确标为 experimental。
  • HLS 直播只保存 playlist,需 ffmpeg 才能得到可播放输出。

👥 适合谁?

  • 需要在 Python 3.8+ 环境批量归档 Douyin 视频、图集或合集的开发者。
  • 需要 SQLite 历史记录、increase.post 等磁盘增量跳过能力的脚本使用者。
  • 希望用 FastAPI/uvicorn 暴露下载任务接口或用 Dockerfile 部署的团队。