# 用 AI Agent 下载抖音无水印视频 — 纯终端方案 > 无需浏览器、无需登录、无需 cookies,一条命令下载抖音无水印视频到本地。基于 iesdouyin 移动端 SSR 解析,纯 Python 实现。 ## 背景 在服务器/终端环境下下载抖音视频,通常会遇到几个痛点: - **yt-dlp** 需要 cookies,服务器上没有浏览器无法导出 - **第三方 GUI 工具** 依赖 Chrome/Playwright,纯终端跑不了 - **付费解析 API** 不稳定,随时可能挂 本文介绍一种**纯 curl/Python 方案**,零依赖,任何能联网的 Linux 服务器都能跑。 --- ## 原理 抖音有一个移动端分享页面 `iesdouyin.com`,访问时会做 SSR(服务端渲染),视频信息直接嵌入在 HTML 的 `window._ROUTER_DATA` JSON 中,包括**无水印视频直链**。 核心流程: 1. 解析短链接 → 提取视频 ID 2. 请求 `iesdouyin.com/share/video/{id}`(模拟 iPhone UA) 3. 从 HTML 提取 `_ROUTER_DATA` → 解析 `videoInfoRes.item_list[0].video` 4. 将 `playwm`(有水印)替换为 `play`(无水印) 5. 下载 MP4 --- ## 一键脚本 ```python #!/usr/bin/env python3 """抖音无水印视频下载 - 零依赖纯终端方案""" import json, os, re, sys, urllib.request from urllib.parse import unquote MOBILE_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15" def resolve_url(input_str): input_str = input_str.strip() if re.match(r"^\d{15,25}$", input_str): return input_str m = re.search(r"/video/(\d{15,25})", input_str) if m: return m.group(1) # 短链跟随重定向 try: req = urllib.request.Request(input_str) req.add_header("User-Agent", MOBILE_UA) resp = urllib.request.urlopen(req, timeout=10) return resolve_url(resp.url) except: raise ValueError(f"无法提取视频ID: {input_str}") def download(vid, out_dir="~/Downloads/douyin"): url = f"https://www.iesdouyin.com/share/video/{vid}" req = urllib.request.Request(url) req.add_header("User-Agent", MOBILE_UA) html = urllib.request.urlopen(req, timeout=15).read().decode() m = re.search(r"window\._ROUTER_DATA\s*=\s*(\{.*?\});?\s*", html, re.DOTALL) if not m: raise ValueError("未找到视频数据,可能已删除或需要登录") data = json.loads(m.group(1)) items = data["loaderData"]["video_(id)/page"]["videoInfoRes"]["item_list"] if not items: raise ValueError("视频不可用") item = items[0] print(f"标题: {item['desc']}") print(f"作者: {item['author']['nickname']}") # 提取视频URL(去水印) video = item["video"] vurl = video["play_addr"]["url_list"][0] vurl = vurl.replace("playwm", "play") # 去水印 # 下载 out = os.path.expanduser(f"{out_dir}/{vid}.mp4") os.makedirs(os.path.dirname(out), exist_ok=True) dl_req = urllib.request.Request(vurl) dl_req.add_header("User-Agent", MOBILE_UA) dl_req.add_header("Referer", "https://www.douyin.com/") urllib.request.urlretrieve(vurl, out) size = os.path.getsize(out) print(f"Done: {out} ({size/1024:.0f} KB)") if __name__ == "__main__": vid = resolve_url(sys.argv[1]) download(vid) ``` --- ## 使用方法 ```bash # 保存为 douyin_dl.py 后直接用 python3 douyin_dl.py https://v.douyin.com/xxxxx/ python3 douyin_dl.py 7490784822923742490 # 输出示例: # 标题: 在喧嚣都市渴望一方宁静?这现代极简别墅客厅... # 作者: 设计师方恒 # Done: /root/Downloads/douyin/7490784822923742490.mp4 (385 KB) ``` --- ## AI Agent 集成 如果你使用 **Hermes Agent** 等终端 AI 助手,可以直接对 Agent 说: > 帮我下载这个抖音视频:https://v.douyin.com/xxxxx/ Agent 会自动执行解析和下载,下载完成后还能直接通过 Telegram 发送视频给你。 --- ## 限制 - 部分私密视频或审核中的内容无法获取 - 视频直链有时效性(通常几小时),建议下载后及时保存 - 抖音随时可能调整 SSR 页面结构,脚本可能需要跟进更新 --- ## 技术细节 | 项目 | 说明 | |------|------| | 依赖 | Python 3 标准库(零外部依赖) | | 适用环境 | 任何能联网的 Linux/macOS 终端 | | 视频质量 | 720p(SSR 默认返回) | | 有无水印 | 无水印(playwm → play) | | 是否需要登录 | 不需要 | | 是否需要 cookies | 不需要 | --- **分类**:教程 **标签**:下载 · 视频 · 水印 **作者**:Xiao.Xi **链接**:https://octohz.com/p/1596