抖音无水印视频下载器。支持单个/批量下载抖音视频(去除水印)。 当用户提到"下载抖音"、"抖音无水印"、"下载视频"、"抖音链接下载"时触发。 原生Python实现,无需GUI。
抖音无水印视频下载器 Skill是一项面向实际任务的技能,主要用于技术约束说明;本 Skill 的抖音视频解析依赖脚本内实现的专用 HTTP 请求链路(重定向跟踪 → _ROUTER_DATA 数据提取),该流程针对抖音分享页结构定制,通用网页抓取工具无法等价替代;
它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
本 Skill 的抖音视频解析依赖脚本内实现的专用 HTTP 请求链路(重定向跟踪 → _ROUTER_DATA 数据提取),该流程针对抖音分享页结构定制,通用网页抓取工具无法等价替代。
若脚本执行失败,请将错误信息反馈给用户协助排查。
douyin-downloader-skill
├── SKILL.md ← 本文件(Skill说明 + SOP)
├── requirements.txt ← 依赖锁定(版本 + SHA256 hash)
└── scripts
└── download.py ← 核心下载脚本
下载默认保存位置:与 scripts/ 同级的目录下 即
douyin-downloader-skill如需指定其他目录,在调用时传入第二个参数。
用户输入(分享链接/文本)
→ 正则提取短链/长链
→ GET请求跟随301重定向 → 获取真实URL
→ 正则提取 video_id(支持modal_id/note_id/item_id等多种参数名)
→ GET https://www.iesdouyin.com/share/video/{video_id}/
→ 解析 window._ROUTER_DATA JSON
→ 提取 loaderData.*.videoInfoRes.item_list[0].video.play_addr.uri
→ 构造无水印链接:https://www.douyin.com/aweme/v1/play/?video_id={uri}
→ 流式下载到本地 .mp4
关键Headers:
脚本首次运行时会自动安装依赖(通过 requirements.txt,启用 --require-hashes SHA256 校验)。
如需提前手动安装:
pip install -r requirements.txt --require-hashes
安全策略:自动安装依赖时使用
requirements.txt+--require-hashes进行 SHA256 完整性校验,防止供应链投毒。
import subprocess, sys
import os
script = os.path.join(os.path.dirname(__file__), "scripts", "download.py")
link = '用户提供的抖音链接或分享文本'
subprocess.run([sys.executable, script, link])
import subprocess, sys
import os
script = os.path.join(os.path.dirname(__file__), "scripts", "download.py")
link = '用户提供的抖音链接或分享文本'
output_dir = 'D:\Videos' # 自定义目录
subprocess.run([sys.executable, script, link, output_dir])
import subprocess, sys
import os
script = os.path.join(os.path.dirname(__file__), "scripts", "download.py")
txt_file = os.path.join(os.path.dirname(__file__), "links.txt")
subprocess.run([sys.executable, script, '--batch', txt_file])
import sys
import os
skill_dir = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(skill_dir, "scripts"))
from download import run, run_batch
# 单个(保存到 Skill 目录)
run('https://v.douyin.com/xxxxxx/')
# 单个(指定目录)
run('https://v.douyin.com/xxxxxx/', 'D:\Videos')
# 批量
run_batch(os.path.join(skill_dir, 'links.txt'))
.mp4 文件links.txt,再用 --batch 模式[+] 正在解析链接: https://v.douyin.com/xxxxx/
[+] 视频ID: 7562497408383438095
[+] 视频: 所谓"长征",从来不是过去的故事 | 作者: 延安市融媒体中心
[+] 正在下载: 所谓"长征",从来不是过去的故事_7562497408383438095.mp4
[##################################################] 100.0%
[OK] 下载完成!保存至: <保存目录>所谓"长征",从来不是过去的故事_7562497408383438095.mp4
文件名格式:{视频标题前30字}_{video_id}.mp4
requirements.txt + SHA256 hash 校验)pip install -r requirements.txt --require-hashes_ROUTER_DATA 数据结构是否变更