用 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

一键脚本

#!/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*</script>", 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)

使用方法

# 保存为 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不需要
2800举报0Xiao.Xi16天前
点击获取 ^_^
被收录:

暂无评论