diff --git a/.github/workflows/build_base_alpine-vaapi.yaml b/.github/workflows/build_base_ubuntu-vaapi.yaml similarity index 75% rename from .github/workflows/build_base_alpine-vaapi.yaml rename to .github/workflows/build_base_ubuntu-vaapi.yaml index 42873fe..6b2924e 100644 --- a/.github/workflows/build_base_alpine-vaapi.yaml +++ b/.github/workflows/build_base_ubuntu-vaapi.yaml @@ -15,14 +15,14 @@ jobs: - uses: cardinalby/export-env-action@v1 with: - envFile: 'Build.alpine.env' + envFile: 'Build.ubuntu.env' export: 'true' expandWithJobEnv: 'true' expand: 'true' - uses: cardinalby/export-env-action@v1 with: - envFile: 'Build.alpine.vaapi.env' + envFile: 'Build.ubuntu.vaapi.env' export: 'true' expandWithJobEnv: 'true' expand: 'true' @@ -56,9 +56,10 @@ jobs: with: builder: ${{ steps.buildx.outputs.name }} context: . - file: ./Dockerfile.alpine.vaapi + file: ./Dockerfile.ubuntu.vaapi build-args: | BUILD_IMAGE=${{ env.OS_NAME }}:${{ env.OS_VERSION }} + DEPLOY_IMAGE=${{ env.OS_NAME }}:${{ env.OS_VERSION }} FREETYPE_VERSION=${{ env.FREETYPE_VERSION }} XML2_VERSION=${{ env.XML2_VERSION }} SRT_VERSION=${{ env.SRT_VERSION }} @@ -69,16 +70,6 @@ jobs: OPUS_VERSION=${{ env.OPUS_VERSION }} VORBIS_VERSION=${{ env.VORBIS_VERSION }} FFMPEG_VERSION=${{ env.FFMPEG_VERSION }} - LIBAV_VERSION=${{ env.LIBAV_VERSION }} - LIBVDPAU_VERSION=${{ env.LIBVDPAU_VERSION }} - MESA_VA_GALLIUM_VERSION=${{ env.MESA_VA_GALLIUM_VERSION }} - MESA_VDPAU_GALLIUM_VERSION=${{ env.MESA_VDPAU_GALLIUM_VERSION }} - LIBVA_VDPAU_DRIVER_VERSION=${{ env.LIBVA_VDPAU_DRIVER_VERSION }} - INTEL_GMMLIB_VERSION=${{ env.INTEL_GMMLIB_VERSION }} - INTEL_MEDIA_DRIVER_VERSION=${{ env.INTEL_MEDIA_DRIVER_VERSION }} - INTEL_MEDIA_SDK_VERSION=${{ env.INTEL_MEDIA_SDK_VERSION }} - INTEL_VAAPI_DRIVER=${{ env.INTEL_VAAPI_DRIVER }} - platforms: linux/amd64 push: true tags: | diff --git a/Build.alpine.vaapi.env b/Build.alpine.vaapi.env deleted file mode 100644 index 7a19e73..0000000 --- a/Build.alpine.vaapi.env +++ /dev/null @@ -1,10 +0,0 @@ -# FFMPEG VAAPI PACKAGES -LIBAV_VERSION=2.14.0-r0 -LIBVDPAU_VERSION=1.5-r0 -MESA_VA_GALLIUM_VERSION=22.2.2-r2 -MESA_VDPAU_GALLIUM_VERSION=22.2.2-r2 -LIBVA_VDPAU_DRIVER_VERSION=0.7.4-r2 -INTEL_GMMLIB_VERSION=22.1.3-r0 -INTEL_MEDIA_DRIVER_VERSION=22.6.1-r0 -INTEL_MEDIA_SDK_VERSION=22.5.4-r0 -INTEL_VAAPI_DRIVER=2.4.1-r0 \ No newline at end of file diff --git a/Build.ubuntu.vaapi.env b/Build.ubuntu.vaapi.env new file mode 100644 index 0000000..4e9b0d2 --- /dev/null +++ b/Build.ubuntu.vaapi.env @@ -0,0 +1 @@ +# FFMPEG VAAPI PACKAGES \ No newline at end of file diff --git a/Dockerfile.alpine.vaapi b/Dockerfile.alpine.vaapi deleted file mode 100644 index 057126e..0000000 --- a/Dockerfile.alpine.vaapi +++ /dev/null @@ -1,203 +0,0 @@ -ARG BUILD_IMAGE=alpine:3.15 - -FROM $BUILD_IMAGE as builder - -ARG LIBAV_VERSION=2.14.0-r0 -ARG LIBVDPAU_VERSION=1.5-r0 -ARG MESA_VA_GALLIUM_VERSION=21.3.8-r1 -ARG MESA_VDPAU_GALLIUM_VERSION=21.3.8-r1 -ARG LIBVA_VDPAU_DRIVER_VERSION=0.7.4-r2 -ARG INTEL_GMMLIB_VERSION=22.1.3-r0 -ARG INTEL_MEDIA_DRIVER_VERSION=22.4.2-r0 -ARG INTEL_MEDIA_SDK_VERSION=22.4.2-r0 -ARG INTEL_VAAPI_DRIVER=2.4.1-r0 - -ARG FREETYPE_VERSION=2.11.1-r2 -ARG SRT_VERSION=1.4.2-r1 -ARG X264_VERSION=20210613-r0 -ARG X265_VERSION=3.5-r0 -ARG VPX_VERSION=1.10.0-r0 -ARG LAME_VERSION=3.100-r0 -ARG OPUS_VERSION=1.3.1-r1 -ARG VORBIS_VERSION=1.3.7-r0 -ARG FBDEV_VERSION=0.5.0-r3 -ARG V4L_VERSION=1.22.1-r1 -ARG FFMPEG_VERSION=4.4.2 - -ENV PKG_CONFIG_PATH=/usr/lib/pkgconfig \ - SRC=/usr - -# install build packages -RUN apk add --update \ - autoconf \ - automake \ - bash \ - binutils \ - bzip2 \ - ca-certificates \ - cmake \ - coreutils \ - curl \ - diffutils \ - g++ \ - gcc \ - libgcc \ - libssl1.1 \ - libtool \ - linux-headers \ - make \ - musl-dev \ - nasm \ - openssl-dev \ - patch \ - tar \ - zlib-dev - -# install shared ffmpeg libs -RUN apk add -U \ - freetype-dev=${FREETYPE_VERSION} \ - libsrt-dev=${SRT_VERSION} \ - x264-dev=${X264_VERSION} \ - x265-dev=${X265_VERSION} \ - libvpx-dev=${VPX_VERSION} \ - lame-dev=${LAME_VERSION} \ - opus-dev=${OPUS_VERSION} \ - libvorbis-dev=${VORBIS_VERSION} \ - v4l-utils-dev=${V4L_VERSION} - -# install shared ffmpeg libs -RUN echo http://dl-2.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories -RUN apk add -U \ - libva-dev=${LIBAV_VERSION} \ - libvdpau-dev=${LIBVDPAU_VERSION} \ - libva-intel-driver=${INTEL_VAAPI_DRIVER} \ - mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \ - mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION} - -# install shared ffmpeg libs -RUN echo http://dl-2.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories -RUN apk add -U \ - intel-gmmlib-dev=${INTEL_GMMLIB_VERSION} \ - intel-media-driver-dev=${INTEL_MEDIA_DRIVER_VERSION} \ - intel-media-sdk-dev=${INTEL_MEDIA_SDK_VERSION} - -# install shared ffmpeg libs -RUN echo http://dl-2.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories -RUN apk add -U \ - libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION} - -# install and patch ffmpeg -RUN mkdir -p /dist && cd /dist && \ - curl -OLk http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \ - tar -xvz -f ffmpeg-${FFMPEG_VERSION}.tar.gz && \ - rm ffmpeg-${FFMPEG_VERSION}.tar.gz - -COPY ./contrib /contrib - -RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \ - patch -p1 < /contrib/ffmpeg-jsonstats.patch && \ - patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \ - ./configure \ - --extra-version=datarhei \ - --prefix="${SRC}" \ - --extra-libs="-lpthread -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl" \ - --enable-nonfree \ - --enable-gpl \ - --enable-version3 \ - --enable-static \ - --enable-openssl \ - --enable-libv4l2 \ - --enable-v4l2_m2m \ - --enable-libfreetype \ - --enable-libsrt \ - --enable-libx264 \ - --enable-libx265 \ - --enable-libvpx \ - --enable-libmp3lame \ - --enable-libopus \ - --enable-libvorbis \ - --enable-libmfx \ - --enable-vaapi \ - --enable-vdpau \ - --disable-ffplay \ - --disable-debug \ - --disable-doc \ - --disable-shared && \ - make -j$(nproc) && \ - make install - -# export shared ffmpeg libs - -RUN mkdir -p /ffmpeg/lib && \ - cp \ - /usr/lib/libfreetype.so.6 \ - /usr/lib/libbrotlidec.so.1 \ - /usr/lib/libbrotlicommon.so.1 \ - /usr/lib/libbz2.so.1 \ - /usr/lib/libpng16.so.16 \ - /usr/lib/libsrt.so.1.4 \ - /usr/lib/libx264.so.163 \ - /usr/lib/libx265.so.199 \ - /usr/lib/libnuma.so.1 \ - /usr/lib/libvpx.so.7 \ - /usr/lib/libmp3lame.so.0 \ - /usr/lib/libopus.so.0 \ - /usr/lib/libvorbis.so.0 \ - /usr/lib/libogg.so.0 \ - /usr/lib/libvorbisenc.so.2 \ - /usr/lib/libgcc_s.so.1 \ - /usr/lib/libstdc++.so.6 \ - /usr/lib/libxcb.so.1 \ - /usr/lib/libXau.so.6 \ - /usr/lib/libXdmcp.so.6 \ - /usr/lib/libbsd.so.0 \ - /usr/lib/libmd.so.0 \ - /usr/lib/libxcb-shm.so.0 \ - /usr/lib/libxcb-shape.so.0 \ - /usr/lib/libxcb-xfixes.so.0 \ - /usr/lib/libva.so.2 \ - /usr/lib/libmfx.so.1 \ - /usr/lib/libva-drm.so.2 \ - /usr/lib/libdrm.so.2 \ - /usr/lib/libvdpau.so.1 \ - /usr/lib/libXext.so.6 \ - /usr/lib/libX11.so.6 \ - /usr/lib/libva-x11.so.2 \ - /ffmpeg/lib - -FROM $BUILD_IMAGE as final - -COPY --from=builder /usr/bin/ffmpeg /usr/bin/ffmpeg -COPY --from=builder /ffmpeg/lib/* /usr/lib/ - -ARG MESA_VA_GALLIUM_VERSION=21.3.8-r1 -ARG MESA_VDPAU_GALLIUM_VERSION=21.3.8-r1 -ARG LIBVA_VDPAU_DRIVER_VERSION=0.7.4-r2 -ARG INTEL_MEDIA_DRIVER_VERSION=22.4.2-r0 -ARG INTEL_VAAPI_DRIVER=2.4.1-r0 - -ARG FBDEV_VERSION=0.5.0-r3 -ARG V4L_VERSION=1.22.1-r1 - -# install shared ffmpeg libs -RUN apk add --no-cache -U \ - ca-certificates \ - tzdata \ - xf86-video-fbdev=${FBDEV_VERSION} \ - v4l-utils=${V4L_VERSION} && \ - echo http://dl-2.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories && \ - apk add --no-cache -U \ - libva-intel-driver=${INTEL_VAAPI_DRIVER} \ - mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \ - mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION} && \ - echo http://dl-2.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \ - apk add --no-cache -U \ - intel-media-driver=${INTEL_MEDIA_DRIVER_VERSION} && \ - echo http://dl-2.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \ - apk add --no-cache -U \ - libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION} && \ - ffmpeg -buildconf - -WORKDIR /tmp -ENTRYPOINT ["/usr/bin/ffmpeg"] -CMD ["-version"] diff --git a/Dockerfile.ubuntu.vaapi b/Dockerfile.ubuntu.vaapi new file mode 100644 index 0000000..c0a852c --- /dev/null +++ b/Dockerfile.ubuntu.vaapi @@ -0,0 +1,234 @@ +ARG BUILD_IMAGE=ubuntu:20.04 +ARG DEPLOY_IMAGE=ubuntu:20.04 + +FROM $BUILD_IMAGE as builder + +ARG FREETYPE_VERSION=2.10.4 +ENV XML2_VERSION=2.9.14 +ARG SRT_VERSION=1.4.2 +ARG X264_VERSION=stable +ARG X265_VERSION=3.4 +ENV VPX_VERSION=1.11.0 +ARG LAME_VERSION=3.100 +ARG OPUS_VERSION=1.3.1 +ENV OGG_VERSION=1.3.5 +ARG VORBIS_VERSION=1.3.7 +ARG FFMPEG_VERSION=4.4.2 + +ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig +ENV SRC=/usr/local +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update -y && \ + apt-get install -y \ + pkg-config \ + curl \ + git \ + nasm \ + openssl \ + libssl-dev \ + cmake \ + yasm \ + build-essential \ + libtool \ + autoconf \ + libv4l-dev \ + libva-drm2 \ + libva2 \ + i965-va-driver + +# install x264 +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://code.videolan.org/videolan/x264/-/archive/stable/x264-${X264_VERSION}.tar.gz && \ + tar xfvz x264-${X264_VERSION}.tar.gz && \ + rm x264-${X264_VERSION}.tar.gz && \ + cd x264-${X264_VERSION}* && \ + ./configure \ + --SRC="${SRC}" \ + --bindir="${SRC}/bin" \ + --enable-shared && \ + make -j$(nproc) && \ + make install + +# install x265 +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://github.com/videolan/x265/archive/refs/tags/${X265_VERSION}.tar.gz && \ + tar xfvz ${X265_VERSION}.tar.gz && \ + rm ${X265_VERSION}.tar.gz && \ + cd x265-${X265_VERSION}/build/linux \ + sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_SRC=\${SRC}/" multilib.sh && \ + sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \ + ./multilib.sh && \ + make -C 8bit install && \ + rm -rf ${DIR} + +# install opus +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \ + tar xfvz opus-${OPUS_VERSION}.tar.gz && \ + rm opus-${OPUS_VERSION}.tar.gz && \ + cd opus-${OPUS_VERSION} && \ + autoreconf -fiv && \ + ./configure --prefix="${SRC}" \ + --enable-shared && \ + make && \ + make install + +# install ogg +RUN mkdir -p /dist && cd /dist && \ + curl -OLk http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \ + tar xfvz libogg-${OGG_VERSION}.tar.gz && \ + rm libogg-${OGG_VERSION}.tar.gz && \ + cd libogg-${OGG_VERSION} && \ + ./configure --prefix="${SRC}" \ + --enable-shared && \ + make && \ + make install + +# install vorbis +RUN mkdir -p /dist && cd /dist && \ + curl -OLk http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \ + tar xfvz libvorbis-${VORBIS_VERSION}.tar.gz && \ + rm libvorbis-${VORBIS_VERSION}.tar.gz && \ + cd libvorbis-${VORBIS_VERSION} && \ + ./configure --prefix="${SRC}" --with-ogg="${SRC}" \ + --enable-shared && \ + make && \ + make install + +# install libmp3lame +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz && \ + tar -xvz -f lame-${LAME_VERSION}.tar.gz && \ + rm lame-${LAME_VERSION}.tar.gz && \ + cd lame-${LAME_VERSION} && \ + ./configure \ + --prefix="${SRC}" \ + --bindir="${SRC}/bin" \ + --disable-static \ + --enable-nasm && \ + make -j$(nproc) && \ + make install + +# install vpx +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz && \ + tar xfvz v${VPX_VERSION}.tar.gz && \ + rm v${VPX_VERSION}.tar.gz && \ + cd libvpx-${VPX_VERSION} && \ + ./configure --prefix="${SRC}" \ + --enable-vp8 \ + --enable-vp9 \ + --enable-vp9-highbitdepth \ + --enable-pic \ + --enable-shared \ + --disable-debug \ + --disable-examples \ + --disable-docs \ + --disable-install-bins && \ + make && \ + make install + +# install freetype +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \ + tar xfvz freetype-${FREETYPE_VERSION}.tar.gz && \ + rm freetype-${FREETYPE_VERSION}.tar.gz && \ + cd freetype-${FREETYPE_VERSION} && \ + ./configure --prefix="${SRC}" \ + --disable-static \ + --enable-shared && \ + make && \ + make install + +# install srt +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://github.com/Haivision/srt/archive/refs/tags/v${SRT_VERSION}.tar.gz && \ + tar xfvz v${SRT_VERSION}.tar.gz && \ + rm v${SRT_VERSION}.tar.gz && \ + cd srt-${SRT_VERSION} && \ + cmake \ + -G "Unix Makefiles" \ + -DCMAKE_INSTALL_BINDIR="$SRC/bin" \ + -DCMAKE_INSTALL_INCLUDEDIR="$SRC/include" \ + -DCMAKE_INSTALL_LIBDIR="$SRC/lib" \ + -DCMAKE_INSTALL_SRC="$SRC" && \ + make && \ + make install + +# install libxml2 +RUN mkdir -p /dist && cd /dist && \ + curl -OLk https://github.com/GNOME/libxml2/archive/refs/tags/v${XML2_VERSION}.tar.gz && \ + tar xfvz v${XML2_VERSION}.tar.gz && \ + rm v${XML2_VERSION}.tar.gz && \ + cd libxml2-${XML2_VERSION} && \ + ./autogen.sh --prefix="${SRC}" \ + --with-ftp=no \ + --with-http=no \ + --with-python=no && \ + make && \ + make install + +# install and patch ffmpeg +RUN mkdir -p /dist && cd /dist && \ + curl -OLk http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \ + tar -xvz -f ffmpeg-${FFMPEG_VERSION}.tar.gz && \ + rm ffmpeg-${FFMPEG_VERSION}.tar.gz + +COPY ./contrib /contrib + +RUN apt-get install -y libva-dev + +RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \ + patch -p1 < /contrib/ffmpeg-jsonstats.patch && \ + patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \ + ./configure \ + --extra-version=datahrei \ + --prefix="${SRC}" \ + --enable-nonfree \ + --enable-gpl \ + --enable-version3 \ + --enable-postproc \ + --enable-static \ + --enable-openssl \ + --enable-libxml2 \ + --enable-vaapi \ + --enable-libv4l2 \ + --enable-libfreetype \ + --enable-libsrt \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libvpx \ + --enable-libmp3lame \ + --enable-libopus \ + --enable-libvorbis \ + --disable-ffplay \ + --disable-ffprobe \ + --disable-debug \ + --disable-doc && \ + make -j$(nproc) && \ + make install && \ + hash -r + +FROM $DEPLOY_IMAGE + +COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg +COPY --from=builder /usr/local/lib /usr/local/lib + +RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/ffmpeg.conf && \ + ldconfig && \ + apt-get update && \ + apt-get install -y \ + v4l-utils \ + fbset \ + libva-drm2 \ + libva2 \ + i965-va-driver && \ + ffmpeg -buildconf + +ENV NVIDIA_VISIBLE_DEVICES all +ENV NVIDIA_DRIVER_CAPABILITIES compute,video,utility + +WORKDIR /tmp +ENTRYPOINT ["/usr/local/bin/ffmpeg"] +CMD ["-version"] \ No newline at end of file