← 返回
未分类

DINGO-douyin-video-downloader

抖音视频下载器。下载抖音视频的最高可用清晰度版本(最高1080p),自动获取无水印版本,使用ffmpeg将原始链接写入文件元数据注释以便回溯源头。当用户需要下载抖音视频、保存抖音视频、解析抖音链接时使用此skill。触发词包括"下载抖音视频"、"帮我下载这个抖音"、"抖音保存"、"douyin download"等。
抖音视频下载器。下载抖音视频的最高可用清晰度版本(最高1080p),自动获取无水印版本,使用ffmpeg将原始链接写入文件元数据注释以便回溯源头。当用户需要下载抖音视频、保存抖音视频、解析抖音链接时使用此skill。触发词包括"下载抖音视频"、"帮我下载这个抖音"、"抖音保存"、"douyin download"等。
user_4c50b849
未分类 community v1.0.0 1 版本 98750 Key: 无需
★ 0
Stars
📥 79
下载
💾 0
安装
1
版本
#latest

概述

抖音视频下载器

概述

下载抖音视频的最高可用清晰度版本,自动尝试无水印源,并将原始抖音链接写入文件元数据的 comment 字段,方便后续快速回溯源头。

核心原理:利用 iesdouyin.com 分享页的 SSR 渲染特性,从 HTML 中提取嵌入的视频数据(window._ROUTER_DATA),无需浏览器 cookies 或 TikHub API Token。

前置条件

  • ffmpeg:已安装在 /usr/local/bin/ffmpeg(用于元数据写入和音视频合并)
  • Python 3:系统自带 /usr/bin/python3
  • requests:Python HTTP 库(通常已安装)

工作流程

第一步:提取 aweme_id

从用户输入中提取视频的 aweme_id(19位数字ID)。支持以下输入格式:

输入格式示例提取方式
------------------------
短链接https://v.douyin.com/Jt5SfKMp5GE/发送 HTTP 请求跟踪 302 重定向,从最终 URL 提取
标准链接https://www.douyin.com/video/7392175895160573218正则匹配 /video/(\d{16,})
modal_id 参数https://www.douyin.com/jingxuan?modal_id=7392175895160573218正则匹配 modal_id=:
纯数字ID7392175895160573218直接使用

第二步:从 iesdouyin 获取视频数据

请求 iesdouyin 分享页(无需 cookies):

GET https://www.iesdouyin.com/share/video/{aweme_id}/
User-Agent: 移动端 Safari UA

从返回 HTML 中解析 window._ROUTER_DATA JSON 对象。关键数据路径:

_ROUTER_DATA.loaderData["video_(id)/page"].videoInfoRes.item_list[0]

从中提取:

  • 视频标题(desc
  • 作者(author.nickname
  • 视频 URL 列表(video.play_addr.url_list
  • video_id(video.play_addr.uri,用于构建自定义 URL)
  • 多码率列表(video.bit_rate[]
  • 下载地址(video.download_addr.url_list

第三步:选择最佳视频源

按以下优先级选择视频 URL:

  1. download_addr(通常无水印,优先级最高)
  2. 自行构建无水印 URL:用 video_id + 遍历所有 ratio 参数,选文件最大的
    • URL 模板:https://aweme.snssdk.com/aweme/v1/play/?video_id={video_id}&ratio={ratio}&line=0
    • ratio 优先级:default > 1080p > 720p > 540p > 480p
    • 关键ratio=default 通常返回最高码率 HEVC 编码版本,比 1080p 更大
  3. play_addr 中 playwm→play 替换:将有水印 URL 中的 playwm 替换为 play
  4. bit_rate 中最高码率
  5. play_addr 原始 URL(有水印,最后备选)

选择方式:对所有候选 URL 发送 HEAD 请求,比较 Content-Length,选最大的。

第四步:下载视频

使用 Python requests 流式下载,支持进度显示。请求头需包含:

User-Agent: 桌面端 Chrome UA
Referer: https://www.douyin.com/

第五步:写入元数据注释

使用 ffmpeg 将原始抖音链接写入 MP4 文件的 comment 元数据字段:

ffmpeg -y -i input.mp4 -c copy -metadata "comment=原始抖音链接URL" output.mp4

此操作为无损复制(-c copy),不重新编码,瞬间完成。

验证元数据:

ffmpeg -i output.mp4 -f ffmetadata -
# 输出中应包含: comment=https://v.douyin.com/XXXX/

使用脚本(推荐方式)

skill 包含完整的下载脚本 scripts/douyin_download.py,可直接运行:

# 基本用法
/usr/bin/python3 scripts/douyin_download.py "https://v.douyin.com/Jt5SfKMp5GE/" --output-dir /Users/dingo/Desktop/12

# 使用 aweme_id
/usr/bin/python3 scripts/douyin_download.py "7392175895160573218" --output-dir ~/Downloads

脚本路径:scripts/douyin_download.py(相对于 skill 目录)

脚本自动完成上述全部5个步骤:解析 ID → 获取数据 → 选择最佳源 → 下载 → 写入元数据。

批量下载

对于多个链接,逐个调用脚本即可:

for url in "https://v.douyin.com/xxx/" "https://v.douyin.com/yyy/"; do
    /usr/bin/python3 scripts/douyin_download.py "$url" --output-dir /目标目录
done

音视频分离处理

部分抖音视频(尤其是某些 ratio 参数)可能只包含视频轨道而无音频。脚本内置的多清晰度测试机制会自动选择包含音视频的版本(通常 ratio=default 包含完整音视频)。

如果确实遇到音视频分离的情况,处理方式:

  1. 分别下载视频和音频文件
  2. 使用 ffmpeg 合并:
  3. ffmpeg -y -i video.mp4 -i audio.mp4 -c:v copy -c:a aac -metadata "comment=原始链接" output.mp4
    

故障排查

问题原因解决方案
---------------------
无法提取 aweme_id短链接已过期或格式不对让用户在抖音APP中重新分享获取新链接
iesdouyin 返回空数据视频已删除/私密/封禁在浏览器中打开分享页确认视频状态
下载文件很小(<100KB)URL 可能已过期重新获取视频数据
ffmpeg 报错ffmpeg 未安装或路径不对确认 /usr/local/bin/ffmpeg 存在
视频无声音选择了只含视频的 ratio脚本会自动测试选择最佳版本
yt-dlp 失败需要 cookies不使用 yt-dlp,使用本工具的 iesdouyin 方案

注意事项

  • iesdouyin 方案无需 TikHub API Token、无需浏览器 cookies
  • 下载的视频仅供个人学习使用,请尊重原创者版权
  • 短链接有时效性,建议及时下载
  • ratio=default 通常返回 HEVC(H.265) 编码的最高码率版本,文件较大但画质最好

版本历史

共 1 个版本

  • v1.0.0 Initial release 当前
    2026-05-15 22:17 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

security-compliance

Skill Vetter

spclaudehome
AI智能体技能安全预审工具。安装ClawdHub、GitHub等来源技能前,检查风险信号、权限范围及可疑模式。
★ 1,215 📥 266,539
ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,358 📥 318,370
developer-tools

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 668 📥 324,162