bodhisativa's picture
Publish rAIdio.bot net-install tools: ComfyUI custom-node bundle + minimal FFmpeg build
2512c40 verified
Raw
History Blame Contribute Delete
4.66 kB
# syntax=docker/dockerfile:1
# Minimal audio-only ffmpeg for rAIdio.bot — win64 static, LGPL-2.1 (no GPL).
# Cross-compiled with mingw-w64. See README.md for rationale + smoke matrix.
FROM ubuntu:24.04 AS build
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 \
yasm nasm make pkg-config git curl xz-utils ca-certificates \
autoconf automake libtool \
&& rm -rf /var/lib/apt/lists/*
ENV HOST=x86_64-w64-mingw32
ENV PREFIX=/opt/win64
ENV PKG_CONFIG_LIBDIR=/opt/win64/lib/pkgconfig
WORKDIR /build
# ---- libogg (BSD) ----
ARG OGG_VER=1.3.5
RUN curl -fL https://downloads.xiph.org/releases/ogg/libogg-${OGG_VER}.tar.gz | tar xz \
&& cd libogg-${OGG_VER} \
&& ./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static \
&& make -j"$(nproc)" && make install
# ---- libvorbis (BSD) ----
ARG VORBIS_VER=1.3.7
RUN curl -fL https://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VER}.tar.gz | tar xz \
&& cd libvorbis-${VORBIS_VER} \
&& ./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static --with-ogg=$PREFIX \
&& make -j"$(nproc)" && make install
# ---- opus (BSD) ----
ARG OPUS_VER=1.5.2
RUN curl -fL https://downloads.xiph.org/releases/opus/opus-${OPUS_VER}.tar.gz | tar xz \
&& cd opus-${OPUS_VER} \
&& ./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static --disable-doc --disable-extra-programs \
&& make -j"$(nproc)" && make install
# ---- LAME (LGPL-2.1) ----
ARG LAME_VER=3.100
RUN curl -fL https://downloads.sourceforge.net/project/lame/lame/${LAME_VER}/lame-${LAME_VER}.tar.gz | tar xz \
&& cd lame-${LAME_VER} \
&& ./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static --disable-frontend \
&& make -j"$(nproc)" && make install
# ---- zlib (Zlib) — mingw cross via its win32 makefile ----
ARG ZLIB_VER=1.3.1
RUN curl -fL https://zlib.net/fossils/zlib-${ZLIB_VER}.tar.gz | tar xz \
&& cd zlib-${ZLIB_VER} \
&& make -f win32/Makefile.gcc PREFIX=$HOST- \
BINARY_PATH=$PREFIX/bin INCLUDE_PATH=$PREFIX/include LIBRARY_PATH=$PREFIX/lib \
SHARED_MODE=0 install
# ---- ffmpeg (LGPL-2.1-or-later; no --enable-gpl) ----
ARG FFMPEG_VER=7.1.1
RUN curl -fL https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VER}.tar.xz | tar xJ \
&& cd ffmpeg-${FFMPEG_VER} \
&& PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig ./configure \
--prefix=/out \
--arch=x86_64 --target-os=mingw32 --cross-prefix=$HOST- \
--pkg-config=pkg-config --pkg-config-flags=--static \
--enable-static --disable-shared \
--extra-cflags="-I$PREFIX/include" \
--extra-ldflags="-L$PREFIX/lib -static -static-libgcc" \
--disable-debug --disable-doc --disable-network --disable-devices --disable-autodetect \
--disable-programs --enable-ffmpeg --enable-ffprobe \
--enable-libmp3lame --enable-libvorbis --enable-libopus --enable-zlib \
--enable-protocol=file,pipe \
--disable-encoders \
--enable-encoder=pcm_s16le,pcm_s16be,pcm_s24le,pcm_s32le,pcm_f32le,pcm_u8,pcm_s8,flac,libmp3lame,libvorbis,libopus,wavpack,alac \
--disable-muxers \
--enable-muxer=wav,w64,flac,mp3,ogg,opus,null,pcm_s16le,pcm_s24le,pcm_f32le,pcm_s16be,data,ipod,mp4 \
--disable-decoder=h264,hevc,vvc,vc1,vc1image,mpeg1video,mpeg2video,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,wmv1,wmv2,wmv3,vp6,vp6a,vp6f \
--enable-filter=aresample,aformat,anull,atrim,asetnsamples,asetpts,aselect,volume,channelmap,channelsplit,join,amerge,amix,pan,silenceremove,silencedetect,loudnorm,dynaudnorm,highpass,lowpass,equalizer,atempo,aecho,acompressor,anlmdn,afftdn,abuffer,abuffersink,anullsrc \
&& make -j"$(nproc)" && make install \
&& $HOST-strip /out/bin/ffmpeg.exe /out/bin/ffprobe.exe || true
# Capture the exact configure + component manifest for the SBOM / audit trail.
RUN cd ffmpeg-${FFMPEG_VER} 2>/dev/null || cd $(ls -d ffmpeg-*) ; \
{ echo "=== build host ==="; $HOST-gcc --version | head -1; \
echo; echo "=== ffmpeg -buildconf (from config.h) ==="; \
sed -n 's/.*FFMPEG_CONFIGURATION "\(.*\)"/\1/p' config.h; \
echo; echo "=== lib versions ==="; \
echo "ffmpeg ${FFMPEG_VER}; lame ${LAME_VER}; libvorbis ${VORBIS_VER}; libogg ${OGG_VER}; opus ${OPUS_VER}; zlib ${ZLIB_VER}"; \
} > /out/MANIFEST.txt && cat /out/MANIFEST.txt
# ---- export stage: only the artifacts ----
FROM scratch AS export
COPY --from=build /out/bin/ffmpeg.exe /ffmpeg.exe
COPY --from=build /out/bin/ffprobe.exe /ffprobe.exe
COPY --from=build /out/MANIFEST.txt /MANIFEST.txt