返回市场
罗杜马尼

罗杜马尼

作者:smilish676 星标更新:2025-06-05

项目介绍

基于Remotion的视频编辑MCP服务器

基于Remotion的网络视频编辑平台,通过MCP(模型上下文协议)服务器提供直接的编辑功能。

🎯 主要功能

1. 媒体文件管理

  • 文件上传:支持视频、音频、图像文件
  • 元数据提取:自动提取分辨率、持续时间、文件大小等信息
  • 缩略图生成:自动生成视频及图像文件的缩略图
  • 文件格式支持:MP4、MOV、AVI、MP3、WAV、JPG、PNG等

2. 时间线编辑

  • 多轨道支持:独立管理视频、音频、字幕轨道
  • 精确的时间调整:可进行帧级编辑
  • 拖放操作:直观的媒体放置
  • 实时预览:在编辑过程中即时查看结果

3. 编辑操作

  • 剪切:通过调整起始/结束点来编辑片段长度
  • 分割:在特定位置将片段分为两部分
  • 移动:在时间线上移动片段位置
  • 解决重叠:自动整理冲突的片段
  • 撤销/重做:可以撤销所有编辑操作

4. 布局与排列

  • 2D变换:调整位置、大小、旋转、透明度
  • 层管理:分层排列多个媒体
  • 关键帧动画:随时间变化的属性
  • 过渡效果:淡入、淡出、滑动等

🏗️ 架构

核心组件

1. MediaFileManager (src/utils/mediaUtils.ts)

// 管理媒体文件的上传和管理
const mediaManager = new MediaFileManager();
const mediaFile = await mediaManager.uploadFile(file);

2. TimelineManager (src/utils/timelineUtils.ts)

// 管理时间线和编辑操作
const timeline = new TimelineManager(30); // 30fps
const track = timeline.createTrack('Video Track', 'video');
timeline.addItemToTrack(trackId, mediaItem);

3. MCPVideoEditingServer (src/api/mcpInterface.ts)

// MCP服务器接口
const server = new MCPVideoEditingServer();
const sessionId = server.createSession();
const response = await server.handleRequest(mcpRequest);

MCP API端点

会话管理

  • session.create:创建新的编辑会话
  • session.delete:删除会话
  • session.list:列出活动会话

媒体管理

  • media.upload:上传文件
  • media.list:查询媒体库
  • media.delete:删除文件
  • media.get_info:查询文件信息

时间线编辑

  • timeline.create_track:创建新轨道
  • timeline.add_item:向轨道添加媒体
  • timeline.move_item:移动片段
  • timeline.trim_item:修剪片段
  • timeline.split_item:分割片段
  • timeline.get_state:获取当前时间线状态

编辑操作

  • edit.undo:撤销
  • edit.redo:重做
  • render.export:导出视频

🚀 开始使用

安装

npm install

启动开发服务器

npm run dev

构建

npm run build

💻 使用示例

基本编辑工作流程

// 1. 初始化MCP客户端
const client = new MCPClient('http://localhost:3000/mcp');
await client.startSession();

// 2. 上传媒体文件
const mediaFile = await client.uploadMedia(fileData, 'video.mp4', 'video/mp4');

// 3. 创建轨道并添加媒体
const track = await client.createTrack('Main Video', 'video');
const mediaItem = await client.addToTimeline(track.id, mediaFile.id, 0);

// 4. 编辑操作
await client.trimItem(track.id, mediaItem.id, 30, 180); // 只使用30-180帧区间

// 5. 导出
const exportId = await client.exportVideo('mp4', 'high');

高级编辑功能

// 关键帧动画
const keyframeManager = new KeyframeManager();
keyframeManager.addKeyframe(itemId, {
  frame: 0,
  property: 'opacity',
  value: 0,
  easing: 'ease-in'
});
keyframeManager.addKeyframe(itemId, {
  frame: 30,
  property: 'opacity',
  value: 1,
  easing: 'ease-in'
});

// 计算当前帧的值
const currentOpacity = keyframeManager.getValue(itemId, 15, 'opacity'); // 0.5

🎨 组件结构

MyComposition

主视频合成,渲染所有媒体元素。

<MyComposition 
  mediaItems={mediaItems}
  timelineControls={timelineControls}
/>

EditorDemo

编辑界面演示组件。

<EditorDemo 
  width={1280}
  height={720}
  fps={30}
/>

📁 项目结构

src/
├── Composition.tsx          # 主视频合成
├── Root.tsx                 # Remotion根组件
├── utils/
│   ├── mediaUtils.ts        # 媒体文件管理工具
│   └── timelineUtils.ts     # 时间线编辑工具
├── api/
│   └── mcpInterface.ts      # MCP服务器接口
└── demo/
    └── EditorDemo.tsx       # 编辑演示组件

🙏 致谢