手把手教程:利用开源工具批量下载抖音无水印视频并保存到NAS
众所周知,抖音平台上的大部分视频都支持缓存在本地设备上。然而,部分视频创作者设置了限制,导致视频要么带有平台水印,要么根本无法直接下载。遇到这种情况该如何解决呢?本期内容将介绍一个便捷的开源项目——Douyin_TikTok_Download_API,它能够帮助您绕过这些限制。
该项目基于 PyWebIO、FastAPI 和 HTTPX 构建,是一个快速、异步的抖音/TikTok 数据获取工具。它通过网页界面提供在线批量解析功能,并能缓存无水印的视频或图片合集。此外,项目还提供了数据获取 API、iOS快捷指令无水印下载等丰富功能。您可以选择自行部署或改造该项目以实现更多用途,也可以在自己的项目中直接调用 scraper.py 脚本,或安装现有的 pip 包作为解析库来轻松获取数据。

该工具适用于多种简单场景,例如:下载原本无法保存的视频用于数据分析,或在 iOS 设备上通过快捷指令 APP 结合本项目的 API,实现应用内直接下载或读取剪贴板链接进行无水印下载。
核心功能一览
- 网页端批量解析:支持同时解析抖音与 TikTok 的混合链接。
- 在线下载:可直接通过网页下载解析后的无水印视频或图集。
- Python 包支持:项目被打包为 pip 包,方便您快速集成到自己的 Python 项目中。
- iOS 快捷指令集成:提供专用 API,便于通过 iOS 快捷指令实现快速无水印下载。
- 完善的 API 文档:附有演示(Demo)的详细接口说明。
- 丰富的平台接口:支持抖音网页版、TikTok 网页版以及哔哩哔哩网页版的数据获取。
基本上,它能满足您对抖音/TikTok 内容获取的大部分需求。

部署前的必要准备
在开始部署容器之前,需要完成以下几项关键的准备工作。
获取目标平台的 API 凭证(Cookie)
此步骤至关重要,我们必须获取有效的 Cookie。
此处以抖音为例进行说明。首先,打开一个浏览器的无痕模式窗口,此操作无需登录任何抖音账号。

随意点击进入一位创作者的个人主页。接着,打开浏览器的开发者工具(按 F12 键,Mac 用户请按 Command + Option + I)。切换到 “Network”(网络)标签页,在筛选类型中选择 “Fetch/XHR”。然后,在页面上点击或滑动视频以触发网络请求。在出现的请求中,找到 “Request Headers”(请求头)部分,复制其中 “Cookie” 项的完整内容。具体操作可参考下图。

继续向下浏览,您还会看到 “User-Agent” 字段,其后的内容也可以一并复制备用。一个典型的示例如下:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
请注意:根据项目 Issues 中的反馈,IP 地址不会被永久封禁。即使因短时间内发送大量请求而触发风控机制,大约等待两个小时即可自动解封。
准备项目配置文件
访问该开源项目的代码仓库页面。在文件搜索框中输入 config 进行查找,您将找到四类针对不同平台的 API 配置文件,以及一个全局配置文件。请将这五个配置文件下载到本地。为了避免潜在问题,请您自行搜索项目地址并下载,此处不便提供直接链接。

接下来,在您的 NAS 上创建用于 Docker 挂载的目录。以威联通(QNAP)NAS 为例,笔者创建的路径是 /share/Container/douyin_tiktok_api_data。您可以将下载的五个配置文件重命名(便于识别)后,放置于此目录中。

编辑配置文件内容
使用 NAS 自带的文本编辑器(或任何您熟悉的编辑器)打开与抖音相关的那个配置文件。将上一步骤中获取的 Cookie 和 User-Agent 内容,替换到配置文件的对应位置。

正如配置文件内的注释所说,不更换 User-Agent 也可能正常使用,但我们进行更换主要是为了增强请求的隐蔽性,以通过某些校验机制。修改完成后,请务必保存文件。
详细部署流程
以下以威联通 NAS 为例,介绍如何使用 Docker Compose 方式来部署该服务。
部署所需的 Docker Compose 配置文件示例如下:
version: '3.8' # 若使用最新版 Docker Compose,可删除此行
services:
douyin_tiktok_api:
image: evil0ctal/douyin_tiktok_download_api
container_name: douyin_tiktok_api
ports:
- "8355:80" # 冒号左侧的宿主机端口号可自行修改
# 冒号左侧的宿主机文件目录路径请根据您的实际情况修改
# 配置文件的名称需与上文您重命名后的文件对应起来
volumes:
- /share/Container/douyin_tiktok_api_data/config.douyin.yaml:/app/crawlers/douyin/web/config.yaml
- /share/Container/douyin_tiktok_api_data/config.tiktok_web.yaml:/app/crawlers/tiktok/web/config.yaml
- /share/Container/douyin_tiktok_api_data/config.tiktok_app.yaml:/app/crawlers/tiktok/app/config.yaml
- /share/Container/douyin_tiktok_api_data/config.bilibili.yaml:/app/crawlers/bilibili/web/config.yaml
- /share/Container/douyin_tiktok_api_data/config.global.yaml:/app/config.yaml
restart: always
补充说明:在后续测试中,哔哩哔哩(B站)的相关接口可能存在问题。但鉴于 B 站相关的下载工具非常多,笔者此前也分享过多个此类工具,因此您也可以选择在配置中删除 B 站的相关映射行。

工具使用演示
这里简要介绍一下该工具的基本使用方法。
部署成功后,在浏览器地址栏输入 您的NAS_IP地址:8355 即可访问。初始界面提供了多种功能选项,这里我们选择“批量解析视频”功能。界面左下角的小人是项目作者添加的趣味元素,感兴趣的朋友可以自行探索。

页面上有明确提示:该功能支持批量解析视频链接,但不支持批量解析整个创作者主页。批量输入的方式是,每行放置一个视频链接或分享口令,输入一个后按回车键再输入下一个,如此反复操作。

如上图所示,它支持多种格式的链接混合输入,包括 APP 短网址、分享口令、网页版长网址以及 APP 发现页网址等。
笔者尝试解析了一个原本无法直接下载的视频,点击提交后,解析结果页面如下所示。页面展示了视频的简略信息,并允许选择下载不同清晰度的版本。若想查看完整的解析数据,可以点击「API链接-点击查看」,所有获取到的元数据都将在此处完整呈现。

对于其他平台(如 TikTok),操作方法也类似:获取对应平台的 Cookie -> 修改并保存其配置文件 -> 重启 Docker 容器 -> 粘贴地址 -> 解析下载。
此外,在访问地址后加上 /docs 路径(例如 NAS_IP:8355/docs),即可浏览项目自带的交互式 API 文档,其中列出的所有接口都可以直接测试使用,建议大家尝试一番。

由于篇幅所限,本文未能详尽介绍该项目的所有功能。如果您对此感兴趣,建议前往该开源项目的原始仓库页面,以探索更多高级用法和细节。