返回 Skill 列表
extension
分类: 其它无需 API Key

抖音无水印下载器

解析下载抖音无水印视频

person作者: user_132b6e72hubcommunity

douyin-video-download

抖音无水印视频下载助手,高效批量下载,支持自动迭代重试。

核心能力

  • 解析抖音分享链接获取无水印视频直链
  • 四路 API 自动切换(apibyte.cn → xinyew.cn → douyin.wtf → tikwm)
  • apibyte.cn 优先返回 1080p 无水印原始源(aweme.snssdk.com)
  • 支持单条下载和批量文件导入
  • 并发下载控制(默认 3 并发,可配置)
  • 自动重试(默认 3 次,指数退避)
  • 失败队列记录,支持断点续传迭代
  • 输出文件自动命名:[作者昵称]__[视频标题]__[视频ID].mp4
  • 视频信息记录:downloaded_list.json(避免重复下载)
  • 视频互动数据:点赞/评论/收藏/分享数(apibyte.cn 源)
  • Windows GBK 终端兼容(自动替换 Unicode 符号)

工作流程

Step 1:解析用户输入

用户可能提供以下格式之一:

| 类型 | 示例 | |------|------| | 分享短链 | https://v.douyin.com/abc123 | | 分享长链 | https://www.douyin.com/video/7321456890123456789 | | 纯数字ID | 7321456890123456789 | | 批量文件 | 包含多行的文本文件,每行一个链接或ID |

识别方式:

  • http 开头 → 直接使用
  • 纯数字(13~20位)→ 拼接为 https://www.douyin.com/video/<id>
  • 文件路径(.txt)→ 读取所有行作为批量任务

Step 2:提取无水印直链

API 优先级(自动切换):

| 优先级 | API | 请求格式 | 画质 | |--------|-----|----------|------| | 最高 | apibyte.cn | GET /marketplace/douyinparse?url=<链接> | 1080p/720p/play_url 三选一 | | 备用1 | api.xinyew.cn | GET /api/douyinjx?url=<链接> | 无水印直链 | | 备用2 | api.douyin.wtf | GET /api/hybrid/video_data?url=<链接>&minimal=false | 原始嵌套数据 | | 备用3 | tikwm.com | GET /api/?url=<链接>&hd=1 | hdplay/play |

请求头:User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)

apibyte.cn 可选配置 API Key(环境变量 APIBYTE_API_KEY),不配也能用(限额低)。

apibyte.cn 响应格式:

{
  "code": 200,
  "msg": "success",
  "data": {
    "type": "video",
    "video_id": "7321456890123456789",
    "title": "视频标题",
    "author": {"nickname": "作者"},
    "video_1080p": "https://aweme.snssdk.com/...1080p.mp4",
    "video_720p": "https://aweme.snssdk.com/...720p.mp4",
    "play_url": "https://aweme.snssdk.com/...play.mp4",
    "publish_time": "2026-04-13 12:00:00",
    "likes": 10817, "comments": 48, "collects": 2986, "shares": 1964
  }
}

选择逻辑:video_1080pvideo_720pplay_url

Step 3:下载视频

使用 Python requests 流式下载,带进度显示和重试。

Step 4:批量迭代流程

  1. 读取任务列表(parse_tasks() 解析文件或字符串)
  2. 使用 asyncio + Semaphore 并发下载(run_batch_async()
  3. 成功记录写入 downloaded_list.json(video_id → filepath 映射)
  4. 失败记录追加到 failed_tasks.jsonl
  5. 迭代重试:最多 max_iterations 轮,每轮间隔递增
  6. 可通过 --retry-failed 从失败队列恢复

Step 5:输出报告

汇总信息:

  • 成功数 / 失败数 / 跳过数
  • 保存路径和耗时
  • 摘要写入 download_summary.json

脚本使用

单条下载

python scripts/download.py "https://v.douyin.com/abc123" -o ./videos
python scripts/download.py "7321456890123456789" -o ./videos

批量下载

python scripts/batch_download.py urls.txt -o ./videos --concurrency 5 --max-iterations 3

从失败队列重试

python scripts/batch_download.py --retry-failed -o ./videos

清理过期失败记录

python scripts/batch_download.py --clear-old-failed 30

参数说明

| 参数 | 说明 | 默认值 | |------|------|--------| | -o, --output | 输出目录 | ./douyin_downloads/<日期>/ | | -c, --concurrency | 并发数 | 3 | | --max-retries | 单条最大重试 | 3 | | --max-iterations | 批量最大迭代轮次 | 5 | | --retry-failed | 读取 failed_tasks.jsonl 重试 | false | | --force | 强制重新下载(忽略已有) | false | | --delay | 请求间隔(秒) | 1 | | --clear-old-failed N | 清理 N 天前的失败记录 | - |

实现说明

  • 从 download.py 导入安全打印函数 safe_print() 替代直接 print(),避免 Windows GBK 终端 Unicode 编码崩溃
  • download.py 接收文件路径参数时自动导入 batch_download.download_batch 执行批量
  • 所有脚本头行添加 # -*- coding: utf-8 -*- 确保编码声明
  • 使用 requests 做同步流式下载,aiohttp 做异步 API 请求

注意事项

  • 遵守抖音平台服务条款,仅用于个人学习用途
  • 并发过高可能被限流,适当增加 --delay
  • 视频链接有时效性,若失效需重新解析
  • apibyte.cn 无 API Key 也能用(限额低),配置 APIBYTE_API_KEY 环境变量可提高额度
  • API 服务为第三方接口,不保证 100% 可用,备用 API 已内置自动切换
  • 定期清理 failed_tasks.jsonl(30 天前的记录)
  • 视频源差异:aweme.snssdk.com(无水印原始源)优于 zjcdn.com(可能带水印),优先走 apibyte.cn