From 448bc5b5a028b011f4c109b7d518da342925346f Mon Sep 17 00:00:00 2001 From: Tim Kamau Date: Mon, 6 Mar 2023 17:16:28 +0300 Subject: [PATCH 1/5] install and enable libzimg flag --- nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile | 16 ++++++++++++++++ .../cloudbuild.yaml | 9 +++++++++ 2 files changed, 25 insertions(+) create mode 100644 nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile index 7b5643c..284afad 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile @@ -60,6 +60,21 @@ FROM base as ffmpeg-builder RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm # Ffmpeg WORKDIR /src +RUN apt-get update -y && apt-get install -y wget openssl cmake libevent-dev libjpeg-dev libgif-dev libpng-dev libwebp-dev libmagickwand-dev imagemagick libmemcached-dev +RUN wget http://www.imagemagick.org/download/ImageMagick-7.1.0-62.tar.gz && \ + tar zxvf ImageMagick-7.1.0-62.tar.gz && \ + cd ImageMagick-7.1.0-62 && \ + ./configure --prefix=/usr/local && \ + make && make install +ARG ZIMG_VERSION=2.7.0 +ARG ZIMG_URL="https://github.com/sekrit-twc/zimg/archive/release-$ZIMG_VERSION.tar.gz" +ARG ZIMG_SHA256=219d1bc6b7fde1355d72c9b406ebd730a4aed9c21da779660f0a4c851243e32f +RUN \ + wget $WGET_OPTS -O zimg.tar.gz "$ZIMG_URL" && \ + echo "$ZIMG_SHA256 zimg.tar.gz" | sha256sum --status -c - && \ + tar xf zimg.tar.gz && \ + cd zimg-* && ./autogen.sh && ./configure --disable-shared --enable-static && \ + make -j$(nproc) install RUN git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1 && cd SVT-AV1/Build && cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release \ && make -j $(nproc) && make install # Install libaom from source. @@ -88,6 +103,7 @@ RUN git clone https://github.com/FFmpeg/FFmpeg -b release/5.1 && \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ + --enable-libzimg \ --enable-nonfree \ --enable-nvenc \ --enable-opencl \ diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml b/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml new file mode 100644 index 0000000..4d180d3 --- /dev/null +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml @@ -0,0 +1,9 @@ +substitutions: + _CLOUDSDK_COMPUTE_REGION: us-central1 + _GCLOUD_PROJECT: cloudkite-public + _GCR_REGISTRY: nvidia-php8.1-fpm-ffmpeg-bullseye +steps: +- name: 'gcr.io/cloud-builders/docker' + args: [ 'build', '-t', 'us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${COMMIT_SHA}', '.' ] +images: +- us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${COMMIT_SHA} \ No newline at end of file From 0482b7b1b119123c1e0743f3a07e617bd6d24790 Mon Sep 17 00:00:00 2001 From: Tim Kamau Date: Tue, 7 Mar 2023 00:22:14 +0300 Subject: [PATCH 2/5] install prebuilt libzimg --- nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile | 21 +++++-------------- nvidia-php8.1-fpm-ffmpeg-bullseye/README.md | 5 +++++ .../cloudbuild.yaml | 6 +++--- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile index 284afad..bba80d1 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile @@ -57,24 +57,13 @@ RUN apt install -y \ # Use base image to build ffmpeg binary FROM base as ffmpeg-builder # Install build tools -RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm +RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm software-properties-common # Ffmpeg WORKDIR /src -RUN apt-get update -y && apt-get install -y wget openssl cmake libevent-dev libjpeg-dev libgif-dev libpng-dev libwebp-dev libmagickwand-dev imagemagick libmemcached-dev -RUN wget http://www.imagemagick.org/download/ImageMagick-7.1.0-62.tar.gz && \ - tar zxvf ImageMagick-7.1.0-62.tar.gz && \ - cd ImageMagick-7.1.0-62 && \ - ./configure --prefix=/usr/local && \ - make && make install -ARG ZIMG_VERSION=2.7.0 -ARG ZIMG_URL="https://github.com/sekrit-twc/zimg/archive/release-$ZIMG_VERSION.tar.gz" -ARG ZIMG_SHA256=219d1bc6b7fde1355d72c9b406ebd730a4aed9c21da779660f0a4c851243e32f -RUN \ - wget $WGET_OPTS -O zimg.tar.gz "$ZIMG_URL" && \ - echo "$ZIMG_SHA256 zimg.tar.gz" | sha256sum --status -c - && \ - tar xf zimg.tar.gz && \ - cd zimg-* && ./autogen.sh && ./configure --disable-shared --enable-static && \ - make -j$(nproc) install +# install libzimg +RUN add-apt-repository "deb http://www.deb-multimedia.org bullseye main" && \ + apt-get update -oAcquire::AllowInsecureRepositories=true && apt-get install -y deb-multimedia-keyring --allow-unauthenticated && \ + apt-get update && apt-get install -y libzimg-dev RUN git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1 && cd SVT-AV1/Build && cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release \ && make -j $(nproc) && make install # Install libaom from source. diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/README.md b/nvidia-php8.1-fpm-ffmpeg-bullseye/README.md index 67d369f..35d213f 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/README.md +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/README.md @@ -3,3 +3,8 @@ ```shell docker build --target=nvidia-php-ffmpeg -t us.gcr.io/cloudkite-public/nvidia-php8.1-fpm-ffmpeg-bullseye . ``` +### Building with cloudbuild +Substitute `_IMAGE_TAG` value with an appropriate value for tagging the built docker image, it defaults to `latest`. +``` +gcloud builds submit --project=cloudkite-public --config cloudbuild.yaml --substitutions=_IMAGE_TAG="" --timeout=2h +``` diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml b/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml index 4d180d3..2526f76 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/cloudbuild.yaml @@ -1,9 +1,9 @@ substitutions: - _CLOUDSDK_COMPUTE_REGION: us-central1 _GCLOUD_PROJECT: cloudkite-public _GCR_REGISTRY: nvidia-php8.1-fpm-ffmpeg-bullseye + _IMAGE_TAG: latest steps: - name: 'gcr.io/cloud-builders/docker' - args: [ 'build', '-t', 'us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${COMMIT_SHA}', '.' ] + args: [ 'build', '-t', 'us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${_IMAGE_TAG}', '.' ] images: -- us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${COMMIT_SHA} \ No newline at end of file +- us.gcr.io/${_GCLOUD_PROJECT}/${_GCR_REGISTRY}:${_IMAGE_TAG} From ae8ed9c786cc289af35250a6f7c8dced7ccbf0dc Mon Sep 17 00:00:00 2001 From: Tim Kamau Date: Wed, 8 Mar 2023 18:59:01 +0300 Subject: [PATCH 3/5] run ldconfig --- nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile index bba80d1..898dbf0 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile @@ -60,10 +60,6 @@ FROM base as ffmpeg-builder RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm software-properties-common # Ffmpeg WORKDIR /src -# install libzimg -RUN add-apt-repository "deb http://www.deb-multimedia.org bullseye main" && \ - apt-get update -oAcquire::AllowInsecureRepositories=true && apt-get install -y deb-multimedia-keyring --allow-unauthenticated && \ - apt-get update && apt-get install -y libzimg-dev RUN git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1 && cd SVT-AV1/Build && cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release \ && make -j $(nproc) && make install # Install libaom from source. @@ -71,6 +67,10 @@ RUN git clone https://aomedia.googlesource.com/aom && cmake ./aom && \ make && make install RUN git clone https://github.com/FFmpeg/nv-codec-headers.git -b old/sdk/9.0 && cd nv-codec-headers && \ make && make install +# install libzimg +RUN add-apt-repository "deb http://www.deb-multimedia.org bullseye main" && \ + apt-get update -oAcquire::AllowInsecureRepositories=true && apt-get install -y deb-multimedia-keyring --allow-unauthenticated && \ + apt-get update && apt-get install -y libzimg-dev && echo "/usr/lib/x86_64-linux-gnu" >> /etc/ld.so.conf && ldconfig RUN git clone https://github.com/FFmpeg/FFmpeg -b release/5.1 && \ cd /src/FFmpeg && \ ./configure \ From faaad02e4fc3763c471a9b104e8efb1b37c17fed Mon Sep 17 00:00:00 2001 From: Tim Kamau Date: Thu, 9 Mar 2023 19:55:32 +0300 Subject: [PATCH 4/5] install zimg from source --- nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile index 898dbf0..0de4cd1 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile @@ -57,7 +57,7 @@ RUN apt install -y \ # Use base image to build ffmpeg binary FROM base as ffmpeg-builder # Install build tools -RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm software-properties-common +RUN apt -y install build-essential cmake gcc git libc6 libc6-dev libtool nasm nvidia-cuda-toolkit yasm # Ffmpeg WORKDIR /src RUN git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1 && cd SVT-AV1/Build && cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release \ @@ -68,9 +68,12 @@ RUN git clone https://aomedia.googlesource.com/aom && cmake ./aom && \ RUN git clone https://github.com/FFmpeg/nv-codec-headers.git -b old/sdk/9.0 && cd nv-codec-headers && \ make && make install # install libzimg -RUN add-apt-repository "deb http://www.deb-multimedia.org bullseye main" && \ - apt-get update -oAcquire::AllowInsecureRepositories=true && apt-get install -y deb-multimedia-keyring --allow-unauthenticated && \ - apt-get update && apt-get install -y libzimg-dev && echo "/usr/lib/x86_64-linux-gnu" >> /etc/ld.so.conf && ldconfig +ARG zimg_version=release-3.0.4 +RUN git clone --branch release-3.0.4 --depth 1 https://github.com/sekrit-twc/zimg && cd zimg &&\ + ./autogen.sh &&\ + ./configure --enable-static --prefix=/usr/local --disable-shared &&\ + make -j $(nproc) &&\ + make install RUN git clone https://github.com/FFmpeg/FFmpeg -b release/5.1 && \ cd /src/FFmpeg && \ ./configure \ From a9d742176d5e835d3e1c937e195a693d578ce6d1 Mon Sep 17 00:00:00 2001 From: Victor Trac Date: Thu, 9 Mar 2023 14:33:09 -0600 Subject: [PATCH 5/5] Install libzimg, upgrade ffmpeg to 6.0 --- nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile index 0de4cd1..d6eadf0 100644 --- a/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile +++ b/nvidia-php8.1-fpm-ffmpeg-bullseye/Dockerfile @@ -30,8 +30,8 @@ ENV NVIDIA_DRIVER_CAPABILITIES compute,utility FROM nvidia as base ENV DEBIAN_FRONTEND noninteractive ENV TZ Etc/UTC -ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64 -ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig/ +ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64:/usr/local/lib +ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig:/src/zimg ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_DRIVER_CAPABILITIES video,compute,utility # Update base and install build tools @@ -65,16 +65,15 @@ RUN git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1 && cd SVT-AV1/Bu # Install libaom from source. RUN git clone https://aomedia.googlesource.com/aom && cmake ./aom && \ make && make install -RUN git clone https://github.com/FFmpeg/nv-codec-headers.git -b old/sdk/9.0 && cd nv-codec-headers && \ +RUN git clone https://github.com/FFmpeg/nv-codec-headers.git -b sdk/11.1 && cd nv-codec-headers && \ make && make install # install libzimg -ARG zimg_version=release-3.0.4 RUN git clone --branch release-3.0.4 --depth 1 https://github.com/sekrit-twc/zimg && cd zimg &&\ ./autogen.sh &&\ - ./configure --enable-static --prefix=/usr/local --disable-shared &&\ - make -j $(nproc) &&\ + ./configure &&\ + make -j $(nproc) && \ make install -RUN git clone https://github.com/FFmpeg/FFmpeg -b release/5.1 && \ +RUN git clone https://github.com/FFmpeg/FFmpeg -b release/6.0 && \ cd /src/FFmpeg && \ ./configure \ --prefix="/usr/local" \ @@ -106,7 +105,7 @@ RUN git clone https://github.com/FFmpeg/FFmpeg -b release/5.1 && \ --extra-ldflags="-L/usr/local/nvidia/lib64/" && \ make -j$(nproc) && make install - # Copy ffmpeg binary back to base image without compilation layers FROM base as nvidia-php-ffmpeg +COPY --from=ffmpeg-builder /usr/local/lib /usr/local/lib COPY --from=ffmpeg-builder /usr/local/bin /usr/local/bin