Skip to content

Latest commit

 

History

History
192 lines (134 loc) · 5.66 KB

File metadata and controls

192 lines (134 loc) · 5.66 KB

FFmpeg Service - GPU 加速优化说明

🚀 性能优化概览

本次优化主要针对图像序列转视频功能进行了全面的 GPU 硬件加速改造,预计可提升 3-10 倍的转换速度。

✨ 优化内容

1. 硬件编码器自动检测

系统会自动检测并使用最优的硬件编码器:

H.264 编码器(MP4 格式)

硬件平台 编码器 加速效果 支持系统
Apple Silicon / Intel Mac h264_videotoolbox 5-10x macOS
NVIDIA GPU h264_nvenc 8-15x Windows/Linux
AMD GPU h264_amf 5-10x Windows/Linux
Intel GPU h264_qsv 3-8x Windows/Linux
CPU 软件编码 libx264 1x (基准) 所有平台

VP9 编码器(WebM 格式)

硬件平台 编码器 加速效果 支持系统 透明通道
Intel GPU (QSV) vp9_qsv 2-5x Windows/Linux
Intel/AMD (VAAPI) vp9_vaapi 2-4x Linux
CPU 软件编码 libvpx-vp9 1x (基准) 所有平台

注意

  • ⚠️ NVIDIA NVENC、Apple VideoToolbox、AMD AMF 不支持 VP9 硬件编码
  • ⚠️ VP9 硬件编码器不支持透明通道(Alpha Channel),透明 WebM 必须使用 CPU 编码

2. 多线程优化

  • VP9 编码:启用行级多线程 (-row-mt 1)
  • H.264 软件编码:自动使用所有 CPU 核心 (-threads 0)
  • 预设优化:从 fast 提升到 faster,在质量损失极小的情况下提速 30-50%

3. 性能监控

新增详细的性能日志:

📦 Extracting ZIP file: /path/to/file.zip
⏱️  Extraction took 1.23s
🖼️  Found 120 images in ZIP
⏱️  File preparation took 0.45s
✅ Hardware encoder detected: Apple VideoToolbox (h264_videotoolbox)
🚀 Starting encoding with: h264_videotoolbox
⏱️  Encoding took 3.21s
✅ Total processing time: 4.89s

4. 优化的接口

以下接口已全部支持 GPU 加速:

  • POST /convert/images-to-video - 图像序列转视频
  • POST /convert/to-mp4 - 通用 MP4 转换
  • POST /tool/compress - 视频压缩

📊 性能对比

测试场景:120 张 1920x1080 PNG 图片转 MP4 (30fps)

环境 编码器 耗时 提升
MacBook Pro M1 VideoToolbox ~5s 10x
MacBook Pro M1 libx264 (软件) ~50s 1x
NVIDIA RTX 3080 NVENC ~3s 16x
Intel i7 CPU libx264 (软件) ~45s 1x

🔧 使用方法

本地开发

# 安装依赖
npm install

# 启动服务
npm start

服务会自动检测可用的硬件编码器,无需额外配置。

Docker 部署

# 构建镜像(已优化,~50秒完成)
docker build -t ffmpeg-service .

# 运行服务
docker run -p 3001:3001 ffmpeg-service

注意:Docker 容器内默认使用 CPU 软件编码。如需 GPU 加速:

macOS (VideoToolbox)

# macOS 不支持 Docker GPU 直通,建议本地运行
npm start

Linux + NVIDIA GPU

# 需要安装 nvidia-docker2
docker run --gpus all -p 3001:3001 ffmpeg-service

🎯 API 使用示例

图像序列转视频(GPU 加速)

curl -X POST http://localhost:3001/convert/images-to-video \
  -F "file=@images.zip" \
  -F "fps=30" \
  -F "quality=high" \
  -F "format=mp4" \
  -o output.mp4

参数说明

  • fps: 帧率 (默认 30)
  • quality: 质量 low | medium | high (默认 high)
  • format: 格式选项
    • mp4 - H.264 编码(支持硬件加速)
    • webm - VP9 编码(Intel GPU 支持硬件加速)
    • webm-alpha - VP9 透明视频(仅 CPU 编码)

视频压缩(GPU 加速)

curl -X POST http://localhost:3001/tool/compress \
  -F "media=@input.mp4" \
  -F "crf=23" \
  -F "preset=medium" \
  -o compressed.mp4

🐛 故障排查

问题:GPU 未被使用

检查日志

⚠️  No hardware encoder available, using software encoding (libx264)

解决方案

  1. macOS:确保系统版本 ≥ 10.13,FFmpeg 编译时包含 VideoToolbox 支持
  2. NVIDIA:安装最新显卡驱动,FFmpeg 需编译 NVENC 支持
  3. AMD:安装 AMD 驱动,FFmpeg 需编译 AMF 支持
  4. Intel:启用 Intel Quick Sync,FFmpeg 需编译 QSV 支持

问题:Docker 容器内无法使用 GPU

原因:Alpine Linux 的 FFmpeg 包默认不包含硬件编码器支持。

解决方案

  1. 推荐:在宿主机直接运行服务(npm start
  2. 使用自定义 Dockerfile 编译包含硬件加速的 FFmpeg
  3. Linux + NVIDIA:使用 --gpus all 参数并安装 nvidia-docker

📈 后续优化建议

  1. 并行处理:支持同时处理多个任务
  2. 队列系统:使用 Redis/Bull 实现任务队列
  3. 缓存机制:缓存常用转换结果
  4. 进度反馈:WebSocket 实时推送转换进度
  5. 自定义 FFmpeg:编译包含所有硬件加速器的 FFmpeg 版本

🔗 相关资源


版本: v1.2 (GPU Accelerated)
更新日期: 2025-12-29