Spaces:
Paused
Paused
| # ── Stage 1: compilação (imagem devel com headers CUDA) ─────── | |
| FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 AS builder | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential nasm yasm bzip2 git wget \ | |
| libfdk-aac-dev libx264-dev libx265-dev libnuma-dev zlib1g-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # nv-codec-headers (necessário para h264_nvenc / hevc_nvenc / cuvid) | |
| RUN git clone --depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git /tmp/nv-codec-headers \ | |
| && make -C /tmp/nv-codec-headers install \ | |
| && rm -rf /tmp/nv-codec-headers | |
| # Compila ffmpeg 7.1.1 com libfdk_aac + NVENC | |
| RUN wget -q -O /tmp/ffmpeg.tar.bz2 https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.bz2 \ | |
| && tar xf /tmp/ffmpeg.tar.bz2 -C /tmp \ | |
| && rm /tmp/ffmpeg.tar.bz2 \ | |
| && cd /tmp/ffmpeg-7.1.1 \ | |
| && ./configure \ | |
| --prefix=/usr/local \ | |
| --enable-gpl \ | |
| --enable-nonfree \ | |
| --disable-everything \ | |
| --enable-encoder=libx264,libx265,libfdk_aac,aac,h264_nvenc,hevc_nvenc \ | |
| --enable-decoder=h264,hevc,vp9,vp9_cuvid,aac,mp3,ac3,eac3,opus,vorbis,flac,pcm_s16le,pcm_s16be,png,mjpeg \ | |
| --enable-hwaccel=h264_nvdec,hevc_nvdec,vp9_nvdec \ | |
| --enable-demuxer=mov,mp4,matroska,avi,flv,mpegts,wav,mp3,aac,flac,image2 \ | |
| --enable-muxer=mp4,matroska,null \ | |
| --enable-filter=loudnorm,volume,aresample,scale,pad,mpdecimate,fps,overlay,crop,format,null \ | |
| --enable-protocol=file,pipe \ | |
| --enable-libx264 \ | |
| --enable-libx265 \ | |
| --enable-libfdk-aac \ | |
| --enable-nvenc \ | |
| --enable-nvdec \ | |
| --enable-cuda \ | |
| --enable-zlib \ | |
| --enable-cuvid \ | |
| --extra-cflags="-O2 -pipe -I/usr/local/cuda/include" \ | |
| --extra-ldflags="-s -L/usr/local/cuda/lib64" \ | |
| --disable-doc \ | |
| --disable-htmlpages \ | |
| --disable-manpages \ | |
| --disable-podpages \ | |
| --disable-txtpages \ | |
| && make -j"$(nproc)" \ | |
| && make install \ | |
| && rm -rf /tmp/ffmpeg-7.1.1 | |
| # ── Stage 2: imagem final (runtime leve) ────────────────────── | |
| FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| # Só as libs de runtime necessárias | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| python3 python3-pip ca-certificates \ | |
| libfdk-aac2 libx264-163 libx265-199 libnuma1 zlib1g \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Copia apenas os binários compilados do stage 1 | |
| COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg | |
| COPY --from=builder /usr/local/bin/ffprobe /usr/local/bin/ffprobe | |
| # ── Valida que todos os filtros, decoders e demuxers necessários estão presentes ── | |
| RUN set -e; \ | |
| echo "--- versão ---"; ffmpeg -version | head -1; \ | |
| echo "--- encoders ---"; \ | |
| for c in libx264 libx265 h264_nvenc hevc_nvenc libfdk_aac; do \ | |
| ffmpeg -encoders 2>/dev/null | grep -q " $c " || (echo "❌ encoder ausente: $c" && exit 1); \ | |
| echo " ✅ encoder $c"; \ | |
| done; \ | |
| echo "--- decoders ---"; \ | |
| for c in h264 hevc vp9 aac mp3 png mjpeg; do \ | |
| ffmpeg -decoders 2>/dev/null | grep -q " $c " || (echo "❌ decoder ausente: $c" && exit 1); \ | |
| echo " ✅ decoder $c"; \ | |
| done; \ | |
| echo "--- filtros ---"; \ | |
| for f in scale crop fps mpdecimate overlay format loudnorm aresample; do \ | |
| ffmpeg -filters 2>/dev/null | grep -q " $f " || (echo "❌ filtro ausente: $f" && exit 1); \ | |
| echo " ✅ filtro $f"; \ | |
| done; \ | |
| echo "✅ ffmpeg OK — todos os componentes presentes" | |
| WORKDIR /app | |
| COPY app.py . | |
| RUN pip3 install --no-cache-dir gradio | |
| EXPOSE 7860 | |
| ENV PYTHONUNBUFFERED=1 | |
| CMD ["python3", "app.py"] | |