FFmpeg在Docker环境中无法正常生成视频文件问题
问题:Docker环境下FFmpeg从PNG生成视频失败,仅生成48字节空文件
目标
从PNG文件生成视频文件。
执行的FFmpeg命令
command: ffmpeg args: [ "-nostdin", "-v", "error", "-stats", "-hide_banner", "-y", "-f", "lavfi", "-i", "color=c=black:size=1080x1350", "-f", "image2pipe", "-c:v", "png", "-r", "25", "-i", "-", "-filter_complex", "[0:v][1:v]overlay[o];[o]scale=1080:-2:flags=bicubic[out]", "-map", "[out]", "-c:v", "libx264", "-profile:v", "main", "-preset", "medium", "-crf", "20", "-movflags", "faststart", "-pix_fmt", "yuv420p", "-r", "25", "-frames:v", "175", "/Users/tk/projects/lottie-to-mp4/files/xv-DIcVz0rYPZjXalgrnzmkPbqHLe9_generated.mp4" ]
问题现象
- 该命令在本地Mac机器上可正常运行,生成的视频文件大小为3286531字节
- 在Docker环境中执行后,生成的视频文件大小始终为48字节(仅含MP4文件头的无效空文件)
视频路径生成代码
const relevantPath = "../../files"; const videoFilePath = path.resolve(__dirname, relevantPath, `${ generatedFileName }_generated.mp4`);
排查方向
FFmpeg编码器支持问题
- 检查Docker镜像中的FFmpeg是否编译了
libx264编码器,执行ffmpeg -codecs | grep libx264验证;部分基础镜像默认未包含该编码器,会导致视频编码失败生成空文件 - 对比本地与Docker中FFmpeg的版本差异,低版本可能不支持命令中的部分参数
- 检查Docker镜像中的FFmpeg是否编译了
标准输入流问题
- 命令通过
-i -从标准输入读取PNG数据流,需确认Docker环境中是否正确将PNG数据传入FFmpeg的标准输入;若输入为空,FFmpeg会生成仅含文件头的48字节空文件
- 命令通过
路径与权限问题
- 检查Docker容器内的视频输出路径是否存在,容器是否拥有该路径的写入权限
- 确认
path.resolve生成的路径在容器内是否有效,避免因目录映射错误导致文件写入到不存在的路径或容器外部
日志排查
- 暂时移除
-v error参数,改为-v info或-v debug,查看Docker中FFmpeg执行时的详细日志,定位具体错误原因
- 暂时移除
内容的提问来源于stack exchange,提问作者RaShe
相关产品推荐
相关产品推荐

