FFmpeg沙盒服务器

一个提供安全FFmpeg功能的MCP服务器,通过沙盒环境为AI助手和其他MCP客户端执行音视频处理任务。

  • by radzevich
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 radzevich/ffmpeg_mcp

使用说明

FFmpeg MCP 服务器

一个模型上下文协议(MCP)服务器,它通过沙盒环境提供安全的FFmpeg功能。该服务器允许AI助手和其他MCP客户端在隔离环境中使用FFmpeg执行视频/音频处理任务。

特点/功能

  • 沙盒执行所有FFmpeg命令均在隔离的临时目录中运行,以确保安全
  • 文件管理在沙箱内上传、下载和管理文件
  • Google Cloud Storage 集成与GCS直接集成以进行文件传输
  • 安全仅允许使用FFmpeg命令,防止任意代码执行
  • **RESTful API(Representational State Transfer(表述性状态转移)应用程序编程接口)**使用FastMCP作为HTTP服务器运行

安装

先决条件

  • Python 3.11 或更高版本
  • 您的系统上已安装FFmpeg
  • (可选)用于GCS功能的Google Cloud凭据

设置

  1. 克隆仓库:
git clone <repository-url>
cd ffmpeg_mcp
  1. 使用 uv 安装依赖项(推荐):
uv sync

或者使用 pip:

pip install -e .
  1. (可选)为GCS集成设置Google Cloud凭据:
export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/credentials.json"

用法

启动服务器

python main.py

服务器将在 localhost:8000 默认情况下。

可用工具

1. create_sandbox()

为FFmpeg操作创建一个新的隔离沙盒环境。

返回值: 沙盒目录路径

2. run_ffmpeg_command(sandbox, command)

在指定的沙箱内执行FFmpeg命令。

参数:

  • sandbox (str): 沙盒目录路径
  • command (字符串): 要执行的 FFmpeg 命令

返回值: 命令输出或错误信息

3. put_file(sandbox, filename, content)

将文件放入沙盒环境中。

参数:

  • sandbox (str): 沙盒目录路径
  • filename (字符串):要创建的文件的名称
  • content (字节):文件内容

返回值: 创建文件的完整路径

4. get_file(sandbox, filename)

从沙盒环境中检索文件。

参数:

  • sandbox (str): 沙盒目录路径
  • filename (字符串): 要检索的文件的名称

返回: 文件内容以字节形式表示

5. delete_file(sandbox, filename)

从沙盒环境中删除一个文件。

参数:

  • sandbox (字符串): 沙盒目录路径
  • filename (str): 要删除的文件的名称

返回: 确认信息

6. download_file(sandbox, url, filename)

从URL下载文件到沙盒中。

参数:

  • sandbox (str): 沙盒目录路径
  • url (字符串): 要下载的文件的URL
  • filename (字符串): 保存为本地文件名

返回值: 下载文件的完整路径

7. upload_file(sandbox, filename, upload_url)

将文件从沙盒上传到指定的URL。

参数:

  • sandbox (str): 沙盒目录路径
  • filename (字符串):要上传的文件的名称
  • upload_url (字符串): 目标URL

返回: 上传响应

8. download_file_from_gcs(sandbox, gcs_url, filename)

从 Google 云存储下载文件。

参数:

  • sandbox (字符串): 沙盒目录路径
  • gcs_url (str): GCS URL(gs://bucket/path)
  • filename (字符串): 本地保存的文件名

返回值: 下载文件的完整路径

9. upload_file_to_gcs(sandbox, filename, gcs_url)

将文件上传到 Google Cloud Storage。

参数:

  • sandbox (str): 沙盒目录路径
  • filename (str): 要上传的文件名
  • gcs_url (字符串): 目标GCS URL

返回值: 确认信息

示例工作流程

# 1. Create a sandbox
sandbox = create_sandbox()

# 2. Download a video file
download_file(sandbox, "https://example.com/video.mp4", "input.mp4")

# 3. Process with FFmpeg
run_ffmpeg_command(sandbox, "ffmpeg -i input.mp4 -vf scale=720:480 output.mp4")

# 4. Retrieve the processed file
processed_video = get_file(sandbox, "output.mp4")

安全特性

  • 命令限制仅允许以“ffmpeg”开头的命令
  • 沙盒隔离所有操作均在临时目录内进行
  • 路径验证沙盒目录在操作前会进行验证
  • 错误处理针对失败操作的全面错误处理

配置

服务器运行在 localhost:8000 默认情况下。您可以在(配置中)修改主机和端口 main.py 文件:

if __name__ == "__main__":
    mcp.run(transport="httpx", host="your-host", port=your-port)

依赖项

  • httpx用于文件下载和上传的HTTP客户端
  • mcp[cli]模型上下文协议服务器框架
  • google-cloud-storageGoogle云存储集成(可选)