FROM emscripten/emsdk:5.0.1 AS build ARG FFMPEG_VERSION=8.0.1 ARG X264_COMMIT=b35605a ARG LAME_VERSION=3.100 ARG PREFIX=/opt/ffmpeg ARG MAKEFLAGS="-j4" RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc RUN echo "deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main\ndeb-src https://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" > /etc/apt/sources.list.d/llvm.list RUN apt-get update RUN apt-get install -y libllvm-20-ocaml-dev libllvm20 llvm-20 llvm-20-dev llvm-20-runtime RUN apt-get install -y libclang-rt-20-dev-wasm32 libclang-rt-20-dev-wasm64 libc++-20-dev-wasm32 libc++abi-20-dev-wasm32 libclang-rt-20-dev-wasm32 libclang-rt-20-dev-wasm64 RUN apt-get update && apt-get install -y autoconf libtool build-essential pkgconf # libx264 WORKDIR /tmp/ RUN git clone https://code.videolan.org/videolan/x264.git WORKDIR /tmp/x264 RUN git checkout ${X264_COMMIT} && \ emconfigure ./configure \ --prefix=${PREFIX} \ --host=i686-gnu \ --enable-static \ --disable-cli \ --disable-asm \ --extra-cflags="-s USE_PTHREADS=1" RUN emmake make && emmake make install WORKDIR /tmp/ # libmp3lame RUN wget -O lame-${LAME_VERSION}.tar.gz https://sourceforge.net/projects/lame/files/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz/download && \ tar zxf lame-${LAME_VERSION}.tar.gz && rm lame-${LAME_VERSION}.tar.gz WORKDIR /tmp/lame-${LAME_VERSION} RUN emconfigure ./configure \ --prefix=${PREFIX} \ --host=i686-gnu \ --enable-static \ --disable-frontend WORKDIR /tmp/lame-${LAME_VERSION} RUN emmake make && emmake make install # Get ffmpeg source. WORKDIR /tmp/ RUN wget -O ffmpeg-${FFMPEG_VERSION}.tar.gz http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \ tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && rm ffmpeg-${FFMPEG_VERSION}.tar.gz ARG CFLAGS="-s USE_PTHREADS=1 -O3 -I${PREFIX}/include" ARG LDFLAGS="$CFLAGS -L${PREFIX}/lib -s INITIAL_MEMORY=33554432" ENV EM_PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig" # Compile ffmpeg. WORKDIR /tmp/ffmpeg-${FFMPEG_VERSION} RUN emconfigure ./configure \ --prefix=${PREFIX} \ --target-os=none \ --arch=x86_32 \ --enable-cross-compile \ --disable-debug \ --disable-x86asm \ --disable-inline-asm \ --disable-stripping \ --disable-programs \ --disable-doc \ --disable-all \ --enable-avcodec \ --enable-avformat \ --enable-avfilter \ --enable-avdevice \ --enable-avutil \ --enable-swresample \ --enable-swscale \ --enable-protocol=file \ --enable-decoder=h264,aac,pcm_s16le,mp3 \ --enable-demuxer=mov,matroska,mp3 \ --enable-muxer=mp4 \ --enable-gpl \ --enable-libx264 \ --enable-libmp3lame \ --extra-cflags="$CFLAGS" \ --extra-cxxflags="$CFLAGS" \ --extra-ldflags="$LDFLAGS" \ --nm="llvm-nm -g" \ --ar=emar \ --as=llvm-as \ --ranlib=llvm-ranlib \ --cc=emcc \ --cxx=em++ \ --objcc=emcc \ --dep-cc=emcc RUN emmake make -j4 && \ emmake make install COPY ./src/ffprobe-wasm-wrapper.cpp /build/src/ffprobe-wasm-wrapper.cpp COPY ./Makefile /build/Makefile WORKDIR /build RUN make