抖音批量下载实战指南:3条命令装好跑通 douyin-downloader
2026/9/15 16:34:55 网站建设 项目流程

抖音批量下载实战指南:3条命令装好跑通 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

如果你曾一条条点开抖音视频、等加载、长按保存,你就懂这种痛:几百个 mp4 堆在磁盘里,带水印、没命名、查不到。douyin-downloader 是一款免费开源(MIT 协议)的抖音去水印批量下载工具:粘贴链接即可自动识别视频、图文、合集、音乐、作者主页、直播等 7 种内容,无水印源加最高码率自动挑选,3 条命令就能装好并产出第一份结果。

先跑起来:3 条命令 + 1 份配置拿到第一批产物

先给结论:只要机器上有 Python 3.8 以上(macOS、Linux、Windows 都支持),整个流程就是"克隆 → 装依赖 → 取 Cookie → 跑",顺利的话 5 分钟内能看到第一批文件落盘。

第一步:安装依赖

做什么:克隆仓库并安装核心依赖。

git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader cd douyin-downloader pip install -r requirements.txt

做完你应看到:pip 正常结束、无报错。如果你还想用"自动取 Cookie"和"浏览器兜底"(强烈建议,后文会讲它为什么关键),再补两条:

pip install playwright python -m playwright install chromium

第二步:做最小配置

做什么:复制一份配置模板,用工具自动拿到 Cookie,只改 4 个字段。

cp config.example.yml config.yml python -m tools.cookie_fetcher --config config.yml

运行cookie_fetcher会弹出一个浏览器,扫码或账号登录抖音,然后回到终端按 Enter——程序会把拿到的 Cookie 直接写进config.yml,省得手动车到开发者工具里复制字符串。

打开config.yml,把这几个字段改成你自己的(其余保持默认即可):

link: - https://www.douyin.com/user/MS4wLjABAAAAxxxx # 换成你要下载的作者主页链接 path: ./Downloaded/ # 保存目录 mode: - post # 下载作者发布作品 number: post: 10 # 首次体验先下 10 条,0 表示不限

第三步:跑起来

python run.py -c config.yml

做完你应看到这些产物:

  • Downloaded/作者名/post/下,每条视频一个独立子目录,命名是发布日期_标题_作品ID(日期取的是作品发布时间,不是你下载的时间,回看素材时不会串)
  • 子目录里是无水印 mp4;开启封面/音乐/头像/JSON 开关后,对应附属文件也会一起落下
  • 根目录多出一份download_manifest.jsonl,每个作品一行,含日期、作品 ID、标签、文件路径,相当于自带台账
  • 默认database: true,会生成dy_downloader.db记录全部下载历史

前后对比很直观:手工下 100 个视频,意味着 100 次"打开 + 等加载 + 长按 + 改名",还不算水印;这里是一条命令,默认 5 线程并发(thread: 5),你只管看进度条,文件自动按"作者 → 模式 → 作品"三层目录归位。

它凭什么:三层流水线和容错设计

第一层:链接识别,只管粘贴

链接解析器(core/url_parser.py)按域名 + 路径判断你给的是什么:/video/是单视频,/note//gallery/是图文,/collection//mix/是合集,/music/是原声音乐,/user/是作者主页,live.douyin.com是直播间,/vsdetail/是直播回放,共 7 类;好友分享卡片里那种v.douyin.com/xxx短链会先展开再归类。你不需要自己判断链接类型。

第二层:拉取 → 筛选 → 并发下载

主流程固定 7 步:读配置(优先级为命令行 > 环境变量 > 配置文件 > 默认值)→ 初始化 Cookie 与 API 客户端 → 解析链接类型 → 拉取作品数据并套用时间、数量筛选 → 并发下载媒体 → 写可选的 JSON 元数据 → 追加清单并写库。

两个最常用的筛选开关:

  • start_time/end_time:只取时间窗内的作品,格式YYYY-MM-DD
  • number.post等:按模式限量,0 为不限;post(发布)、like(点赞)、mix(合集)、music(音乐)四种模式可同时开启,同一个作品(相同作品 ID)跨模式自动去重,不会下两遍

第三层:去重与容错,决定它能不能长跑

双重去重:SQLite 的aweme表记录下载历史,程序还会扫描本地文件名里的作品 ID,两道关卡共同决定"跳过还是下"。规则有点反直觉,记一次就懂:只删本地文件、保留数据库 → 视为"下载过但文件丢了",会重新下载;只删数据库、保留文件 → 按文件名判定已存在,不会重下。想强制重下,把对应模式的increase设为 false 覆盖即可。

容错四道防线

  1. 重试退避:请求失败后按 1s、2s、5s 间隔重试,默认retry_times: 3,也就是最多 4 次尝试,实现见 control/retry_handler.py
  2. 限速保护:默认rate_limit: 2请求/秒,主动控速,降低触发风控的概率
  3. 完整性校验:下载字节与 Content-Length 比对,不完整的文件自动清理后重试,不会给你留半截 mp4
  4. 浏览器兜底(最后一条命):API 翻页被风控限制时(典型症状就是"只能抓到 20 条"),自动启动 Chromium 滚动采集作品列表,headless: false允许你在弹窗里手动过验证码,最长等 600 秒、最多滚动 240 轮

画质上,源选择默认"无水印源 +video.bit_rate阶梯里最高码率";想要上传原片就设video_quality: original,它会先探测一次,原片比最高转码档还小则自动退回转码档,不会白付探测成本。

进阶玩法:三个值得开的开关

🔍 热搜榜与关键词搜索:先捞"鱼",再下载

能力一句话:不用手动攒链接,直接把抖音热搜榜或关键词搜索结果导出成 JSONL,再挑感兴趣的喂给下载器。

python run.py --hot-board 30 -p ./Downloaded # 热搜榜前 30,输出 hot_board/{时间戳}.jsonl python run.py --search "猫咪" --search-max 100 -p ./Downloaded # 关键词搜索,默认上限 50 条

适合谁:做话题监控、研究采样的人。产出的 JSONL 一行一个作品,可以直接筛、可以存证,下载只是下一步。

💬 按作品批量采集评论

能力一句话:下视频的同时把该作品的评论抓下来,在媒体文件旁生成一份结构化 JSON。

comments: enabled: true include_replies: false # 改 true 会额外拉每条评论的二级回复,请求量变多 max_comments: 500 # 0 表示不限

适合谁:舆情分析、学术采样。对比一下:500 个作品的评论靠网页人工收集基本不现实,也拿不到结构化数据;开了这个开关,每个作品自动多一个*_comments.json,字段齐全可直接进分析流程。

📡 把下载器变成 REST 服务

能力一句话:加一个--serve参数,它就从命令行工具变成可被调用的下载服务:提交链接 → 拿任务 ID → 轮询进度。

pip install fastapi uvicorn python run.py --serve --serve-port 8000

POST /api/v1/download提交{"url": "..."}GET /api/v1/jobs/{job_id}查状态;完成任务按"保留 24 小时、最多 500 条"自动清理,进行中的任务永不裁剪。适合谁:想把抖音批量下载能力嵌进自有系统、定时任务或内部平台的开发者。

另外两个值得知道的能力:直播链接(live.douyin.com/{房间号})可以直接录制成 FLV,主播下播或你 Ctrl+C 中断时,已录到的字节都会保留;登录账号自己的收藏夹、收藏合集(collect/collectmix模式)也能整体导出,配置示例 里有完整字段说明。

遇到问题:5 个高频坑的定位思路

1. 只能抓到 20 条作品?这是翻页风控的经典症状,不是你的 bug。确认配置里browser_fallback.enabled: trueheadless: false,浏览器弹窗出现后手动完成验证,并且别急着关窗口——兜底最多会等 600 秒。

2. Cookie 过期、登录态数据拉不到?重跑取 Cookie 命令即可,登录后按 Enter 自动回写配置:

python -m tools.cookie_fetcher --config config.yml

3. 速度慢、失败多?先查网络,再调thread(默认 5,带宽富余可以试 8)。环境有 IP 限制就在proxy里填代理(API 请求和媒体下载都会走)。别盲目拉高并发:默认 2 请求/秒的限速本身就是风控保护,失败率反而升高的时候,通常说明你跑得太急了。

4. 为什么"删了文件会重下,删了库却不重下"?不是 bug,是去重规则:文件缺失但库里有记录 → 重下;库记录没了但文件还在 → 跳过。想完整重下某个作者,要把本地目录和库里该作者记录一起清掉,README 里给了对应的 sqlite3 语句。

5. 转写文件为什么没生成?按顺序查四点:transcript.enabled是否为true;下载的是否视频(图文不生成转写);OPENAI_API_KEY是否有效;response_formats是否包含txtjson。另外转写默认先用 ffmpeg 抽出单声道 mp3 再上传,绕开了 OpenAI 单文件 25MiB 的上限,视频很大也不用担心。

往后看

同一套后端还在内测一个桌面客户端Douzy:抖音 / TikTok / YouTube 三平台工作台,粘贴链接即下,任务中心能看每个任务的成败数量、一键重试失败项并直接打开输出目录,下载内容统一进本地作品档案。

任务中心把"下载了什么、成没成、失败项在哪"摊在一张列表里,对长跑批量任务很实用。

仓库配有自动化 CI(测试 + lint),tests/目录下有 60 多个测试文件,MIT 协议;遇到 bug 或有新需求,提 issue 或 PR 是最直接的参与方式。

从今天开始:5 件可执行的事

  1. 跑通环境git clone+pip install -r requirements.txt,先用单个视频链接下载一条,确认整条链路通
  2. 固化配置cp config.example.yml config.yml,用cookie_fetcher完成 Cookie,按自己的需求改linkmodenumber
  3. 开增量increase默认开启,首次全量之后,后续运行只会补下新增作品,适合长期跟踪某个作者
  4. 加数据层:研究场景打开comments评论采集,配合download_manifest.jsonl,媒体和元数据一起入库
  5. 管理预期:只抓 20 条就先走浏览器兜底过验证;平台接口或规则变化导致功能失效,属于正常技术风险,留意仓库更新即可

合规提醒:本工具建议仅用于个人学习、研究与管理自己账号的数据;请遵守抖音平台规则与作品版权,勿将下载内容用于侵权或其他违法用途。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询