前言
在日常开发中,你是否遇到过这些问题:
📹 录制的 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 保持固定。



