GoalfyMediaConverter – 本地视频处理神器,告别云端转换的烦恼!

内容分享5天前发布
0 0 0

前言

在日常开发中,你是否遇到过这些问题:

📹 录制的 WebM 格式视频需要转成 MP4,但转换工具要么收费,要么需要上传到云端?💾 大文件上传总是失败,网络不稳定导致重传?🔒 视频内容涉及敏感信息,不想上传到第三方服务器?⏱️ 每次转换都要等待漫长的排队和下载?

今天给大家介绍一个完全本地运行的视频处理服务 —— GoalfyMediaConverter,一个用 Go 语言开发的高性能视频转换工具,让你的视频处理更快、更安全、更省心!

你好! 这是你第一### 核心功能概述

GoalfyMediaConverter 是一个基于 Go 语言开发的本地视频处理工具,提供高性能的视频转换、分片上传和切割功能。所有处理均在本地完成,无需依赖云端服务,确保数据隐私和安全。博主自己开发

安装与运行

开发环境运行
克隆项目仓库后执行以下命令:


git clone https://github.com/Ricardo-M-L/ffmpeg-binary.git
cd ffmpeg-binary
go mod download
go run main.go

服务默认监听
http://127.0.0.1:28888

生产环境部署

macOS:通过脚本构建 pkg安装包并安装自启动服务Windows:通过脚本构建exe安装包后运行安装批处理文件

examples/demo.html,这个文件可以用来转化webm为mp4

分片上传流程

初始化上传任务:


const initRes = await fetch(`${API_BASE}/upload/init`, {
  method: 'POST',
  body: JSON.stringify({
    fileName: 'demo.webm',
    fileSize: file.size,
    totalChunks: Math.ceil(file.size / chunkSize),
    chunkSize: 1024000
  })
});

分片上传文件切片:


const formData = new FormData();
formData.append('file', chunk);
formData.append('uploadId', uploadId);
formData.append('chunkIndex', i);
await fetch(`${API_BASE}/upload/chunk`, {
  method: 'POST',
  body: formData
});

视频转换操作

启动转换任务:


const convertRes = await fetch(`${API_BASE}/convert/start`, {
  method: 'POST',
  body: JSON.stringify({
    uploadId: uploadId,
    outputFormat: 'mp4',
    quality: 'medium'
  })
});

查询转换进度:


const progressRes = await fetch(`${API_BASE}/progress/${taskId}`);
const progress = await progressRes.json();
console.log(`转换进度: ${progress.data.progress}%`);

技术架构

开发语言:Go 1.24+核心框架:Gin HTTP 框架视频处理:FFmpeg 支持 GPU 加速并发模型:Goroutines 和 Channels跨平台支持:macOS/Windows/Linux

自动安装特性

首次运行时自动检测并安装 FFmpeg:

macOS:通过 Homebrew 安装Windows/Linux:自动下载预编译二进制文件
安装路径示例:
/opt/homebrew/bin/ffmpeg

视频切割功能

按时间范围切割视频:


POST /api/split/start
{
  "uploadId": "xxx",
  "startTime": "00:00:10",
  "endTime": "00:01:30",
  "outputFormat": "mp4",
  "quality": "medium"
}

进度监控接口

统一进度查询接口:


GET /api/progress/:id

响应包含任务类型、状态、进度百分比和输出路径等信息。

服务管理

支持各平台自启动:

macOS:LaunchAgentWindows:Windows ServiceLinux:systemd
默认端口 28888 保持固定。### 核心功能概述

GoalfyMediaConverter 是一个基于 Go 语言开发的本地视频处理工具,提供高性能的视频转换、分片上传和切割功能。所有处理均在本地完成,无需依赖云端服务,确保数据隐私和安全。

安装与运行

开发环境运行
克隆项目仓库后执行以下命令:


git clone <your-repo-url>
cd ffmpeg-binary
go mod download
go run main.go

服务默认监听
http://127.0.0.1:28888

生产环境部署

macOS:通过脚本构建 DMG 安装包并安装自启动服务Windows:执行构建脚本后运行安装批处理文件

分片上传流程

初始化上传任务:


const initRes = await fetch(`${API_BASE}/upload/init`, {
  method: 'POST',
  body: JSON.stringify({
    fileName: 'demo.webm',
    fileSize: file.size,
    totalChunks: Math.ceil(file.size / chunkSize),
    chunkSize: 1024000
  })
});

分片上传文件切片:


const formData = new FormData();
formData.append('file', chunk);
formData.append('uploadId', uploadId);
formData.append('chunkIndex', i);
await fetch(`${API_BASE}/upload/chunk`, {
  method: 'POST',
  body: formData
});

视频转换操作

启动转换任务:


const convertRes = await fetch(`${API_BASE}/convert/start`, {
  method: 'POST',
  body: JSON.stringify({
    uploadId: uploadId,
    outputFormat: 'mp4',
    quality: 'medium'
  })
});

查询转换进度:


const progressRes = await fetch(`${API_BASE}/progress/${taskId}`);
const progress = await progressRes.json();
console.log(`转换进度: ${progress.data.progress}%`);

技术架构

开发语言:Go 1.24+核心框架:Gin HTTP 框架视频处理:FFmpeg 支持 GPU 加速并发模型:Goroutines 和 Channels跨平台支持:macOS/Windows/Linux

自动安装特性

首次运行时自动检测并安装 FFmpeg:

macOS:通过 Homebrew 安装Windows/Linux:自动下载预编译二进制文件
安装路径示例:
/opt/homebrew/bin/ffmpeg

视频切割功能

按时间范围切割视频:


POST /api/split/start
{
  "uploadId": "xxx",
  "startTime": "00:00:10",
  "endTime": "00:01:30",
  "outputFormat": "mp4",
  "quality": "medium"
}

进度监控接口

统一进度查询接口:


GET /api/progress/:id

响应包含任务类型、状态、进度百分比和输出路径等信息。

服务管理

支持各平台自启动:

macOS:LaunchAgentWindows:Windows ServiceLinux:systemd
默认端口 28888 保持固定。

© 版权声明

相关文章

暂无评论

none
暂无评论...