mirror of
https://github.com/hybridgroup/gocv
synced 2025-08-25 08:41:04 +08:00

* build: add workflow to build static docker images based on Alpine * docker: Docker image with OpenCV targeting alpine that is fully static * docker: split up docker images for ffmpeg, gstreamer, and opencv --------- Signed-off-by: deadprogram <ron@hybridgroup.com>
137 lines
4.3 KiB
Docker
137 lines
4.3 KiB
Docker
# syntax=docker/dockerfile:1.3
|
|
|
|
# To build release:
|
|
# docker buildx build -f Dockerfile.ffmpeg-static-alpine -t ghcr.io/hybridgroup/ffmpeg:5.16-alpine --platform=linux/arm64,linux/amd64 --load .
|
|
|
|
# linux/amd64 build
|
|
FROM --platform=linux/amd64 alpine:3.20 AS builder-amd64
|
|
|
|
WORKDIR /
|
|
|
|
ARG FFMPEG_VERSION=5.1.6
|
|
ARG XZ_VERSION=5.6.3
|
|
|
|
# download xz
|
|
RUN wget -O xz-${XZ_VERSION}.tar.bz2 "https://github.com/tukaani-project/xz/releases/download/v${XZ_VERSION}/xz-${XZ_VERSION}.tar.bz2" && \
|
|
tar -xf xz-${XZ_VERSION}.tar.bz2
|
|
|
|
# download bzip2
|
|
RUN wget -O bzip2-master.tar.bz2 "https://gitlab.com/bzip2/bzip2/-/archive/master/bzip2-master.tar.bz2" && \
|
|
tar -xf bzip2-master.tar.bz2
|
|
|
|
# download ffmpeg source
|
|
RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2" && \
|
|
tar -xf ffmpeg-5.0.tar.bz2
|
|
|
|
# Install dependencies
|
|
RUN apk update && apk add --no-cache \
|
|
build-base \
|
|
cmake \
|
|
git \
|
|
diffutils \
|
|
perl \
|
|
wget \
|
|
unzip \
|
|
pkgconfig \
|
|
libjpeg-turbo-dev \
|
|
libpng-dev \
|
|
libwebp-dev \
|
|
eigen-dev \
|
|
nasm yasm \
|
|
bzip2 xz zlib-dev x264-dev libvpx-dev \
|
|
opus-dev dav1d-dev python3
|
|
|
|
# Build and install xz
|
|
RUN cd xz-${XZ_VERSION} && \
|
|
./configure --disable-shared && \
|
|
make && make install
|
|
|
|
# Build and install bzip2
|
|
RUN cd bzip2-master && \
|
|
mkdir build && cd build && \
|
|
cmake .. -DCMAKE_BUILD_TYPE="Release" -DENABLE_STATIC_LIB=ON -DENABLE_LIB_ONLY=ON && \
|
|
cmake --build . --target install
|
|
|
|
# Build and install libvpx
|
|
RUN cd ffmpeg-${FFMPEG_VERSION} && \
|
|
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
|
|
cd libvpx && \
|
|
./configure --enable-static --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
|
|
make -j $(nproc --all) && make install
|
|
|
|
# Now finish building ffmpeg
|
|
RUN cd ffmpeg-${FFMPEG_VERSION} && \
|
|
./configure --pkg-config-flags="--static" \
|
|
--enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
|
|
--disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
|
|
make -j $(nproc --all) && make install
|
|
|
|
|
|
# linux/arm64 build
|
|
FROM --platform=linux/arm64 alpine:3.20 AS builder-arm64
|
|
|
|
WORKDIR /
|
|
|
|
ARG FFMPEG_VERSION=5.1.6
|
|
ARG XZ_VERSION=5.6.3
|
|
|
|
# download xz
|
|
RUN wget -O xz-${XZ_VERSION}.tar.bz2 "https://github.com/tukaani-project/xz/releases/download/v${XZ_VERSION}/xz-${XZ_VERSION}.tar.bz2" && \
|
|
tar -xf xz-${XZ_VERSION}.tar.bz2
|
|
|
|
# download bzip2
|
|
RUN wget -O bzip2-master.tar.bz2 "https://gitlab.com/bzip2/bzip2/-/archive/master/bzip2-master.tar.bz2" && \
|
|
tar -xf bzip2-master.tar.bz2
|
|
|
|
# download ffmpeg source
|
|
RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2" && \
|
|
tar -xf ffmpeg-5.0.tar.bz2
|
|
|
|
# Install dependencies
|
|
RUN apk update && apk add --no-cache \
|
|
build-base \
|
|
cmake \
|
|
git \
|
|
diffutils \
|
|
perl \
|
|
wget \
|
|
unzip \
|
|
pkgconfig \
|
|
libjpeg-turbo-dev \
|
|
libpng-dev \
|
|
libwebp-dev \
|
|
eigen-dev \
|
|
nasm yasm \
|
|
bzip2 xz zlib-dev x264-dev libvpx-dev \
|
|
opus-dev dav1d-dev python3
|
|
|
|
# Build and install xz
|
|
RUN cd xz-${XZ_VERSION} && \
|
|
./configure --disable-shared && \
|
|
make && make install
|
|
|
|
# Build and install bzip2
|
|
RUN cd bzip2-master && \
|
|
mkdir build && cd build && \
|
|
cmake .. -DCMAKE_BUILD_TYPE="Release" -DENABLE_STATIC_LIB=ON -DENABLE_LIB_ONLY=ON && \
|
|
cmake --build . --target install
|
|
|
|
# Build and install libvpx
|
|
RUN cd ffmpeg-${FFMPEG_VERSION} && \
|
|
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
|
|
cd libvpx && \
|
|
./configure --enable-static --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
|
|
make -j $(nproc --all) && make install
|
|
|
|
# Now finish building ffmpeg
|
|
RUN cd ffmpeg-${FFMPEG_VERSION} && \
|
|
./configure --pkg-config-flags="--static" \
|
|
--enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
|
|
--disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
|
|
make -j $(nproc --all) && make install
|
|
|
|
# Stage 2: Create final image
|
|
FROM builder-${TARGETARCH} AS final
|
|
|
|
CMD ["ffmpeg"]
|