MediaConvert 是一个高性能的智能媒体处理平台,专为大规模音视频转码和语音识别任务而设计。基于现代异步架构,支持多任务并发处理,提供完整的媒体文件处理解决方案。
采用生产者-消费者模式设计,通过统一任务调度器管理转码和转录任务:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ API 接口层 │ -> │ 统一任务调度器 │ -> │ 工作空间管理 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ v v v ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 任务创建 │ │ 并发处理 │ │ 结果存储 │ └─────────────────┘ └─────────────────┘ └─────────────────┘
# 拉取镜像
docker pull docker.cnb.cool/l8ai/document/mediaconvert:latest
# 运行容器
docker run -d \
--name mediaconvert \
--gpus all \
-p 80:80 \
-v $(pwd)/task_workspace:/app/task_workspace \
-v $(pwd)/.env:/app/.env \
docker.cnb.cool/l8ai/document/mediaconvert:latest
# 克隆项目
git clone <repository-url>
cd mediaconvert
# 安装 Python 依赖
pip install -r requirements.txt
# 安装 FFmpeg
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# macOS
brew install ffmpeg
# Windows (使用 Chocolatey)
choco install ffmpeg
复制并编辑环境配置文件:
cp .env.example .env
配置 S3 存储(必需):
# 下载服务配置 AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key S3_ENDPOINT_URL=http://your-s3-endpoint:9000 AWS_REGION=us-east-1 S3_ENABLED=true # 上传服务配置 UPLOAD_S3_ACCESS_KEY_ID=your_upload_access_key UPLOAD_S3_SECRET_ACCESS_KEY=your_upload_secret_key UPLOAD_S3_ENDPOINT_URL=http://your-s3-endpoint:9000 UPLOAD_S3_BUCKET=ai-file
# 启动 API 服务
python app/main.py
# 或使用 uvicorn
uvicorn app.main:app --host 0.0.0.0 --port 80
访问 API 文档:http://localhost/docs
检查服务健康状态:
curl http://localhost/api/tasks/health
📂 MediaConvert/ ├── 📁 app/ # 应用核心目录 │ ├── � api/ # API 接口层 │ │ ├── � models/ # 数据模型定义 │ │ │ ├── 📄 request_models.py # 请求模型 │ │ │ └── 📄 response_models.py # 响应模型 │ │ └── 📁 routers/ # 路由定义 │ │ ├── 🔍 health_check.py # 健康检查 │ │ ├── 🎬 transcode.py # 转码任务接口 │ │ └── �️ whisper.py # 语音识别接口 │ ├── � database/ # 数据库层 │ │ ├── 📄 models.py # 数据库模型 │ │ └── 📄 manager.py # 数据库管理器 │ ├── � processors/ # 任务处理器 │ │ └── � task_processor.py # 统一任务处理器 │ ├── 📁 services/ # 业务服务层 │ │ ├── � transcode_service.py # 转码服务 │ │ └── � whisper_service.py # 语音识别服务 │ ├── 📁 utils/ # 工具模块 │ │ ├── � file_utils.py # 文件操作工具 │ │ ├── � s3_utils.py # S3 存储工具 │ │ └── � workspace_manager.py # 工作空间管理 │ └── � main.py # 应用入口 ├── 📁 config/ # 配置文件 │ └── � settings.py # 系统配置 ├── � task_workspace/ # 任务工作空间 │ └── 📁 task_*/ # 各任务独立目录 │ ├── � input/ # 输入文件 │ ├── 📁 output/ # 输出文件 │ ├── 📁 logs/ # 任务日志 │ └── � temp/ # 临时文件 ├── � test/ # 测试脚本 │ └── � complete_test_8_tasks.sh # 8任务测试脚本 ├── � .env # 环境配置 ├── � requirements.txt # Python 依赖 └── 📄 Dockerfile # Docker 构建文件
curl http://localhost/api/tasks/health
# 转码任务
curl http://localhost/api/transcode/tasks/{task_id}/result
# 转录任务
curl http://localhost/api/whisper/tasks/result?task_id={task_id}
curl -X POST "http://localhost/api/tasks/create" \
-F "bucket=gaojiaqi" \
-F "file_path=path/to/video.mp4" \
-F "task_type=transcode" \
-F "transcode_type=mobile_high" \
-F "output_format=mp4" \
-F "priority=normal"
mobile_high: 移动端高清(720p, 2Mbps)pc_standard: PC标准(1080p, 4Mbps)audio_extract: 音频提取(M4A格式)curl -X POST "http://localhost/api/whisper/tasks/create" \
-F "bucket=gaojiaqi" \
-F "file_path=path/to/audio.wav" \
-F "language=zh" \
-F "priority=normal"
zh: 中文en: 英文auto: 自动检测| 输入格式 | 输出格式 | 文件大小 | 处理时间 | 吞吐量 |
|---|---|---|---|---|
| MP4 1080p | MP4 720p | 895MB | 72s | 12.4MB/s |
| MP4 1080p | M4A 音频 | 895MB | 45s | 19.9MB/s |
| MP4 4K | MP4 1080p | 2.1GB | 156s | 13.5MB/s |
| 音频时长 | 语言 | 处理时间 | 实时率 |
|---|---|---|---|
| 30分钟 | 中文 | 3.2分钟 | 9.4x |
| 60分钟 | 英文 | 5.8分钟 | 10.3x |
| 120分钟 | 混合 | 12.1分钟 | 9.9x |
# S3 存储配置 AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key S3_ENDPOINT_URL=http://your-s3-endpoint:9000 AWS_REGION=us-east-1 # 上传配置 UPLOAD_S3_ACCESS_KEY_ID=your_upload_key UPLOAD_S3_SECRET_ACCESS_KEY=your_upload_secret UPLOAD_S3_ENDPOINT_URL=http://your-s3-endpoint:9000 UPLOAD_S3_BUCKET=ai-file # 数据库配置 DB_TYPE=sqlite # 或 mysql MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USERNAME=root MYSQL_PASSWORD=password MYSQL_DB_NAME=mediaconvert # 服务配置 API_HOST=0.0.0.0 API_PORT=80 DEBUG=false LOG_LEVEL=INFO
TRANSCODE_PRESETS = {
"mobile_high": {
"video_codec": "libx264",
"video_bitrate": "2M",
"resolution": "1280x720",
"audio_codec": "aac",
"audio_bitrate": "128k"
},
"pc_standard": {
"video_codec": "libx264",
"video_bitrate": "4M",
"resolution": "1920x1080",
"audio_codec": "aac",
"audio_bitrate": "192k"
},
"audio_extract": {
"audio_codec": "aac",
"audio_bitrate": "192k",
"format": "m4a"
}
}
# 1. Fork 并克隆项目
git clone https://github.com/your-username/mediaconvert.git
cd mediaconvert
# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 3. 安装开发依赖
pip install -r requirements.txt
pip install -r requirements-dev.txt
# 4. 运行测试
pytest tests/
# 5. 启动开发服务器
python app/main.py
如果您发现任何问题或有改进建议,请:
本项目采用 MIT License 开源协议。
⭐ 如果这个项目对您有帮助,请给我们一个 Star!
🚀 让我们一起构建更好的媒体处理平台!