logo
3
0
WeChat Login
docs: 彻底改写README-ZH.md

🎬 MediaConvert - 智能媒体处理平台

English | 简体中文


🌟 项目简介

MediaConvert 是一个高性能的智能媒体处理平台,专为大规模音视频转码和语音识别任务而设计。基于现代异步架构,支持多任务并发处理,提供完整的媒体文件处理解决方案。

🎯 核心功能

  • 🎥 视频转码:支持多种转码预设(移动端、PC端、音频提取等)
  • 🗣️ 语音识别:基于 Whisper 模型的高精度语音转文本
  • ☁️ S3 集成:支持从 S3 下载源文件,处理后上传结果
  • ⚡ 异步处理:高并发任务调度,支持优先级管理
  • 📊 任务管理:完整的任务生命周期管理和状态跟踪
  • 🔧 工作空间:独立的任务工作空间,确保文件隔离和管理

🏗️ 系统架构

采用生产者-消费者模式设计,通过统一任务调度器管理转码和转录任务:

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ API 接口层 │ -> │ 统一任务调度器 │ -> │ 工作空间管理 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ v v v ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 任务创建 │ │ 并发处理 │ │ 结果存储 │ └─────────────────┘ └─────────────────┘ └─────────────────┘

✨ 核心特性

🚀 高性能处理

  • 异步架构:基于 FastAPI + asyncio,支持高并发请求处理
  • GPU 加速:支持 NVIDIA GPU 加速转码和语音识别
  • 并发调度:统一任务调度器,智能分配转码和转录任务
  • 资源优化:独立工作空间管理,避免文件冲突

🎬 专业转码

  • 多种预设:移动端高清、PC标准、音频提取等预设
  • 格式支持:MP4、M4A、WAV 等主流格式
  • 质量控制:可配置码率、分辨率、帧率等参数
  • 批量处理:支持多文件并发转码

🗣️ 智能语音识别

  • Whisper 模型:基于 OpenAI Whisper large-v3 模型
  • 多语言支持:支持中文、英文等多种语言识别
  • 高精度输出:提供详细的时间戳和置信度信息
  • 实时处理:异步处理,支持长音频文件

☁️ 云存储集成

  • 双 S3 配置:支持下载源和上传目标分离
  • 自动上传:处理完成后自动上传到指定 S3 存储桶
  • 文件管理:完整的文件生命周期管理
  • 安全传输:支持加密传输和访问控制

📊 任务管理

  • 状态跟踪:实时任务状态监控和更新
  • 优先级调度:支持高、中、低优先级任务
  • 错误处理:自动重试机制和详细错误日志
  • 进度监控:实时处理进度和性能统计

🎯 应用场景

📺 媒体内容处理

  • 视频平台:短视频、直播回放的多格式转码
  • 教育培训:课程视频的格式适配和字幕生成
  • 企业会议:会议录音的转录和归档
  • 内容创作:自媒体内容的批量处理

🏢 企业级应用

  • 媒体资产管理:大规模媒体文件的标准化处理
  • 客服系统:通话录音的自动转录和分析
  • 合规审计:音视频内容的文本化存档
  • 多语言支持:国际化内容的本地化处理

☁️ 云服务集成

  • CDN 分发:多格式内容的自动生成和分发
  • 存储优化:不同质量版本的智能生成
  • API 服务:为第三方应用提供媒体处理能力
  • 微服务架构:作为媒体处理微服务集成到现有系统

� 功能特性

📋 任务管理

  • 统一任务创建:支持文件上传和 S3 文件路径两种方式
  • 任务类型支持:转码(transcode)和转录(transcribe)
  • 优先级调度:高、中、低三级优先级管理
  • 状态跟踪:实时任务状态监控和进度查询
  • 批量处理:支持多任务并发执行

🎬 视频转码

  • 多种预设:移动端高清、PC标准、音频提取
  • 格式转换:MP4、M4A、WAV 等格式支持
  • 参数控制:码率、分辨率、帧率等精细控制
  • GPU 加速:NVIDIA GPU 硬件加速支持

🗣️ 语音识别

  • Whisper 模型:基于 OpenAI Whisper large-v3
  • 多语言识别:中文、英文等多语言支持
  • 参数调优:温度、阈值等推理参数可调
  • 时间戳输出:精确的时间戳和分段信息

☁️ 存储集成

  • S3 下载:从指定 S3 存储桶下载源文件
  • S3 上传:处理结果自动上传到目标存储桶
  • 工作空间管理:独立的任务工作目录
  • 文件清理:自动清理临时文件和过期数据

🔧 系统功能

  • 健康检查:系统状态监控接口
  • 错误处理:详细的错误信息和重试机制
  • 日志记录:完整的操作日志和审计跟踪
  • 配置管理:灵活的环境配置和参数调整

� 快速部署

📦 Docker 部署(推荐)

# 拉取镜像 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

🛠️ 源码部署

1. 环境要求

  • Python: 3.11+
  • FFmpeg: 音视频处理工具
  • CUDA: GPU 加速(可选)

2. 安装依赖

# 克隆项目 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

3. 配置环境

复制并编辑环境配置文件:

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

4. 启动服务

# 启动 API 服务 python app/main.py # 或使用 uvicorn uvicorn app.main:app --host 0.0.0.0 --port 80

5. 验证部署

访问 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 构建文件

🛠️ API 使用指南

📋 基础接口

健康检查

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: 自动检测

📊 性能测试

� 测试环境

  • CPU: Intel i7-12700K (12核24线程)
  • GPU: NVIDIA RTX 4090 24GB
  • 内存: 32GB DDR4
  • 存储: NVMe SSD

📈 性能指标

转码性能

输入格式输出格式文件大小处理时间吞吐量
MP4 1080pMP4 720p895MB72s12.4MB/s
MP4 1080pM4A 音频895MB45s19.9MB/s
MP4 4KMP4 1080p2.1GB156s13.5MB/s

语音识别性能

音频时长语言处理时间实时率
30分钟中文3.2分钟9.4x
60分钟英文5.8分钟10.3x
120分钟混合12.1分钟9.9x

🔄 并发测试

  • 8任务并发: 全部成功完成
  • 平均响应时间: 2.3秒
  • 任务调度延迟: <100ms
  • 内存使用: 峰值 8.2GB

🔧 配置说明

📝 环境变量

# 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" } }

🚧 开发路线图

🎯 近期计划

  • 批量任务处理: 支持一次性提交多个文件
  • 实时进度推送: WebSocket 实时进度通知
  • 任务模板: 预定义的任务配置模板
  • 性能监控: 系统资源使用情况监控

🔮 长期规划

  • 分布式部署: 多节点集群支持
  • 智能调度: 基于负载的智能任务分配
  • 插件系统: 可扩展的处理插件架构
  • Web 管理界面: 可视化的任务管理界面

🤝 贡献指南

🔧 开发环境搭建

# 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

📝 代码规范

  • 使用 Black 进行代码格式化
  • 使用 isort 进行导入排序
  • 使用 mypy 进行类型检查
  • 遵循 PEP 8 编码规范

🐛 问题反馈

如果您发现任何问题或有改进建议,请:

  1. 查看 Issues 是否已有相关问题
  2. 创建新的 Issue 并详细描述问题
  3. 提供复现步骤和环境信息

📄 许可证

本项目采用 MIT License 开源协议。

📞 联系我们


⭐ 如果这个项目对您有帮助,请给我们一个 Star!

🚀 让我们一起构建更好的媒体处理平台!