From 47d4fa6b8f10099eb04e06d454ec84428e2220c2 Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Thu, 25 Sep 2025 23:48:35 +0700 Subject: [PATCH] refactor: streamline FFmpeg installation process and remove unnecessary CUDA development tools --- Dockerfile.base | 102 +++++------------------------------------------- 1 file changed, 10 insertions(+), 92 deletions(-) diff --git a/Dockerfile.base b/Dockerfile.base index 557a88e..e2baf08 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -31,24 +31,7 @@ RUN apt-get update && apt-get install -y \ python3-numpy \ && rm -rf /var/lib/apt/lists/* -# Install CUDA development tools (required for FFmpeg CUDA compilation) -RUN apt-get update && apt-get install -y \ - cuda-nvcc-12-6 \ - libcuda1 \ - cuda-cudart-dev-12-6 \ - cuda-driver-dev-12-6 \ - || echo "CUDA development packages not available, continuing without them" && \ - rm -rf /var/lib/apt/lists/* - -# Try to install NVIDIA packages (may not be available in all environments) -RUN apt-get update && apt-get install -y \ - libnvidia-encode-535 \ - libnvidia-decode-535 \ - || echo "NVIDIA packages not available, continuing without them" && \ - rm -rf /var/lib/apt/lists/* - -# Use pre-built FFmpeg with CUDA support using the build script -ENV FFMPEG_BUILD_SCRIPT_VERSION=1.43 +# Install prebuilt FFmpeg with CUDA support # Ensure CUDA paths are available ENV PATH="/usr/local/cuda/bin:${PATH}" ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}" @@ -61,23 +44,16 @@ RUN cd /tmp && \ make install && \ rm -rf /tmp/* -# Build FFmpeg using the well-maintained build script with CUDA support +# Download and install prebuilt FFmpeg with CUDA support RUN cd /tmp && \ - echo "Building FFmpeg with CUDA support using build script..." && \ - curl -sL "https://raw.githubusercontent.com/markus-perl/ffmpeg-build-script/master/build-ffmpeg" -o build-ffmpeg && \ - chmod +x build-ffmpeg && \ - # Configure the build script for CUDA support - SKIPINSTALL=yes \ - AUTOINSTALL=yes \ - ./build-ffmpeg \ - --build \ - --enable-gpl-and-non-free \ - --latest \ - --cuda \ - && \ - # Copy built binaries to system paths - cp workspace/bin/* /usr/local/bin/ && \ - cp workspace/lib/* /usr/local/lib/ && \ + echo "Installing prebuilt FFmpeg with CUDA support..." && \ + wget https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz && \ + tar -xf ffmpeg-master-latest-linux64-gpl.tar.xz && \ + cd ffmpeg-master-latest-linux64-gpl && \ + # Copy binaries to system paths + cp bin/* /usr/local/bin/ && \ + cp -r lib/* /usr/local/lib/ && \ + cp -r include/* /usr/local/include/ && \ ldconfig && \ # Verify CUVID decoders are available echo "=== Verifying FFmpeg CUVID Support ===" && \ @@ -86,45 +62,6 @@ RUN cd /tmp && \ (ffmpeg -hide_banner -encoders 2>/dev/null | grep nvenc || echo "No NVENC encoders found") && \ cd / && rm -rf /tmp/* -# Build OpenCV from source with custom FFmpeg and full CUDA support -ENV OPENCV_VERSION=4.8.1 -RUN cd /tmp && \ - wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ - wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ - unzip opencv.zip && \ - unzip opencv_contrib.zip && \ - cd opencv-${OPENCV_VERSION} && \ - mkdir build && cd build && \ - PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH \ - cmake -D CMAKE_BUILD_TYPE=RELEASE \ - -D CMAKE_INSTALL_PREFIX=/usr/local \ - -D WITH_CUDA=ON \ - -D WITH_CUDNN=ON \ - -D OPENCV_DNN_CUDA=ON \ - -D ENABLE_FAST_MATH=ON \ - -D CUDA_FAST_MATH=ON \ - -D WITH_CUBLAS=ON \ - -D WITH_NVCUVID=ON \ - -D WITH_CUVID=ON \ - -D BUILD_opencv_cudacodec=ON \ - -D WITH_FFMPEG=ON \ - -D WITH_LIBV4L=ON \ - -D BUILD_opencv_python3=ON \ - -D OPENCV_GENERATE_PKGCONFIG=ON \ - -D OPENCV_ENABLE_NONFREE=ON \ - -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv_contrib-${OPENCV_VERSION}/modules \ - -D PYTHON3_EXECUTABLE=$(which python3) \ - -D PYTHON_INCLUDE_DIR=$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))") \ - -D PYTHON_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \ - -D BUILD_EXAMPLES=OFF \ - -D BUILD_TESTS=OFF \ - -D BUILD_PERF_TESTS=OFF \ - .. && \ - make -j$(nproc) && \ - make install && \ - ldconfig && \ - cd / && rm -rf /tmp/* - # Set environment variables for maximum hardware acceleration ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/lib:${LD_LIBRARY_PATH}" ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}" @@ -143,25 +80,6 @@ RUN grep -v opencv-python requirements.base.txt > requirements.tmp && \ mv requirements.tmp requirements.base.txt && \ pip install --no-cache-dir -r requirements.base.txt -# Verify complete hardware acceleration setup -RUN echo "=== Hardware Acceleration Verification ===" && \ - echo "FFmpeg Hardware Accelerators:" && \ - (ffmpeg -hide_banner -hwaccels 2>/dev/null || echo "FFmpeg hwaccels command failed") && \ - echo "" && \ - echo "FFmpeg CUVID Decoders (NVIDIA):" && \ - (ffmpeg -hide_banner -decoders 2>/dev/null | grep -E "cuvid" || echo "No CUVID decoders found") && \ - echo "" && \ - echo "FFmpeg NVENC Encoders (NVIDIA):" && \ - (ffmpeg -hide_banner -encoders 2>/dev/null | grep -E "nvenc" || echo "No NVENC encoders found") && \ - echo "" && \ - echo "Testing CUVID decoder compilation (no GPU required):" && \ - (ffmpeg -hide_banner -f lavfi -i testsrc=duration=0.1:size=64x64:rate=1 -c:v libx264 -f null - 2>/dev/null && echo "✅ FFmpeg basic functionality working" || echo "❌ FFmpeg basic test failed") && \ - echo "" && \ - echo "OpenCV Configuration:" && \ - (python3 -c "import cv2; print('OpenCV version:', cv2.__version__); build_info = cv2.getBuildInformation(); print('CUDA support:', 'CUDA' in build_info); print('CUVID support:', 'CUVID' in build_info); print('FFmpeg support:', 'FFMPEG' in build_info)" || echo "OpenCV verification failed") && \ - echo "" && \ - echo "=== Verification Complete (build-time only) ===" - # Set working directory WORKDIR /app