用途:面向容器化的 FFmpeg 部署,适用于需要统一 FFmpeg 版本的 CI/CD 流水线、多用户系统、生产转码服务、Kubernetes 视频处理任务以及 GPU 直通配置。
主要能力:
- 镜像选择。推荐 jrottenberg/ffmpeg,提供 7.1-ubuntu2404(约250MB,生产全功能)、7.1-alpine320(约100MB,最小化)、7.1-nvidia2404(约1.5GB,NVIDIA GPU)、7.1-vaapi2404(约300MB,Intel/AMD GPU)、7.1-scratch(约80MB,静态二进制)及 8.0-ubuntu2404。另有 linuxserver/ffmpeg(约150MB)与 mwader/static-ffmpeg。
- 基本用法。挂载目录后运行,例如:docker run --rm -v $(pwd):/data jrottenberg/ffmpeg:7.1-ubuntu2404 -i /data/input.mp4 -c:v libx264 -c:a aac /data/output.mp4。Windows PowerShell 使用反引号续行与 ${PWD};Git Bash 需设置 MSYS_NO_PATHCONV=1 防止路径转换。
- GPU 加速。NVIDIA 需安装 NVIDIA Container Toolkit,使用 --gpus all 与 -hwaccel cuda、-c:v h264_nvenc;可用 --gpus '"device=0"' 指定单卡或多卡。Intel/AMD 通过 --device=/dev/dri:/dev/dri 与 VAAPI(-hwaccel vaapi、-c:v h264_vaapi),AMD 还需 /dev/kfd 与 --group-add video。
- 自定义镜像。提供基于 ubuntu:24.04 的多阶段 Dockerfile,以及基于 nvidia/cuda:12.4 并编译 nv-codec-headers 的 NVIDIA 版本。
- 编排与部署。给出 Docker Compose 的简单转码服务、GPU 服务、监视文件夹处理示例,以及 Kubernetes Job 与 GPU Pod 清单。
- 优化与排查。建议输入只读挂载、tmpfs 临时目录、--cpus/--memory 资源限制、并行处理;常见问题包括输出权限(--user $(id -u):$(id -g))、GPU 未检测、路径转换、内存不足,并提供调试命令如 -version、-encoders、-hwaccels。
限制:资料未提供收费、价格与效果数据;GPU 加速需相应硬件与驱动支持,部分方案仅限 Linux。