Skip to main content
Glama

Transcripción de enlaces de Douyin y organización de guiones orales

License

Analiza automáticamente el contenido multimedia desde enlaces compartidos de Douyin, genera transcripciones verbatim localmente y las organiza en guiones orales listos para usar.

Vista previa de la interfaz WebUI

Este proyecto se mantiene a partir de yzfly/douyin-mcp-server; conserva la licencia Apache-2.0 del proyecto original.

✨ Características

  • 🎬 Vídeo sin marca de agua - Obtén enlaces de descarga de vídeo de alta calidad sin marca de agua

  • 🛟 Degradación automática - Cuando falla el análisis HTTP, se utiliza Playwright compartido para capturar el audio firmado

  • 🎙️ Reconocimiento de voz local - faster-whisper-medium / CPU int8, sin consumir API de ASR

  • ✍️ Organización de guiones - DeepSeek elimina duplicados, añade puntuación y estructura, conservando el significado original

  • 🌐 WebUI - Interfaz de navegador moderna, sin necesidad de línea de comandos

  • 🔌 Integración MCP - Compatible con aplicaciones de IA como Claude Desktop

Related MCP server: Douyin Video Analysis MCP

Estructura del proyecto

assets/                 预览图和发布用 skill 包
douyin_mcp_server/      Python 核心包
scripts/                命令行入口
skills/douyin-video/    可复用的工作流说明
tests/                  单元测试
web/                    FastAPI WebUI

📦 Formas de uso

Método

Caso de uso

Características

WebUI

Usuarios normales

Operación desde el navegador, la más sencilla

Servidor MCP

Usuarios de Claude Desktop

Llamada directa en conversaciones con IA

Línea de comandos

Desarrolladores

Procesamiento por lotes, integración con scripts


🌐 WebUI (Recomendado)

La forma más sencilla de uso: abre el navegador y listo.

Inicio rápido

# 1. 克隆你自己的仓库
git clone <your-repository-url>
cd douyin-mcp-server

# 2. 安装依赖
uv sync --extra web

# 3. 启动服务
uv run python web/app.py

Abre el navegador y visita http://localhost:8080

Configurar la clave API de DeepSeek

Hay dos formas de configurar la clave API:

Opción 1: Configuración desde el navegador

  1. Abre la página de WebUI

  2. Haz clic en el botón «API no configurada» de la parte superior

  3. Introduce la clave API en la ventana emergente y guárdala

  4. La clave API se guarda localmente en el navegador y solo se envía al servicio local junto con la solicitud de extracción

Opción 2: Variable de entorno

export DOUYIN_DEEPSEEK_API_KEY="<your-deepseek-api-key>"
uv run python web/app.py

El ASR local no requiere clave; la clave de DeepSeek solo se usa para el último paso de organización del guion.

Descripción de funciones

Operación

Descripción

¿Necesita API?

Obtener información

Analiza el título y el ID del vídeo, obtiene el enlace de descarga sin marca de agua

❌

Extraer texto

HTTP/Playwright → audio → ASR local → DeepSeek

✅ (solo organización)

Descargar vídeo

Haz clic en el enlace de descarga para guardar el vídeo sin marca de agua

❌

Copiar/descargar texto

Copia o descarga el texto en formato Markdown con un clic

-

Pasos de uso

  1. Pegar el enlace - Pega el enlace compartido en el campo de entrada

  2. Hacer clic en el botón - Elige «Obtener información» o «Extraer texto»

  3. Ver el resultado - A la derecha se muestran la información del vídeo y el texto extraído

  4. Exportar - Copia el texto o descarga el archivo Markdown


🚀 Servidor MCP

Úsalo en aplicaciones compatibles con MCP como Claude Desktop, Cherry Studio, etc.

Método de configuración

Edita el archivo de configuración de MCP y añade:

{
  "mcpServers": {
    "douyin-mcp": {
      "command": "uvx",
      "args": ["douyin-mcp-server"],
      "env": {
        "DOUYIN_DEEPSEEK_API_KEY": "<your-deepseek-api-key>"
      }
    }
  }
}

DOUYIN_DEEPSEEK_API_KEY solo se coloca en el entorno de ejecución; no se escribe en el repositorio, en archivos de salida ni en informes de ejecución.

Herramientas disponibles

Nombre de la herramienta

Función

¿Necesita API?

parse_douyin_video_info

Analiza la información del vídeo

❌

get_douyin_download_link

Obtiene el enlace de descarga

❌

extract_douyin_text

Degradación automática, transcripción local y organización del guion

✅ (solo organización)

recognize_audio_file

Reconoce audio local con faster-whisper

❌

recognize_audio_url

Reconoce enlaces de audio en línea

✅ (Bailian)

Ejemplo de conversación

用户:帮我提取这个视频的文案 https://v.douyin.com/xxxxx/

Claude:我来帮你提取视频文案...
[调用 extract_douyin_text 工具]
提取完成,文案内容如下:
...

🛠️ Herramienta de línea de comandos

Adecuada para desarrolladores y escenarios de procesamiento por lotes.

Instalación

git clone https://github.com/yzfly/douyin-mcp-server.git
cd douyin-mcp-server
uv sync

Descripción de comandos

# 查看帮助
uv run python scripts/douyin_downloader.py --help

# 获取视频信息(无需 API)
uv run python scripts/douyin_downloader.py -l "分享链接" -a info

# 下载无水印视频
uv run python scripts/douyin_downloader.py -l "分享链接" -a download -o ./videos

# 提取文案(本地 ASR;整理阶段需要 DOUYIN_DEEPSEEK_API_KEY)
export DOUYIN_DEEPSEEK_API_KEY="<your-deepseek-api-key>"
uv run python scripts/douyin_downloader.py -l "分享链接" -a extract -o ./output

Formato de salida

output/
└── 7600361826030865707/
    ├── audio.m4a          # 已校验的完整音频
    ├── transcript-raw.md  # 本地 ASR 原始逐字稿
    ├── copy.md            # DeepSeek 整理后的口播
    ├── metadata.json
    └── run-report.json    # 五阶段状态和验证证据

📋 Requisitos del sistema

Dependencia

Descripción

Método de instalación

uv

Gestor de paquetes de Python

curl -LsSf https://astral.sh/uv/install.sh | sh

Python

3.10–3.13 (se recomienda 3.12)

uv python install 3.12

FFmpeg

Procesamiento de audio y vídeo

brew install ffmpeg (macOS) apt install ffmpeg (Ubuntu)

faster-whisper medium

Pesos de ASR local

Por defecto lee de D:\AI_Tools\models\huggingface\hub

Playwright

Degradación al navegador cuando falla el análisis HTTP

En Windows usa D:\AI_Tools\bin\playwright-node.cmd


🔧 Notas técnicas

Flujo de trabajo fijo

  1. Análisis HTTP del enlace compartido; si falla, degradación automática a Playwright.

  2. La rama HTTP descarga el vídeo; la rama del navegador descarga el audio firmado por Range.

  3. La rama HTTP extrae el audio con FFmpeg; la rama del navegador verifica el audio completo con ffprobe.

  4. faster-whisper-medium / CPU int8 local genera la transcripción verbatim con marcas de tiempo.

  5. DeepSeek organiza el guion oral y lo escribe en run-report.json.


📝 Registro de cambios

v1.5.0 (versión actual de estación de trabajo)

  • Degradación automática a Playwright compartido cuando falla el análisis HTTP

  • Uso de faster-whisper-medium / CPU int8 local; el ASR ya no depende de APIs en la nube

  • Uso de DeepSeek V4 Flash para organizar el guion oral

  • Salida fija de audio, transcripción verbatim original, guion organizado, metadatos e informe de ejecución

v1.4.1

  • 🔧 Corrección del servidor MCP - API_KEY ahora corresponde correctamente a la clave de SiliconFlow, coherente con la documentación; también es compatible con la configuración antigua DASHSCOPE_API_KEY

  • ♻️ Herramientas restauradas - Se restauran las herramientas recognize_audio_file / recognize_audio_url y el parámetro context de extract_douyin_text

  • 🛡️ Refuerzo de seguridad de WebUI - El endpoint de descarga ya no actúa como proxy de URLs arbitrarias; por defecto solo escucha en local

  • ⚡ Rendimiento de WebUI - La extracción de texto ya no bloquea otras solicitudes

  • 📦 Dependencias simplificadas - Las dependencias de WebUI pasan a ser opcionales (pip install "douyin-mcp-server[web]")

v1.4.0

  • 🌐 WebUI - Nueva interfaz visual en el navegador

  • 🔑 Configuración de clave API desde el navegador - Sin necesidad de variables de entorno

  • 📑 Soporte de archivos grandes - Segmentación automática para audios largos

v1.3.0

  • ✨ Soporte de Claude Code Skill

  • 📄 Salida en formato Markdown

v1.2.0

  • 🔄 Actualización de API

v1.0.0

  • 🎉 Primera publicación


  • Este proyecto se proporciona únicamente con fines de aprendizaje e investigación

  • El usuario debe cumplir con las leyes y regulaciones aplicables

  • Prohibido su uso para infringir derechos de propiedad intelectual

  • Los autores no se hacen responsables de las pérdidas derivadas del uso de este proyecto


📄 Licencia

Apache License 2.0

🤝 Contribuciones

Antes de enviar un Issue o Pull Request, lee CONTRIBUTING.md. Los problemas de seguridad deben notificarse de forma privada según SECURITY.md.

Antes de publicar en tu propio repositorio de GitHub, completa project.urls en pyproject.toml con la dirección de tu repositorio y modifica el nombre del proyecto y la información del autor según sea necesario.

Fuente original

Autor del proyecto original: yzfly (GitHub).

Available Tools

5 tools
extract_douyin_textA

从抖音分享链接提取视频中的文本内容

参数:

  • share_link: 抖音分享链接或包含链接的文本

  • model: 本地 faster-whisper 模型(可选,默认 medium)

  • context: 口播整理用途或额外要求(可选)

返回:

  • 提取的文本内容

注意: 本地 ASR 不消耗 API;最后整理口播需要 DOUYIN_DEEPSEEK_API_KEY

NameRequiredDescriptionDefault
modelNo
contextNo
share_linkYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that local ASR does not consume API quota and that final organization requires a DeepSeek API key. It does not mention failure modes, rate limits, video length constraints, or whether the tool downloads the video, so transparency is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a one-sentence purpose, a parameter list, a return note, and an important API-key note. It is concise and front-loaded, with no significant redundancy, though the return line adds little beyond the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers inputs, key dependencies, and a basic return value, which is enough for simple invocations. However, it lacks guidance on choosing between sibling tools, expected output format details, and operational constraints, so completeness is only moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining all three parameters: share_link can contain the link or surrounding text, model defaults to medium and is optional, and context defines the organization purpose or extra requirements. It adds meaningful semantics beyond the bare schema, though model choices and context format remain underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action: extracting text content from a Douyin video via a share link. It implies differentiation from siblings like get_douyin_download_link and recognize_audio_file/url by targeting share links and extracted text, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a Douyin share link is provided and text/口播 content is desired, and notes when DOUYIN_DEEPSEEK_API_KEY is required. However, it does not explicitly state when to prefer this tool over siblings such as recognize_audio_file, recognize_audio_url, or parse_douyin_video_info.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_douyin_video_infoB

解析抖音分享链接,获取视频基本信息

参数:

  • share_link: 抖音分享链接或包含链接的文本

返回:

  • 视频信息(JSON格式字符串)

NameRequiredDescriptionDefault
share_linkYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the return format (JSON string) and omits network dependency, error behavior, rate limits, link-expiration handling, or behavior for invalid/ambiguous inputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized into purpose, parameters, and return sections. Every sentence adds value, and the main action is front-loaded with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter parsing tool with an output schema available, the description covers the essential input and return contract. However, it lacks behavioral context such as error handling, network requirements, and link validity assumptions, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining that share_link can be either a Douyin share link or text containing a link. This adds meaningful semantics beyond the bare schema property title 'Share Link' and clearly documents the only parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (parse a Douyin share link) and the outcome (retrieve basic video information), which distinguishes it from the download/text/audio sibling tools by resource and purpose. However, it does not explicitly contrast itself with those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: when the agent receives a Douyin share link and needs basic video info, this tool is appropriate. But there is no explicit guidance about when not to use it or when to prefer siblings like get_douyin_download_link or extract_douyin_text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recognize_audio_fileA

识别本地音频文件中的文本

参数:

  • file_path: 本地音频文件路径

  • context: 上下文文本,用于提高识别准确率(可选)

  • language: 指定语言代码(如 'zh', 'en'),可选,默认自动检测

  • model: 语音识别模型(可选,默认使用qwen3-asr-flash)

返回:

  • 识别的文本内容

注意: 使用本机 faster-whisper,默认 medium / CPU int8,不消耗 API

NameRequiredDescriptionDefault
modelNo
contextNo
languageNo
file_pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and delivers: it discloses local inference via faster-whisper, the default 'medium / CPU int8' engine, and zero API consumption. A minor flaw is the internal inconsistency between the model parameter's stated default 'qwen3-asr-flash' and the faster-whisper medium default, but the core safety/cost behavior is clearly revealed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is cleanly organized—purpose, parameters, returns, and a behavioral note—with the purpose statement front-loaded. The parameter block earns its place because the schema has no descriptions at all, so it is not redundant, though the layout is conventional rather than exceptionally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations, the description is largely complete: it covers purpose, all parameters, the return value ('识别的文本内容'), and operational context in one place. It omits supported audio formats, file-size/duration limits, and error behavior, which would round it out for a local ASR tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates by documenting every parameter: file_path as a local path, context as an accuracy-improving optional text, language with 'zh'/'en' examples and auto-detection default, and model with its default. This is exactly the semantic meaning the bare input schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line '识别本地音频文件中的文本' states a specific verb (识别/recognize), a resource (audio files), and a scope qualifier (本地/local), so an agent knows immediately this transcribes local audio. The '本地' qualifier also distinguishes it from the sibling recognize_audio_url, which targets remote audio.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: it operates on local file paths via '本机 faster-whisper' with CPU int8 and notes '不消耗 API', signaling an offline, no-cost transcription use case. However, it never explicitly names the alternative (recognize_audio_url) or states when not to use this tool, leaving sibling routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recognize_audio_urlA

识别在线音频URL中的文本

参数:

  • audio_url: 音频URL链接

  • context: 上下文文本,用于提高识别准确率(可选)

  • language: 指定语言代码(如 'zh', 'en'),可选,默认自动检测

  • model: 语音识别模型(可选,默认使用qwen3-asr-flash)

返回:

  • 识别的文本内容

注意: 需要设置环境变量 DASHSCOPE_API_KEY

NameRequiredDescriptionDefault
modelNo
contextNo
languageNo
audio_urlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavior disclosure burden. It discloses the DASHSCOPE_API_KEY environment variable requirement, the default model, the auto-detect behavior for language, and the return type. It stops short of mentioning external data transmission, rate limits, or failure behavior, so it isn't perfect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a concise structured list with a one-line purpose, parameter definitions, return value, and a single operational note. No sentence is wasted, and the most important info is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and the description, the agent knows all parameters, defaults, the required API key, and what is returned. It lacks explicit usage-contrast guidance and format constraints for the URL, but those are minor for a straightforward transcription tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates by explaining every parameter: audio_url is the link, context is optional textual context for improved accuracy, language accepts codes like 'zh'/'en', and model defaults to qwen3-asr-flash. The defaults and optionality are explicitly stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb 'recognize' and resource 'online audio URL' and result 'text' in the first line, making the tool's purpose unambiguous. It is naturally distinguished from sibling recognize_audio_file because it targets URLs rather than files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for online audio URLs through its name and opening phrase, but does not explicitly contrast it with the sibling recognize_audio_file or other alternatives. There is no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.5.0
    • First observedextract_douyin_text
    • First observedget_douyin_download_link
    • First observedparse_douyin_video_info
    • First observedrecognize_audio_file
    • First observedrecognize_audio_url

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

每个工具的功能明确区分:下载链接、提取文本、识别音频(文件/URL)、解析信息,无重叠或模糊之处。

Naming Consistency4/5

所有工具均使用动词+名词的snake_case命名,但动词不统一(get, extract, recognize, parse),不过每个名称都清晰描述了操作,整体可接受。

Tool Count5/5

5个工具覆盖了抖音视频处理的核心功能,规模适中,既不过度也不精简。

Completeness4/5

涵盖了链接获取、文本提取、音频识别和视频信息解析等主要操作,但缺少例如搜索或评论等扩展功能,不过对当前领域而言已较完整。

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers