Skip to main content
Glama
sworddut

MCP FFmpeg Helper

by sworddut
README.md
[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/sworddut-mcp-ffmpeg-helper-badge.png)](https://mseep.ai/app/sworddut-mcp-ffmpeg-helper)

# MCP FFmpeg Helper

一个基于 Model Context Protocol (MCP) 的 FFmpeg 辅助工具,提供视频处理功能。

<a href="https://glama.ai/mcp/servers/@sworddut/mcp-ffmpeg-helper">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@sworddut/mcp-ffmpeg-helper/badge" alt="FFmpeg Helper MCP server" />
</a>

## 功能概述

MCP FFmpeg Helper 是一个轻量级服务器,它通过 MCP 协议将 FFmpeg 的强大功能暴露给 AI 助手。它支持以下视频处理操作:

- 获取视频文件详细信息
- 转换视频格式
- 从视频中提取音频
- 从图像序列创建视频
- 裁剪视频
- 为视频添加水印
- 裁剪音频文件
- 从视频中提取帧为图像序列

## 安装与配置

### 前提条件

- Node.js (v14+)
- FFmpeg (需要安装在系统中并可通过命令行访问)
  [FFmpeg 官方下载页面](https://ffmpeg.org/download.html) 获取
  可以使用
  ```bash
  ffmpeg -version
  ```
  检查是否安装成功

### 安装步骤

1. 克隆或下载此仓库
2. 安装依赖:
   ```bash
   npm install
   ```
3. 构建项目:
   ```bash
   npm run build
   ```

### 配置 MCP

要在 Windsurf 或其他支持 MCP 的应用程序中使用此工具,请将以下配置添加到 MCP 配置文件中:

1.本地配置node服务器

windows:
```json
{
  "mcp-ffmpeg-helper": {
    "command": "cmd",
    "args": [
      "/c",
      "node",
      "path/to/mcp-ffmpeg-helper/build/index.js"
    ]
  }
}
```

对于 Windows 用户,配置文件通常位于:`%APPDATA%/.codeium/windsurf/mcp_config.json`

macos:
```json
{
  "mcp-ffmpeg-helper": {
    "command": "node",
    "args": [
      "path/to/mcp-ffmpeg-helper/build/index.js"
    ]
  }
}
```

2.使用npm包的方式配置mcp服务器(推荐使用,不需要手动构建node服务器,不用克隆仓库到本地)

windows:
```json
{
  "mcp-ffmpeg-helper": {
    "command": "cmd",
    "args": [
      "/c",
      "npx",
      "@sworddut/mcp-ffmpeg-helper"
    ]
  }
}
```

macos:
```json
{
  "mcp-ffmpeg-helper": {
    "command": "npx",
    "args": [
      "@sworddut/mcp-ffmpeg-helper"
    ]
  }
}
```

## 使用示例

### 获取视频信息
直接在windsurf控制台输入:
请帮我查看"path/to/video.mp4"视频信息

### 转换视频
直接在windsurf控制台输入:
请帮我将"path/to/input.avi"转换为"path/to/output.mp4"

### 提取音频
直接在windsurf控制台输入:
请帮我从"path/to/video.mp4"提取音频到"path/to/audio.mp3"

### 从图像创建视频
直接在windsurf控制台输入:
请帮我从"path/to/images/%05d.jpg"创建视频到"path/to/output.mp4"

### 裁剪视频
直接在windsurf控制台输入:
请帮我裁剪"path/to/input.mp4"到"path/to/output.mp4",从00:00:00开始,到00:01:00结束

### 添加水印
直接在windsurf控制台输入:
请帮我为"path/to/input.mp4"添加水印到"path/to/output.mp4",使用"path/to/watermark.png"作为水印,位置在[右下角/左上角/中心等],透明度[0-1之间的值]

### 裁剪音频
直接在windsurf控制台输入:
请帮我裁剪"path/to/input.mp3"到"path/to/output.mp3",从00:00:10开始,持续30秒

### 提取视频帧
直接在windsurf控制台输入:
请帮我从"path/to/video.mp4"提取帧到"path/to/frames"文件夹,使用PNG格式以保持最高质量

## 可用工具

### 1. 获取视频信息 (get_video_info)

获取视频文件的详细信息,包括格式、编解码器、分辨率、帧率等。

**参数:**
- `filePath`: 视频文件路径

**示例:**
```javascript
get_video_info({
  filePath: "path/to/video.mp4"
})
```

### 2. 转换视频 (convert_video)

将视频转换为不同格式或应用特定编码选项。

**参数:**
- `inputPath`: 输入视频文件路径
- `outputPath`: 输出视频文件路径
- `options`: 附加的 FFmpeg 选项(可选)

**示例:**
```javascript
convert_video({
  inputPath: "path/to/input.avi",
  outputPath: "path/to/output.mp4",
  options: "-c:v libx264 -crf 23 -preset medium"
})
```

### 3. 提取音频 (extract_audio)

从视频文件中提取音频轨道。

**参数:**
- `inputPath`: 输入视频文件路径
- `outputPath`: 输出音频文件路径
- `format`: 音频格式(如 mp3, aac 等)

**示例:**
```javascript
extract_audio({
  inputPath: "path/to/video.mp4",
  outputPath: "path/to/audio.mp3",
  format: "mp3"
})
```

### 4. 从图像创建视频 (create_video_from_images)

从图像序列创建视频文件。

**参数:**
- `inputPattern`: 输入图像模式(如 'img%03d.jpg' 或 'folder/*.png')
- `outputPath`: 输出视频文件路径
- `framerate`: 帧率(默认:25)
- `codec`: 视频编解码器(默认:libx264)
- `pixelFormat`: 像素格式(默认:yuv420p)
- `extraOptions`: 附加的 FFmpeg 选项(可选)

**示例:**
```javascript
create_video_from_images({
  inputPattern: "images/%05d.jpg",
  outputPath: "output.mp4",
  framerate: 30,
  codec: "libx264",
  pixelFormat: "yuv420p"
})
```

### 5. 裁剪视频 (trim_video)

将视频裁剪到指定的时间段。

**参数:**
- `inputPath`: 输入视频文件路径
- `outputPath`: 输出视频文件路径
- `startTime`: 开始时间(格式:HH:MM:SS.mmm 或秒数)
- `duration`: 持续时间(可选,格式同上)
- `endTime`: 结束时间(可选,格式同上)

**示例:**
```javascript
trim_video({
  inputPath: "path/to/video.mp4",
  outputPath: "path/to/trimmed.mp4",
  startTime: "00:00:10",
  duration: "00:00:30"
})
```

### 6. 添加水印 (add_watermark)

为视频添加图像水印。

**参数:**
- `inputPath`: 输入视频文件路径
- `watermarkPath`: 水印图像路径
- `outputPath`: 输出视频文件路径
- `position`: 水印位置(topleft, topright, bottomleft, bottomright, center)
- `opacity`: 水印不透明度(0.0-1.0)

**示例:**
```javascript
add_watermark({
  inputPath: "path/to/video.mp4",
  watermarkPath: "path/to/logo.png",
  outputPath: "path/to/watermarked.mp4",
  position: "bottomright",
  opacity: 0.7
})
```

### 7. 裁剪音频 (trim_audio)

将音频文件裁剪到指定的时间段。

**参数:**
- `inputPath`: 输入音频文件路径
- `outputPath`: 输出音频文件路径
- `startTime`: 开始时间(格式:HH:MM:SS.mmm 或秒数)
- `duration`: 持续时间(可选,格式同上)
- `endTime`: 结束时间(可选,格式同上)
- `format`: 音频格式(如 mp3, aac 等,可选)

**示例:**
```javascript
trim_audio({
  inputPath: "path/to/audio.mp3",
  outputPath: "path/to/trimmed.mp3",
  startTime: "00:00:10",
  duration: "00:00:30",
  format: "mp3"
})
```

### 8. 提取视频帧 (extract_frames)

从视频中提取帧并保存为图像序列。

**参数:**
- `inputPath`: 输入视频文件路径
- `outputDir`: 输出图像目录(默认:'output')
- `frameRate`: 帧提取率(如 '1' 提取每一帧,'0.5' 提取每两帧,'1/30' 每30秒提取一帧)
- `format`: 输出图像格式(jpg, png 等,默认:jpg)
- `quality`: 图像质量(1-100,默认:95)
- `startTime`: 开始提取的时间点(可选)
- `duration`: 提取的持续时间(可选)

**示例:**
```javascript
extract_frames({
  inputPath: "path/to/video.mp4",
  outputDir: "path/to/frames",
  frameRate: "1",
  format: "png",
  quality: 99
})
```

## 实际使用案例

### 从图像序列创建 30fps 的 H.264 视频

```javascript
create_video_from_images({
  inputPattern: "C:/Users/username/images/bear/%05d.jpg",
  outputPath: "C:/Users/username/videos/bear.mp4",
  framerate: 30,
  codec: "libx264",
  pixelFormat: "yuv420p"
})
```

### 将视频的前 10 秒裁剪出来

```javascript
trim_video({
  inputPath: "C:/Users/username/videos/long_video.mp4",
  outputPath: "C:/Users/username/videos/clip.mp4",
  startTime: "0",
  duration: "10"
})
```

### 提取高质量视频帧

```javascript
extract_frames({
  inputPath: "C:/Users/username/videos/movie.mp4",
  outputDir: "C:/Users/username/frames",
  frameRate: "1",
  format: "png",
  quality: 99
})
```

### 裁剪音频文件的特定片段

```javascript
trim_audio({
  inputPath: "C:/Users/username/music/song.mp3",
  outputPath: "C:/Users/username/music/clip.mp3",
  startTime: "01:30",
  duration: "00:30",
  format: "mp3"
})
```

## 故障排除

- 确保 FFmpeg 已正确安装并添加到系统 PATH 中
- 检查文件路径是否正确,特别是在 Windows 系统中使用反斜杠(\\)时
- 如果遇到权限问题,请确保应用程序有权访问指定的文件和目录
- 对于复杂的 FFmpeg 命令,可以使用 `options` 或 `extraOptions` 参数传递额外的命令行选项
- 如果提取的图像质量不佳,尝试使用 PNG 格式并设置较高的质量值(95-99)

## 开发

### 项目结构

项目采用模块化结构,便于维护和扩展:

- `src/index.ts` - 主入口文件,设置 MCP 服务器
- `src/utils/file.ts` - 文件操作相关的工具函数
- `src/utils/ffmpeg.ts` - FFmpeg 相关的工具函数
- `src/tools/definitions.ts` - 工具定义
- `src/tools/handlers.ts` - 工具处理函数实现

### 调试

由于 MCP 服务器通过标准输入/输出进行通信,调试可能比较困难。建议使用控制台日志进行调试:

```javascript
console.log("调试信息");
```

### 扩展功能

要添加新的 FFmpeg 功能,请修改以下文件:

1. 在 `src/tools/definitions.ts` 中添加新工具的定义
2. 在 `src/tools/handlers.ts` 中添加相应的实现
3. 重新构建项目:`npm run build`

## 许可证

[MIT License](LICENSE)

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. For example, add_watermark modifies video content, convert_video changes format, create_video_from_images builds new video, extract_audio/ extract_frames extract different media types, get_video_info provides metadata, and trim_audio/ trim_video handle trimming of different file types. The descriptions make it easy to differentiate between all tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as add_watermark, convert_video, extract_audio, and trim_video. This predictable naming convention makes the tool set easy to navigate and understand, with no deviations in style or structure.

Tool Count5/5

With 8 tools, this server is well-scoped for video and audio processing tasks. Each tool serves a specific, useful function in the FFmpeg domain, such as conversion, extraction, trimming, and information retrieval, without being overly sparse or bloated.

Completeness4/5

The tool set covers core FFmpeg operations like conversion, trimming, extraction, and watermarking, with good coverage for video and audio workflows. A minor gap is the lack of tools for advanced editing (e.g., merging videos, adjusting filters), but agents can likely work around this with existing tools for basic processing needs.

Maintenance

ActivityInactive
ResponsivenessUnresponsive