利用 Dockers 静态编译 ffmpeg

利用 Dockers 静态编译 ffmpeg

这篇文章是关于在 Linux 下使用 Docker 编译适用于 x86_64 架构的 ffmpeg 可执行文件,不包括 Windows 相关的内容。也许以后会做也说不定。

常见问题 #

问:为什么要自己构建?
答:使用非自由非自由(non-free)授权的编码器 (如: fdk-aac)。

问:为什么要用 docker 来构建?
答:不用额外在宿主机配置环境,直接编译就行了。

问:如何确保编译出来的文件能跨平台运行?
答:使用静态构建(static build),将所有依赖内嵌到可执行文件里。

问:如何加入自己的编译参数或依赖?
答:直接建立一个新的 Dockerfile 并引入这个项目,或建立一个分支然后配置。

注意事项 #

因为包含了 non-free 的编解码器,因此编译后的文件只能自用而不能分享。

Docker 镜像 #

你可以访问 GitHub:JixunMoe/ffmpeg-builder 来获取构建镜像所使用的 Dockerfile,或是直接拉取在 GitHub Registry 上自动构建的镜像:

docker pull ghcr.io/jixunmoe/ffmpeg-builder/builder:gcc-10-x86-64

镜像准备好后就可以开始编译了:

# 编译后的文件储存到当前目录的 bin 目录内
OUTDIR="$(pwd)/bin"
mkdir -p "${OUTDIR}"
docker run --rm -v "${OUTDIR}:/build/bin" jixun/ffmpeg-builder

默认编译的版本是镜像编译时的最新版 (如 4.2.3)。

你也可以添加参数来指定想编译的版本(不保证能成功):

docker run --rm -v "${OUTDIR}:/build/bin" jixun/ffmpeg-builder 4.2.3

最后就能在 $OUTDIR 里找到编译好的 ffmpegffprobe 文件了。