super-re-encode / Dockerfile
patocolher's picture
Upload Dockerfile
4443159 verified
# ── 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"]