抖音无水印下载工具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值得花十分钟了解一下。这是一款开源的抖音无水印下载工具,既能下载单个视频,也能整页批量下载,还内置了去重、重试、进度展示和浏览器兜底等实用机制,对新手和想要自动化收集素材的人都很友好。
一个真实场景:为什么我会专门写这份教程
我的一位朋友是做短视频二创的,他的日常工作里有一件很磨人的事:每周要从十几个同领域博主的账号里挑素材,手动录屏、去水印、再转码,一个下午就没了。
后来他换成了 douyin-downloader,流程变成这样:把博主主页链接填进配置文件,跑一次命令,电脑自动把该主页下的作品按顺序下载下来,无水印、按作者和日期归档,还附带了封面、音乐和元数据 JSON。他只需要在下载完以后挑片就行。
这篇文章就按"从零装好 → 完成第一个下载 → 按自己的习惯定制 → 应对各种翻车"这条线来写。你跟着走一遍,基本就能上手。
装好这个工具:三个命令完成环境准备
先明确一下环境要求:需要 Python 3.8 及以上版本,Windows、macOS、Linux 都支持。以下是完整安装步骤,每一步我都解释一下它在做什么。
# 第一步:把项目代码拉到本地 git clone https://gitcode.com/GitHub_Trending/do/douyin-downloader克隆下来的文件夹里包含源码、配置示例和文档,douyin-downloader/就是主项目目录。
# 第二步:进入项目目录并安装依赖 cd douyin-downloader pip install -r requirements.txt这一步会装上 HTTP 客户端、进度条渲染等运行所需的库。装完后可以先跑一下版本号确认没装错:
python run.py --version能看到版本号输出,就说明基础环境没问题了。如果你之后想用到"自动获取 Cookie"和"浏览器兜底"这两项功能,还需要额外装一个浏览器自动化组件:
pip install playwright python -m playwright install chromium先别急着把这步跳过去。不装 playwright 不影响基本下载,但少了它,后面 Cookie 获取和翻页兜底就体验不到,我们下一节会说清楚原因。
Cookie 配置是绕不开的一关:三种填法任选
抖音的接口要求带登录态才能访问,所以配置 Cookie 是使用前提。这一步不复杂,但容易让人懵,我拆开讲。
方法一:自动获取(最推荐)
# 复制一份配置示例 cp config.example.yml config.yml # 自动获取并写入 Cookie python -m tools.cookie_fetcher --config config.yml运行第二条命令后,程序会打开一个浏览器窗口,你用抖音 App 扫码登录,登录完成后回到终端按一下回车,程序会把拿到的 Cookie 自动写进配置。全程不用手动复制粘贴,是最省心的方式(前提是你已经装好了 playwright)。
方法二:手动粘贴整串 Cookie
如果你已经通过浏览器登录过抖音,可以在开发者工具里复制整条 Cookie 字符串,直接填到配置里:
cookies: "msToken=YOUR_MS_TOKEN; ttwid=YOUR_TTWID; odin_tt=YOUR_ODIN_TT;"方法三:按键值对填写
适合只想填必要字段的情况,把对应的 key 和 value 一一列出来即可:
cookies: msToken: YOUR_MS_TOKEN ttwid: YOUR_TTWID odin_tt: YOUR_ODIN_TT passport_csrf_token: YOUR_CSRF_TOKEN sid_guard: YOUR_SID_GUARD三种方式优先级从上到下,配置里同时存在时以更靠前的方式为准。说白了,方法一适合绝大多数人,方法二和三适合你对 Cookie 字段比较熟悉的情况。
完成第一个下载任务:最小配置与常用命令
现在可以下载第一个视频了。把config.yml里link下的示例链接换成你自己的目标链接,它可以是一条视频链接、一个合集链接,也可以是用户主页链接:
link: - https://v.douyin.com/xxxxxxx/ # 短链会自动解析 - https://www.douyin.com/user/MS4wLjAB... # 主页链接用于批量 path: ./Downloaded/ mode: - post number: post: 50然后执行:
python run.py -c config.yml如果不想改配置文件,也可以直接用命令行参数传链接和保存路径,适合临时下载单个视频:
python run.py -u "https://v.douyin.com/xxxxxxx/" -p ./Downloaded命令行下所有常用参数我整理成了表格,方便你快速查阅:
| 参数 | 作用 | 示例 |
|---|---|---|
-u, --url | 指定下载链接,可多次使用 | -u 链接A -u 链接B |
-c, --config | 指定配置文件 | -c config.yml |
-p, --path | 指定保存目录 | -p ./Downloaded/ |
-t, --thread | 设置并发下载线程数 | -t 5 |
--hot-board N | 拉取抖音热搜榜并导出 JSONL | --hot-board 30 |
--search 关键词 | 按关键词搜索作品并导出 JSONL | --search "猫咪" --search-max 100 |
--serve | 以 REST API 服务模式运行 | --serve --serve-port 8000 |
下载开始后,终端会实时显示进度条和每个任务的完成状态,如图:
下载运行中的实时进度界面:每个任务独立显示进度与耗时。
下载完之后文件去了哪:默认目录结构一览
下载完成后,文件不是堆在一团的,而是按"作者 → 类型 → 作品"三层组织。默认结构大致是这样:
Downloaded/ └── 作者昵称/ └── post/ # 发布作品(like/mix/music 依此类推) └── 2024-02-07_作品标题_aweme_id/ ├── video.mp4 # 无水印视频 ├── cover.jpg # 视频封面 ├── music.mp3 # 背景音乐 └── data.json # 元数据信息每个作品单独一个文件夹,命名是"日期_标题_ID"的组合,方便按时间排序和查重。实际目录效果可以参考这张图:
下载完成后的目录:文件夹按日期命名,内容一目了然。
这里有个值得注意的配置项author_dir,它控制作者目录层的命名方式:
nickname(默认):直接用作者昵称,最直观,但作者改昵称会导致同一账号分裂成两个目录;sec_uid:用作者唯一 ID,稳定但不够直观;nickname_uid:昵称加 ID,既直观又唯一,重度用户推荐。
如果你同时下载多个博主的内容,建议提前想好用哪种,因为切换只影响后续下载,不会帮你迁移已有目录。
从"能下载"到"按我想要的方式下载":进阶配置清单
基础下载跑通之后,接下来这几个配置项是性价比最高的进阶玩法,按需求取舍即可。
增量下载与时间过滤:只拿新增内容
如果你长期跟踪某位博主的更新,每次全量下载很浪费时间和流量。打开增量模式后,程序会结合 SQLite 数据库记录,只下载没下载过的新作品:
increase: post: true like: false mix: true music: false database: true配合时间范围过滤,还能把历史内容一次补齐:
start_time: "2024-01-01" end_time: "2024-12-31"评论采集:为内容分析攒数据
需要分析视频评论区?启用后每个作品会额外生成一份*_comments.json:
comments: enabled: true include_replies: false max_comments: 500 page_size: 20热搜榜与关键词搜索:抓趋势数据
这两个功能不需要进入下载流程,跑完直接输出 JSONL 文件,方便后续用脚本分析:
# 拉取抖音热搜榜前 30 条 python run.py --hot-board 30 -p ./Downloaded # 按关键词搜索作品,最多 100 条 python run.py --search "猫咪" --search-max 100 -p ./Downloaded直播录制与下载完成通知
把link指向直播间地址(live.douyin.com/{room_id}),工具会以 FLV/HLS 方式录制直播流,主播下播后已录数据会保留下来:
live: max_duration_seconds: 0 # 0 表示录到主播下播 idle_timeout_seconds: 30下载完成后想第一时间知道结果,可以配置通知推送,支持 Bark、Telegram 和 Webhook 三种渠道:
notifications: enabled: true on_success: true on_failure: true providers: - type: bark url: https://api.day.app/YOUR_DEVICE_KEY遇到问题先看这里:5 个高频坑的解决办法
坑 1:明明下载过,为什么又下了一遍?
先检查database: true是否开启。这个项目的去重是"数据库 + 本地文件"双重机制,只有两边都开启才最稳妥。另外注意命名模板里至少要包含{id},否则不同作品可能因为同名被覆盖:
filename_template: "{date}_{title}_{id}" folder_template: "{date}_{title}_{id}"坑 2:只能抓到前 20 条作品,翻页就停了?
这多半是触发了平台的翻页风控。解决办法是启用浏览器兜底,让程序在 API 翻页受限时切到浏览器继续滚动加载:
browser_fallback: enabled: true headless: false max_scrolls: 240注意headless要设成false,这样浏览器窗口会弹出来,如果出现验证码,你手动点一下通过即可,不要提前关掉窗口。
坑 3:下载速度很慢?
优先检查两点:网络是否稳定、并发数是否合适。默认线程数是 5,如果你的网络带宽一般,可以适当调低:
thread: 3 retry_times: 3 rate_limit: 2rate_limit是每秒请求数上限,调低它能在一定程度上降低被风控的概率,代价是速度变慢,需要根据自己情况权衡。
坑 4:提示登录态失效 / Cookie 过期?
重新跑一次自动获取 Cookie 的命令即可:
python -m tools.cookie_fetcher --config config.yml另外程序本身也内置了自动重登机制:检测到LoginRequiredError时,会尝试打开浏览器重新登录并重试一次,不用每次都手动干预。
坑 5:文件整理得乱七八糟,找不到想要的内容?
检查两点:folderstyle: true是否开启,以及author_dir的命名方式是否符合你的习惯。另外在批量下载时,用number控制每种模式的下载上限,避免一次拉太多:
number: post: 50 like: 0 # 0 表示不限制 mix: 20关于使用边界:几点务实提醒
工具本身很强大,但请把它用在合理范围内。抖音平台有明确的使用规范,建议只下载自己拥有版权、或者用于个人学习研究的内容,不要拿去做侵权搬运或商业传播。批量下载时也请控制节奏,别给服务器造成过大压力。
下一步,你可以做什么
到这一步,你已经掌握了 douyin-downloader 的核心用法:装环境、配 Cookie、跑第一个任务、按需定制、处理常见报错。接下来可以按自己的需求选一条路深入:
- 想更省心 → 试试 REST API 服务模式(
python run.py --serve),把下载能力包装成接口,方便接入自己的自动化流程; - 想追热点 → 用
--hot-board和--search定期抓取热搜与关键词数据,建一份自己的内容趋势记录; - 想做备份 → 开启增量下载 + SQLite 去重,把关注的博主纳入定期备份计划。
如果你是从零开始的新手,我建议先只改link、path、mode三个字段跑通一次,再逐步打开其他功能。改一处配置、跑一次、看一次结果,比一次性堆满所有参数要稳得多。
【免费下载链接】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),仅供参考